diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2009-05-20 10:44:24 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2009-05-20 10:44:24 +0200 |
commit | ce88dc3e67436939b03f97e624c11ca6058fedce (patch) | |
tree | 7619ef68227aef88d8a4e6d8792486d27531825e /nim/ccgstmts.pas | |
parent | 44a874e3a43f88c6798c9eef3dad0bb4ad9ab97e (diff) | |
download | Nim-ce88dc3e67436939b03f97e624c11ca6058fedce.tar.gz |
some fixes for DMC
Diffstat (limited to 'nim/ccgstmts.pas')
-rw-r--r-- | nim/ccgstmts.pas | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/nim/ccgstmts.pas b/nim/ccgstmts.pas index f3fcdf518..6cff9dc8d 100644 --- a/nim/ccgstmts.pas +++ b/nim/ccgstmts.pas @@ -277,6 +277,7 @@ var i: int; sym: PSym; r, s: PRope; + a: TLoc; begin genLineDir(p, t); assert(t.kind = nkAsmStmt); @@ -286,13 +287,19 @@ begin nkStrLit..nkTripleStrLit: app(s, t.sons[i].strVal); nkSym: begin sym := t.sons[i].sym; - r := sym.loc.r; - if r = nil then begin // if no name has already been given, - // it doesn't matter much: - r := mangleName(sym); - sym.loc.r := r; // but be consequent! - end; - app(s, r) + if sym.kind = skProc then begin + initLocExpr(p, t.sons[i], a); + app(s, rdLoc(a)); + end + else begin + r := sym.loc.r; + if r = nil then begin // if no name has already been given, + // it doesn't matter much: + r := mangleName(sym); + sym.loc.r := r; // but be consequent! + end; + app(s, r) + end end else InternalError(t.sons[i].info, 'genAsmStmt()') |