xmltree.<> macro works again

This commit is contained in:
Araq 2014-02-27 20:47:44 +01:00
commit f0a70c7aae
3 changed files with 12 additions and 10 deletions

View file

@ -17,11 +17,11 @@ proc execute*(program: string) =
passes.gIncludeFile = includeModule passes.gIncludeFile = includeModule
passes.gImportModule = importModule passes.gImportModule = importModule
initDefines() initDefines()
LoadConfigs(DefaultConfig) loadConfigs(DefaultConfig)
initDefines() initDefines()
DefineSymbol("nimrodvm") defineSymbol("nimrodvm")
when hasFFI: DefineSymbol("nimffi") when hasFFI: defineSymbol("nimffi")
registerPass(verbosePass) registerPass(verbosePass)
registerPass(semPass) registerPass(semPass)
registerPass(vmPass) registerPass(vmPass)
@ -30,4 +30,4 @@ proc execute*(program: string) =
compileSystemModule() compileSystemModule()
var m = makeStdinModule() var m = makeStdinModule()
incl(m.flags, sfMainModule) incl(m.flags, sfMainModule)
processModule(m, LLStreamOpen(program), nil) processModule(m, llStreamOpen(program), nil)

View file

@ -173,12 +173,14 @@ proc asgnComplex(x: var TFullReg, y: TFullReg) =
of rkRegisterAddr: x.regAddr = y.regAddr of rkRegisterAddr: x.regAddr = y.regAddr
of rkNodeAddr: x.nodeAddr = y.nodeAddr of rkNodeAddr: x.nodeAddr = y.nodeAddr
proc putIntoNode(n: PNode; x: TFullReg) = proc putIntoNode(n: var PNode; x: TFullReg) =
case x.kind case x.kind
of rkNone: discard of rkNone: discard
of rkInt: n.intVal = x.intVal of rkInt: n.intVal = x.intVal
of rkFloat: n.floatVal = x.floatVal of rkFloat: n.floatVal = x.floatVal
of rkNode: n[] = x.node[] of rkNode:
if nfIsRef in x.node.flags: n = x.node
else: n[] = x.node[]
of rkRegisterAddr: putIntoNode(n, x.regAddr[]) of rkRegisterAddr: putIntoNode(n, x.regAddr[])
of rkNodeAddr: n[] = x.nodeAddr[][] of rkNodeAddr: n[] = x.nodeAddr[][]

View file

@ -1001,7 +1001,7 @@ proc genAsgn(c: PCtx; le, ri: PNode; requiresCopy: bool) =
c.gABC(left, opcWrObj, dest, idx, tmp) c.gABC(left, opcWrObj, dest, idx, tmp)
c.freeTemp(tmp) c.freeTemp(tmp)
of nkDerefExpr, nkHiddenDeref: of nkDerefExpr, nkHiddenDeref:
let dest = c.genx(le, {gfAddrOf}) let dest = c.genx(le.sons[0], {gfAddrOf})
let tmp = c.genx(ri) let tmp = c.genx(ri)
c.gABC(le, opcWrDeref, dest, tmp) c.gABC(le, opcWrDeref, dest, tmp)
c.freeTemp(tmp) c.freeTemp(tmp)
@ -1542,9 +1542,9 @@ proc genProc(c: PCtx; s: PSym): int =
c.gABC(body, opcEof, eofInstr.regA) c.gABC(body, opcEof, eofInstr.regA)
c.optimizeJumps(result) c.optimizeJumps(result)
s.offset = c.prc.maxSlots s.offset = c.prc.maxSlots
#if s.name.s == "importImpl_forward" or s.name.s == "importImpl": #if s.name.s == "xmlConstructor":
#c.echoCode(result)
# echo renderTree(body) # echo renderTree(body)
# c.echoCode(result)
c.prc = oldPrc c.prc = oldPrc
else: else:
c.prc.maxSlots = s.offset c.prc.maxSlots = s.offset