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)
|
||||
regs[ra].nodeAddr[][] = n[]
|
||||
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:
|
||||
regs[ra].nodeAddr[] = n
|
||||
of rkRegisterAddr: regs[ra].regAddr[] = regs[rc]
|
||||
|
|
|
|||
|
|
@ -135,3 +135,16 @@ static:
|
|||
o.pushName()
|
||||
o.pushName()
|
||||
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