Merge pull request #8995 from LemonBoy/fix-4952
Fix error during field access in VM
This commit is contained in:
commit
aa2d219afe
2 changed files with 24 additions and 3 deletions
|
|
@ -557,11 +557,15 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg =
|
||||||
# a = b.c
|
# a = b.c
|
||||||
decodeBC(rkNode)
|
decodeBC(rkNode)
|
||||||
let src = regs[rb].node
|
let src = regs[rb].node
|
||||||
if src.kind notin {nkEmpty..nkNilLit}:
|
case src.kind
|
||||||
let n = src.sons[rc + ord(src.kind == nkObjConstr)].skipColon
|
of nkEmpty..nkNilLit:
|
||||||
|
stackTrace(c, tos, pc, errNilAccess)
|
||||||
|
of nkObjConstr:
|
||||||
|
let n = src.sons[rc + 1].skipColon
|
||||||
regs[ra].node = n
|
regs[ra].node = n
|
||||||
else:
|
else:
|
||||||
stackTrace(c, tos, pc, errNilAccess)
|
let n = src.sons[rc]
|
||||||
|
regs[ra].node = n
|
||||||
of opcWrObj:
|
of opcWrObj:
|
||||||
# a.b = c
|
# a.b = c
|
||||||
decodeBC(rkNode)
|
decodeBC(rkNode)
|
||||||
|
|
|
||||||
17
tests/vm/t4952.nim
Normal file
17
tests/vm/t4952.nim
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
import macros
|
||||||
|
|
||||||
|
proc doCheck(tree: NimNode) =
|
||||||
|
let res: tuple[n: NimNode] = (n: tree)
|
||||||
|
assert: tree.kind == res.n.kind
|
||||||
|
for sub in tree:
|
||||||
|
doCheck(sub)
|
||||||
|
|
||||||
|
macro id(body: untyped): untyped =
|
||||||
|
doCheck(body)
|
||||||
|
|
||||||
|
id(foo((i: int)))
|
||||||
|
|
||||||
|
static:
|
||||||
|
let tree = newTree(nnkExprColonExpr)
|
||||||
|
let t = (n: tree)
|
||||||
|
assert: t.n.kind == tree.kind
|
||||||
Loading…
Add table
Add a link
Reference in a new issue