diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2017-05-01 09:30:56 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-05-01 09:30:56 +0200 |
commit | 56a5c249c95950e7c064f4d2b660de6fc1fb5674 (patch) | |
tree | 61d9339a65435011716383db18a920419fbd5af7 | |
parent | 3d34a9f6d34809a481024a687ed5f4d712a9b961 (diff) | |
download | Nim-56a5c249c95950e7c064f4d2b660de6fc1fb5674.tar.gz |
JS codegen: produce better code for constant sets
-rw-r--r-- | compiler/jsgen.nim | 10 | ||||
-rw-r--r-- | lib/system/jssys.nim | 2 |
2 files changed, 9 insertions, 3 deletions
diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim index ad988d1b0..eb3fb9f47 100644 --- a/compiler/jsgen.nim +++ b/compiler/jsgen.nim @@ -1864,8 +1864,8 @@ proc genMagic(p: PProc, n: PNode, r: var TCompRes) = proc genSetConstr(p: PProc, n: PNode, r: var TCompRes) = var a, b: TCompRes - useMagic(p, "SetConstr") - r.res = rope("SetConstr(") + useMagic(p, "setConstr") + r.res = rope("setConstr(") r.kind = resExpr for i in countup(0, sonsLen(n) - 1): if i > 0: add(r.res, ", ") @@ -1878,6 +1878,12 @@ proc genSetConstr(p: PProc, n: PNode, r: var TCompRes) = gen(p, it, a) add(r.res, a.res) add(r.res, ")") + # emit better code for constant sets: + if p.target == targetJS and isDeepConstExpr(n): + inc(p.g.unique) + let tmp = rope("ConstSet") & rope(p.g.unique) + addf(p.g.constants, "var $1 = $2;$n", [tmp, r.res]) + r.res = tmp proc genArrayConstr(p: PProc, n: PNode, r: var TCompRes) = var a: TCompRes diff --git a/lib/system/jssys.nim b/lib/system/jssys.nim index 9ef4a02f2..8a81a550a 100644 --- a/lib/system/jssys.nim +++ b/lib/system/jssys.nim @@ -172,7 +172,7 @@ proc raiseIndexError() {.compilerproc, noreturn.} = proc raiseFieldError(f: string) {.compilerproc, noreturn.} = raise newException(FieldError, f & " is not accessible") -proc SetConstr() {.varargs, asmNoStackFrame, compilerproc.} = +proc setConstr() {.varargs, asmNoStackFrame, compilerproc.} = when defined(nimphp): asm """ $args = func_get_args(); |