summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorLemonBoy <LemonBoy@users.noreply.github.com>2018-09-07 01:54:59 +0200
committerAndreas Rumpf <rumpf_a@web.de>2018-09-07 01:54:59 +0200
commitaf1e84f54da32b5e8e917edc533c6efa6846acc2 (patch)
tree7f5a361e855356ae0a4900a1e17b78956436c648 /compiler
parentc033ff990acceac6d2095242fa17501e98555973 (diff)
downloadNim-af1e84f54da32b5e8e917edc533c6efa6846acc2.tar.gz
Automatic deref for everything but pointers in asm/emit (#8891)
Fixes #7249
Diffstat (limited to 'compiler')
-rw-r--r--compiler/jsgen.nim15
1 files changed, 13 insertions, 2 deletions
diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim
index 1b00ddbfa..da35002b7 100644
--- a/compiler/jsgen.nim
+++ b/compiler/jsgen.nim
@@ -764,11 +764,22 @@ proc genAsmOrEmitStmt(p: PProc, n: PNode) =
     of nkSym:
       let v = it.sym
       # for backwards compatibility we don't deref syms here :-(
-      if v.kind in {skVar, skLet, skTemp, skConst, skResult, skParam, skForVar}:
-        p.body.add mangleName(p.module, v)
+      if false:
+        discard
       else:
         var r: TCompRes
         gen(p, it, r)
+
+        if it.typ.kind == tyPointer:
+          # A fat pointer is disguised as an array
+          r.res = r.address
+          r.address = nil
+        elif r.typ == etyBaseIndex:
+          # Deference first
+          r.res = "$1[$2]" % [r.address, r.res]
+          r.address = nil
+          r.typ = etyNone
+
         p.body.add(r.rdLoc)
     else:
       var r: TCompRes