-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix printing negative zero in JS backend #16505
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unfortunately, the VM bug is not easy to solve Uncomment the codes cause the memory of proc main()=
# block:
# let x = -0.0
# doAssert $x == "-0.0"
block:
let y = 0.0
doAssert $y == "0.0"
static: main() What's your opinion? @timotheecour |
asm """ | ||
function nimOnlyDigitsOrMinus(n) { | ||
return n.toString().match(/^-?\d+$/); | ||
} | ||
if (Number.isSafeInteger(`a`)) `result` = `a`+".0" | ||
if (Number.isSafeInteger(`a`)) | ||
`result` = `a` === 0 && 1 / `a` < 0 ? "-0.0" : `a`+".0" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@xflywind I just found out about Object.is
, we should use it instead, it seems super useful here as well as in your copySign
PR
if(Object.is(`a`, -0)) `result` = "-0.0"
else if(Number.isSafeInteger(`a`)) `result` = `a`+".0"
else { ...
ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
we can add the polyfill provided there for IE, if needed
(it may have other uses too, see examples: Object.is([], []); // false
) which are hard to do without Object.is
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is Object.is
better than a
=== 0 && 1 / a
< 0?
we can add the polyfill provided there for IE, if needed
It emits more codes if we need to support IE.
I will think of it and look at whether scala.js uses Object.is
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should be more efficient; the more code emitted doesn't matter for platforms other than IE as it won't be used
are you using an old nim? I've already fixed this in #16470; it works fine in latest nim devel 95f599c This test needs to be updated:
since it works |
* fix printing negative zero in JS backend * move tests
* fix printing negative zero in JS backend * move tests
see timotheecour#136
before this doesn't work in JS backend(echo $a prints
0.0
instead of-0.0
).0.0
as-0.0
, I will fix it in the following PR.