Fix vm regression (#8163)
This commit is contained in:
parent
d146045ed5
commit
7ae9c4358e
2 changed files with 20 additions and 0 deletions
|
|
@ -622,6 +622,13 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg =
|
||||||
stackTrace(c, tos, pc, errNilAccess)
|
stackTrace(c, tos, pc, errNilAccess)
|
||||||
regs[ra].nodeAddr[][] = n[]
|
regs[ra].nodeAddr[][] = n[]
|
||||||
regs[ra].nodeAddr[].flags.incl nfIsRef
|
regs[ra].nodeAddr[].flags.incl nfIsRef
|
||||||
|
# `var object` parameters are sent as rkNodeAddr. When they are mutated
|
||||||
|
# vmgen generates opcWrDeref, which means that we must dereference
|
||||||
|
# twice.
|
||||||
|
# TODO: This should likely be handled differently in vmgen.
|
||||||
|
elif (nfIsRef notin regs[ra].nodeAddr[].flags and
|
||||||
|
nfIsRef notin n.flags):
|
||||||
|
regs[ra].nodeAddr[][] = n[]
|
||||||
else:
|
else:
|
||||||
regs[ra].nodeAddr[] = n
|
regs[ra].nodeAddr[] = n
|
||||||
of rkRegisterAddr: regs[ra].regAddr[] = regs[rc]
|
of rkRegisterAddr: regs[ra].regAddr[] = regs[rc]
|
||||||
|
|
|
||||||
|
|
@ -135,3 +135,16 @@ static:
|
||||||
o.pushName()
|
o.pushName()
|
||||||
o.pushName()
|
o.pushName()
|
||||||
doAssert o.names == "FOOBARFOOBAR"
|
doAssert o.names == "FOOBARFOOBAR"
|
||||||
|
|
||||||
|
# #8154
|
||||||
|
import parseutils
|
||||||
|
|
||||||
|
static:
|
||||||
|
type Obj = object
|
||||||
|
i: int
|
||||||
|
|
||||||
|
proc foo(): Obj =
|
||||||
|
discard parseInt("1", result.i, 0)
|
||||||
|
|
||||||
|
static:
|
||||||
|
doAssert foo().i == 1
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue