mirror of
https://github.com/nim-lang/Nim.git
synced 2026-07-18 15:01:24 +00:00
Object downconversion in VM should not copy (#10378)
Hopefully the type-check phase already rejected all the invalid conversions by the time we execute the VM bytecode. Problem reported by chrisheller on the Nim Forum
This commit is contained in:
@@ -399,6 +399,11 @@ proc opConv(c: PCtx; dest: var TFullReg, src: TFullReg, desttyp, srctyp: PType):
|
||||
dest.floatVal = toBiggestFloat(src.intVal)
|
||||
else:
|
||||
dest.floatVal = src.floatVal
|
||||
of tyObject:
|
||||
if srctyp.skipTypes(abstractRange).kind != tyObject:
|
||||
internalError(c.config, "invalid object-to-object conversion")
|
||||
# A object-to-object conversion is essentially a no-op
|
||||
moveConst(dest, src)
|
||||
else:
|
||||
asgnComplex(dest, src)
|
||||
|
||||
|
||||
@@ -48,3 +48,20 @@ let people = {
|
||||
}.toTable()
|
||||
|
||||
echo people["001"]
|
||||
|
||||
# Object downconversion should not copy
|
||||
|
||||
type
|
||||
SomeBaseObj {.inheritable.} = object of RootObj
|
||||
txt : string
|
||||
InheritedFromBase = object of SomeBaseObj
|
||||
other : string
|
||||
|
||||
proc initBase(sbo: var SomeBaseObj) =
|
||||
sbo.txt = "Initialized string from base"
|
||||
|
||||
static:
|
||||
var ifb2: InheritedFromBase
|
||||
initBase(SomeBaseObj(ifb2))
|
||||
echo repr(ifb2)
|
||||
doAssert(ifb2.txt == "Initialized string from base")
|
||||
|
||||
Reference in New Issue
Block a user