diff options
author | LemonBoy <LemonBoy@users.noreply.github.com> | 2018-09-07 01:54:59 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-09-07 01:54:59 +0200 |
commit | af1e84f54da32b5e8e917edc533c6efa6846acc2 (patch) | |
tree | 7f5a361e855356ae0a4900a1e17b78956436c648 /compiler | |
parent | c033ff990acceac6d2095242fa17501e98555973 (diff) | |
download | Nim-af1e84f54da32b5e8e917edc533c6efa6846acc2.tar.gz |
Automatic deref for everything but pointers in asm/emit (#8891)
Fixes #7249
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/jsgen.nim | 15 |
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 |