diff options
-rw-r--r-- | compiler/jsgen.nim | 8 | ||||
-rw-r--r-- | tests/int/tints.nim | 8 |
2 files changed, 15 insertions, 1 deletions
diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim index 471d51c0f..ffc11789f 100644 --- a/compiler/jsgen.nim +++ b/compiler/jsgen.nim @@ -788,7 +788,13 @@ proc arithAux(p: PProc, n: PNode, r: var TCompRes, op: TMagic) = of mEqProc: applyFormat("($1 == $2)", "($1 == $2)") of mUnaryMinusI: applyFormat("negInt($1)", "-($1)") of mUnaryMinusI64: applyFormat("negInt64($1)", "-($1)") - of mAbsI: applyFormat("absInt($1)", "Math.abs($1)") + of mAbsI: + let typ = n[1].typ.skipTypes(abstractVarRange) + if typ.kind == tyInt64 and optJsBigInt64 in p.config.globalOptions: + useMagic(p, "absInt64") + applyFormat("absInt64($1)", "absInt64($1)") + else: + applyFormat("absInt($1)", "Math.abs($1)") of mNot: applyFormat("!($1)", "!($1)") of mUnaryPlusI: applyFormat("+($1)", "+($1)") of mBitnotI: diff --git a/tests/int/tints.nim b/tests/int/tints.nim index a7d27d736..5c071c21d 100644 --- a/tests/int/tints.nim +++ b/tests/int/tints.nim @@ -1,5 +1,6 @@ discard """ matrix: "; --backend:js --jsbigint64:off; --backend:js --jsbigint64:on" + targets: "c js" output: ''' 0 0 0 0 @@ -7,6 +8,8 @@ Success''' """ # Test the different integer operations +# TODO: fixme --backend:js cannot change targets!!! + import std/private/jsutils var testNumber = 0 @@ -141,4 +144,9 @@ block: # shl when not defined(js) or (defined(js) and compileOption("jsbigint64")): doAssert u64 shl 1 == u64 - 1 +block: # bug #23378 + var neg = -1 # prevent compile-time evaluation + let n = abs BiggestInt neg + doAssert n == 1 + echo("Success") #OUT Success |