diff options
author | Araq <rumpf_a@web.de> | 2018-11-16 00:13:39 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2018-11-16 00:13:49 +0100 |
commit | 4bd9f32f335b43d1cdcfbbd99cbe91bb478a400c (patch) | |
tree | a629a0df2999c02a574b3c4e82ca988e6204f2b2 /compiler/ccgexprs.nim | |
parent | 2eb14bdd41933d3b1b624e48d7513172be1a1e7a (diff) | |
download | Nim-4bd9f32f335b43d1cdcfbbd99cbe91bb478a400c.tar.gz |
--gc:destructors: hello world example compiles and runs
Diffstat (limited to 'compiler/ccgexprs.nim')
-rw-r--r-- | compiler/ccgexprs.nim | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 3aa5e48e8..1633dd3cc 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -1580,8 +1580,17 @@ proc genArrayLen(p: BProc, e: PNode, d: var TLoc, op: TMagic) = else: putIntoDest(p, d, e, rope(lengthOrd(p.config, typ))) else: internalError(p.config, e.info, "genArrayLen()") +proc makePtrType(baseType: PType): PType = + result = newType(tyPtr, baseType.owner) + addSonSkipIntLit(result, baseType) + +proc makeAddr(n: PNode): PNode = + result = newTree(nkHiddenAddr, n) + result.typ = makePtrType(n.typ) + proc genSetLengthSeq(p: BProc, e: PNode, d: var TLoc) = if p.config.selectedGc == gcDestructors: + e.sons[1] = makeAddr(e[1]) genCall(p, e, d) return var a, b, call: TLoc @@ -1963,6 +1972,7 @@ proc genMagicExpr(p: BProc, e: PNode, d: var TLoc, op: TMagic) = of mAppendStrStr: genStrAppend(p, e, d) of mAppendSeqElem: if p.config.selectedGc == gcDestructors: + e.sons[1] = makeAddr(e[1]) genCall(p, e, d) else: genSeqElemAppend(p, e, d) |