Merge remote-tracking branch 'nim-lang/devel' into emscripten-support
This commit is contained in:
commit
bbf77e1d23
7 changed files with 66 additions and 12 deletions
|
|
@ -1074,9 +1074,9 @@ when not defined(js):
|
|||
## for nice error messages.
|
||||
var p: JsonParser
|
||||
p.open(s, filename)
|
||||
defer: p.close()
|
||||
discard getTok(p) # read first token
|
||||
result = p.parseJson()
|
||||
p.close()
|
||||
|
||||
proc parseJson*(buffer: string): JsonNode =
|
||||
## Parses JSON from `buffer`.
|
||||
|
|
@ -1203,6 +1203,17 @@ when isMainModule:
|
|||
testJson{["c", "d"]} = %true
|
||||
assert(testJson["c"]["d"].bval)
|
||||
|
||||
# make sure no memory leek when parsing invalid string
|
||||
let startMemory = getOccupiedMem()
|
||||
for i in 0 .. 10000:
|
||||
try:
|
||||
discard parseJson"""{ invalid"""
|
||||
except:
|
||||
discard
|
||||
# memory diff should less than 2M
|
||||
assert(abs(getOccupiedMem() - startMemory) < 2 * 1024 * 1024)
|
||||
|
||||
|
||||
# test `$`
|
||||
let stringified = $testJson
|
||||
let parsedAgain = parseJson(stringified)
|
||||
|
|
|
|||
|
|
@ -21,9 +21,22 @@ proc reprPointer(x: pointer): string {.compilerproc.} =
|
|||
return $buf
|
||||
|
||||
proc `$`(x: uint64): string =
|
||||
var buf: array [0..59, char]
|
||||
discard c_sprintf(buf, "%llu", x)
|
||||
return $buf
|
||||
if x == 0:
|
||||
result = "0"
|
||||
else:
|
||||
var buf: array [60, char]
|
||||
var i = 0
|
||||
var n = x
|
||||
while n != 0:
|
||||
let nn = n div 10'u64
|
||||
buf[i] = char(n - 10'u64 * nn + ord('0'))
|
||||
inc i
|
||||
n = nn
|
||||
|
||||
let half = i div 2
|
||||
# Reverse
|
||||
for t in 0 .. < half: swap(buf[t], buf[i-t-1])
|
||||
result = $buf
|
||||
|
||||
proc reprStrAux(result: var string, s: string) =
|
||||
if cast[pointer](s) == nil:
|
||||
|
|
@ -294,4 +307,3 @@ when not defined(useNimRtl):
|
|||
reprAux(result, addr(p), typ, cl)
|
||||
add result, "\n"
|
||||
deinitReprClosure(cl)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue