diff options
-rw-r--r-- | compiler/ccgtypes.nim | 2 | ||||
-rw-r--r-- | lib/core/runtime_v2.nim | 5 |
2 files changed, 4 insertions, 3 deletions
diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim index 6b4e9602b..51f04d076 100644 --- a/compiler/ccgtypes.nim +++ b/compiler/ccgtypes.nim @@ -1255,7 +1255,7 @@ proc genObjectInfoV2(m: BModule, t, origType: PType, name: Rope; info: TLineInfo else: d = rope("NIM_NIL") addf(m.s[cfsVars], "TNimType $1;$n", [name]) - addf(m.s[cfsTypeInit3], "$1.destructor = $2; $1.size = sizeof($3); $1.name = $4;$n", [ + addf(m.s[cfsTypeInit3], "$1.destructor = (void*)$2; $1.size = sizeof($3); $1.name = $4;$n", [ name, d, getTypeDesc(m, t), genTypeInfo2Name(m, t)]) proc genTypeInfo(m: BModule, t: PType; info: TLineInfo): Rope = diff --git a/lib/core/runtime_v2.nim b/lib/core/runtime_v2.nim index 4367954d1..372c364db 100644 --- a/lib/core/runtime_v2.nim +++ b/lib/core/runtime_v2.nim @@ -27,8 +27,9 @@ hash of ``package & "." & module & "." & name`` to save space. type TNimNode {.compilerProc.} = object # to keep the code generator simple + DestructorProc = proc (p: pointer) {.nimcall, benign.} TNimType {.compilerProc.} = object - destructor: proc (p: pointer) {.nimcall, benign.} + destructor: pointer size: int name: cstring PNimType = ptr TNimType @@ -65,7 +66,7 @@ proc nimRawDispose(p: pointer) {.compilerRtl.} = proc nimDestroyAndDispose(p: pointer) {.compilerRtl.} = let d = cast[ptr PNimType](p)[].destructor - if d != nil: d(p) + if d != nil: cast[DestructorProc](d)(p) nimRawDispose(p) proc isObj(obj: PNimType, subclass: cstring): bool {.compilerproc.} = |