diff options
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/ccgstmts.nim | 6 | ||||
-rw-r--r-- | compiler/pragmas.nim | 18 |
2 files changed, 21 insertions, 3 deletions
diff --git a/compiler/ccgstmts.nim b/compiler/ccgstmts.nim index 10b5641c5..1838562d4 100644 --- a/compiler/ccgstmts.nim +++ b/compiler/ccgstmts.nim @@ -973,7 +973,11 @@ proc genAsmOrEmitStmt(p: BProc, t: PNode, isAsmStmt=false): Rope = r = mangleName(sym) sym.loc.r = r # but be consequent! res.add($r) - else: internalError(t.sons[i].info, "genAsmOrEmitStmt()") + else: + var a: TLoc + initLocExpr(p, t.sons[i], a) + res.add($a.rdLoc) + #internalError(t.sons[i].info, "genAsmOrEmitStmt()") if isAsmStmt and hasGnuAsm in CC[cCompiler].props: for x in splitLines(res): diff --git a/compiler/pragmas.nim b/compiler/pragmas.nim index ffb2aa812..f93d33353 100644 --- a/compiler/pragmas.nim +++ b/compiler/pragmas.nim @@ -460,8 +460,22 @@ proc semAsmOrEmit*(con: PContext, n: PNode, marker: char): PNode = result = newNode(nkAsmStmt, n.info) proc pragmaEmit(c: PContext, n: PNode) = - discard getStrLitNode(c, n) - n.sons[1] = semAsmOrEmit(c, n, '`') + if n.kind != nkExprColonExpr: + localError(n.info, errStringLiteralExpected) + else: + let n1 = n[1] + if n1.kind == nkBracket: + var b = newNodeI(nkBracket, n1.info, n1.len) + for i in 0..<n1.len: + b.sons[i] = c.semExpr(c, n1[i]) + n.sons[1] = b + else: + n.sons[1] = c.semConstExpr(c, n1) + case n.sons[1].kind + of nkStrLit, nkRStrLit, nkTripleStrLit: + n.sons[1] = semAsmOrEmit(c, n, '`') + else: + localError(n.info, errStringLiteralExpected) proc noVal(n: PNode) = if n.kind == nkExprColonExpr: invalidPragma(n) |