new VM: preparations for evalMacroCall
This commit is contained in:
parent
a294d45fd6
commit
d18c82a9ef
4 changed files with 100 additions and 19 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue