diff options
author | Araq <rumpf_a@web.de> | 2013-08-11 18:48:33 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2013-08-11 18:48:33 +0200 |
commit | d18c82a9ef1647c6f56e393df959ed5ec370e77c (patch) | |
tree | bfcc855cdf1d4a940355b6f557e48eec9f500533 /compiler/vmgen.nim | |
parent | a294d45fd67cebec8dd0efc43417fdc2ad1030dc (diff) | |
download | Nim-d18c82a9ef1647c6f56e393df959ed5ec370e77c.tar.gz |
new VM: preparations for evalMacroCall
Diffstat (limited to 'compiler/vmgen.nim')
-rw-r--r-- | compiler/vmgen.nim | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim index 016cfc96c..f7df31c0c 100644 --- a/compiler/vmgen.nim +++ b/compiler/vmgen.nim @@ -674,26 +674,27 @@ proc genMagic(c: PCtx; n: PNode; dest: var TDest) = genUnaryABC(c, n, dest, opcParseStmtToAst) of mExpandToAst: InternalError(n.info, "cannot generate code for: " & $m) - of mTypeTrait: InternalError(n.info, "cannot generate code for: " & $m) - of mIs: InternalError(n.info, "cannot generate code for: " & $m) + of mTypeTrait: + + InternalError(n.info, "cannot generate code for: " & $m) + of mIs: + InternalError(n.info, "cannot generate code for: " & $m) of mSlurp: genUnaryABC(c, n, dest, opcSlurp) of mStaticExec: genBinaryABC(c, n, dest, opcGorge) of mNLen: genUnaryABI(c, n, dest, opcLenSeq) of mNChild: genBinaryABC(c, n, dest, opcNChild) - of mNSetChild: + of mNSetChild, mNDel: unused(n, dest) var tmp1 = c.genx(n.sons[1]) tmp2 = c.genx(n.sons[2]) tmp3 = c.genx(n.sons[3]) - c.gABC(n, opcNSetChild, tmp1, tmp2, tmp3) + c.gABC(n, if m == mNSetChild: opcNSetChild else: opcNDel, tmp1, tmp2, tmp3) c.freeTemp(tmp1) c.freeTemp(tmp2) c.freeTemp(tmp3) of mNAdd: genBinaryABC(c, n, dest, opcNAdd) of mNAddMultiple: genBinaryABC(c, n, dest, opcNAddMultiple) - of mNDel: - InternalError(n.info, "cannot generate code for: " & $m) of mNKind: genUnaryABC(c, n, dest, opcNKind) of mNIntVal: genUnaryABC(c, n, dest, opcNIntVal) of mNFloatVal: genUnaryABC(c, n, dest, opcNFloatVal) @@ -740,6 +741,7 @@ proc genMagic(c: PCtx; n: PNode; dest: var TDest) = of mNCallSite: if dest < 0: dest = c.getTemp(n.typ) c.gABC(n, opcCallSite, dest) + of mNGenSym: genBinaryABC(c, n, dest, opcGenSym) of mMinI, mMaxI, mMinI64, mMaxI64, mAbsF64, mMinF64, mMaxF64, mAbsI, mAbsI64: c.genCall(n, dest) else: @@ -1166,6 +1168,14 @@ proc genStmt*(c: PCtx; n: PNode): int = c.gABC(n, opcEof) InternalAssert d < 0 +proc genExpr*(c: PCtx; n: PNode): int = + c.removeLastEof + result = c.code.len + var d: TDest = -1 + c.gen(n, d) + InternalAssert d >= 0 + c.gABC(n, opcEof, d) + proc genParams(c: PCtx; params: PNode) = # res.sym.position is already 0 c.prc.slots[0] = (inUse: true, kind: slotFixedVar) |