mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-18 13:30:33 +00:00
VM regression fixes (#8146)
This commit is contained in:
committed by
Andreas Rumpf
parent
64c84a7d11
commit
ae69e571e1
@@ -209,7 +209,7 @@ proc writeField(n: var PNode, x: TFullReg) =
|
||||
of rkNone: discard
|
||||
of rkInt: n.intVal = x.intVal
|
||||
of rkFloat: n.floatVal = x.floatVal
|
||||
of rkNode: n = x.node
|
||||
of rkNode: n = copyValue(x.node)
|
||||
of rkRegisterAddr: writeField(n, x.regAddr[])
|
||||
of rkNodeAddr: n = x.nodeAddr[]
|
||||
|
||||
@@ -912,6 +912,7 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg =
|
||||
if a.kind == nkSym:
|
||||
regs[ra].node = if a.sym.ast.isNil: newNode(nkNilLit)
|
||||
else: copyTree(a.sym.ast)
|
||||
regs[ra].node.flags.incl nfIsRef
|
||||
else:
|
||||
stackTrace(c, tos, pc, "node is not a symbol")
|
||||
of opcEcho:
|
||||
@@ -1462,6 +1463,7 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg =
|
||||
else:
|
||||
regs[ra].node = newNodeI(nkIdent, c.debug[pc])
|
||||
regs[ra].node.ident = getIdent(c.cache, regs[rb].node.strVal)
|
||||
regs[ra].node.flags.incl nfIsRef
|
||||
of opcSetType:
|
||||
if regs[ra].kind != rkNode:
|
||||
internalError(c.config, c.debug[pc], "cannot set type")
|
||||
|
||||
@@ -89,4 +89,34 @@ block:
|
||||
proc f(size: int): int =
|
||||
var some = newStringOfCap(size)
|
||||
result = size
|
||||
doAssert f(4) == 4
|
||||
doAssert f(4) == 4
|
||||
|
||||
# #7871
|
||||
static:
|
||||
type Obj = object
|
||||
field: int
|
||||
var s = newSeq[Obj](1)
|
||||
var o = Obj()
|
||||
s[0] = o
|
||||
o.field = 2
|
||||
doAssert s[0].field == 0
|
||||
|
||||
# #8125
|
||||
static:
|
||||
let def_iter_var = ident("it")
|
||||
|
||||
# #8142
|
||||
static:
|
||||
type Obj = object
|
||||
names: string
|
||||
|
||||
proc pushName(o: var Obj) =
|
||||
var s = ""
|
||||
s.add("FOOBAR")
|
||||
o.names.add(s)
|
||||
|
||||
var o = Obj()
|
||||
o.names = ""
|
||||
o.pushName()
|
||||
o.pushName()
|
||||
doAssert o.names == "FOOBARFOOBAR"
|
||||
Reference in New Issue
Block a user