From 5d2a712b0eb9caefac0a008c7b9551ddeeab9e0f Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Sat, 13 Apr 2024 22:30:57 +0800 Subject: [PATCH] [JS backend] improve `discard` statement; ridding of the awkward special variable `_` (#23498) According to https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/Expression_statement, some expression statements need parentheses to make it unambiguous. `_` introduced in the https://github.com/nim-lang/Nim/pull/15789 is unnecessary. We can get rid of it by adding parentheses so that object literals are not ambiguous with block statements. --- compiler/jsgen.nim | 2 +- tests/js/tjsffi.nim | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim index 1d4f5519a0..15c5cd0302 100644 --- a/compiler/jsgen.nim +++ b/compiler/jsgen.nim @@ -2985,7 +2985,7 @@ proc gen(p: PProc, n: PNode, r: var TCompRes) = if n[0].kind != nkEmpty: genLineDir(p, n) gen(p, n[0], r) - r.res = "var _ = " & r.res + r.res = "(" & r.res & ")" of nkAsmStmt: warningDeprecated(p.config, n.info, "'asm' for the JS target is deprecated, use the 'emit' pragma") genAsmOrEmitStmt(p, n, true) diff --git a/tests/js/tjsffi.nim b/tests/js/tjsffi.nim index 94323c074f..265ae52e90 100644 --- a/tests/js/tjsffi.nim +++ b/tests/js/tjsffi.nim @@ -269,5 +269,5 @@ block: # test ** block: # issue #21208 type MyEnum = enum baz var obj: JsObject - {.emit: "`obj` = {bar: {baz: 123}}".} + {.emit: "`obj` = {bar: {baz: 123}};".} discard obj.bar.baz