diff options
author | Stefan Talpalaru <stefantalpalaru@yahoo.com> | 2015-06-15 08:36:55 +0200 |
---|---|---|
committer | Stefan Talpalaru <stefantalpalaru@yahoo.com> | 2015-06-15 08:36:55 +0200 |
commit | 657d6f9de2d8fc8960fb703f927db2ff2070d5a4 (patch) | |
tree | cdd4a6acb90c08318e93a07a825acd7f81862c7d /lib | |
parent | 02ddbae8f659b2c3bf3f05a924bccbc3c15c3137 (diff) | |
download | Nim-657d6f9de2d8fc8960fb703f927db2ff2070d5a4.tar.gz |
finalizer support
Diffstat (limited to 'lib')
-rw-r--r-- | lib/system/mmdisp.nim | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/system/mmdisp.nim b/lib/system/mmdisp.nim index 377408f78..ef7b32001 100644 --- a/lib/system/mmdisp.nim +++ b/lib/system/mmdisp.nim @@ -341,11 +341,17 @@ elif defined(gogc): proc goRuntimeMallocGC(size: uint, typ: uint, flag: uint32): pointer {.importc: "runtime_mallocgc", dynlib: goLib.} proc goFree(v: pointer) {.importc: "__go_free", dynlib: goLib.} + proc goSetFinalizer(obj: pointer, f: pointer) {.importc: "set_finalizer", codegenDecl:"$1 $2$3 __asm__ (\"main.Set_finalizer\");\n$1 $2$3", dynlib: goLib.} + proc newObj(typ: PNimType, size: int): pointer {.compilerproc.} = result = goRuntimeMallocGC(roundup(size, sizeof(pointer)).uint, 0.uint, 0.uint32) + if typ.finalizer != nil: + goSetFinalizer(result, typ.finalizer) proc newObjNoInit(typ: PNimType, size: int): pointer = result = goRuntimeMallocGC(roundup(size, sizeof(pointer)).uint, 0.uint, goFlagNoZero) + if typ.finalizer != nil: + goSetFinalizer(result, typ.finalizer) proc newSeq(typ: PNimType, len: int): pointer {.compilerproc.} = result = newObj(typ, len * typ.base.size + GenericSeqSize) |