mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-08 21:04:20 +00:00
Fix vm regression (#8163)
This commit is contained in:
committed by
Andreas Rumpf
parent
d146045ed5
commit
7ae9c4358e
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user