commit
fa17707684
3 changed files with 16 additions and 4 deletions
|
|
@ -146,7 +146,7 @@ proc isPartOf*(a, b: PNode): TAnalysisResult =
|
||||||
# go down recursively; this is quite demanding:
|
# go down recursively; this is quite demanding:
|
||||||
const
|
const
|
||||||
Ix0Kinds = {nkDotExpr, nkBracketExpr, nkObjUpConv, nkObjDownConv,
|
Ix0Kinds = {nkDotExpr, nkBracketExpr, nkObjUpConv, nkObjDownConv,
|
||||||
nkCheckedFieldExpr}
|
nkCheckedFieldExpr, nkHiddenAddr}
|
||||||
Ix1Kinds = {nkHiddenStdConv, nkHiddenSubConv, nkConv}
|
Ix1Kinds = {nkHiddenStdConv, nkHiddenSubConv, nkConv}
|
||||||
DerefKinds = {nkHiddenDeref, nkDerefExpr}
|
DerefKinds = {nkHiddenDeref, nkDerefExpr}
|
||||||
case b.kind
|
case b.kind
|
||||||
|
|
|
||||||
|
|
@ -1074,9 +1074,9 @@ when not defined(js):
|
||||||
## for nice error messages.
|
## for nice error messages.
|
||||||
var p: JsonParser
|
var p: JsonParser
|
||||||
p.open(s, filename)
|
p.open(s, filename)
|
||||||
|
defer: p.close()
|
||||||
discard getTok(p) # read first token
|
discard getTok(p) # read first token
|
||||||
result = p.parseJson()
|
result = p.parseJson()
|
||||||
p.close()
|
|
||||||
|
|
||||||
proc parseJson*(buffer: string): JsonNode =
|
proc parseJson*(buffer: string): JsonNode =
|
||||||
## Parses JSON from `buffer`.
|
## Parses JSON from `buffer`.
|
||||||
|
|
@ -1203,6 +1203,17 @@ when isMainModule:
|
||||||
testJson{["c", "d"]} = %true
|
testJson{["c", "d"]} = %true
|
||||||
assert(testJson["c"]["d"].bval)
|
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 `$`
|
# test `$`
|
||||||
let stringified = $testJson
|
let stringified = $testJson
|
||||||
let parsedAgain = parseJson(stringified)
|
let parsedAgain = parseJson(stringified)
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ type
|
||||||
c: char
|
c: char
|
||||||
se: seq[TA]
|
se: seq[TA]
|
||||||
|
|
||||||
proc p(param1, param2: TC): TC =
|
proc p(param1, param2: TC, param3: var TC): TC =
|
||||||
var
|
var
|
||||||
local: TC
|
local: TC
|
||||||
plocal: ptr TC
|
plocal: ptr TC
|
||||||
|
|
@ -43,6 +43,7 @@ proc p(param1, param2: TC): TC =
|
||||||
plocal2[] ?<| local
|
plocal2[] ?<| local
|
||||||
|
|
||||||
param1 ?<| param2
|
param1 ?<| param2
|
||||||
|
local ?<| param3
|
||||||
|
|
||||||
local.arr[0] !<| param1
|
local.arr[0] !<| param1
|
||||||
local.arr !<| param1
|
local.arr !<| param1
|
||||||
|
|
@ -62,5 +63,5 @@ var
|
||||||
a <| a
|
a <| a
|
||||||
a !<| b
|
a !<| b
|
||||||
|
|
||||||
discard p(x, x)
|
discard p(x, x, x)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue