Merge pull request #3307 from rogercloud/devel

Fix issue #2245
This commit is contained in:
Andreas Rumpf
2015-09-14 17:37:54 +02:00
3 changed files with 16 additions and 4 deletions

View File

@@ -146,7 +146,7 @@ proc isPartOf*(a, b: PNode): TAnalysisResult =
# go down recursively; this is quite demanding:
const
Ix0Kinds = {nkDotExpr, nkBracketExpr, nkObjUpConv, nkObjDownConv,
nkCheckedFieldExpr}
nkCheckedFieldExpr, nkHiddenAddr}
Ix1Kinds = {nkHiddenStdConv, nkHiddenSubConv, nkConv}
DerefKinds = {nkHiddenDeref, nkDerefExpr}
case b.kind

View File

@@ -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)

View File

@@ -30,7 +30,7 @@ type
c: char
se: seq[TA]
proc p(param1, param2: TC): TC =
proc p(param1, param2: TC, param3: var TC): TC =
var
local: TC
plocal: ptr TC
@@ -43,6 +43,7 @@ proc p(param1, param2: TC): TC =
plocal2[] ?<| local
param1 ?<| param2
local ?<| param3
local.arr[0] !<| param1
local.arr !<| param1
@@ -62,5 +63,5 @@ var
a <| a
a !<| b
discard p(x, x)
discard p(x, x, x)