[asm] Fix double literals without dots
Double literals without dots should still be parsed as double constants, not unsigned constants. The static_cast would remove the fractional part, making constants like "1e-15" come out as "0" unsigned constants. The precise semantics is not spec'ed, so we still consider literals like "1e1" to be unsigned, and only switch to double if there is a fractional part. R=ecmziegler@chromium.org Bug: chromium:1065635 Change-Id: I0aac018058a149632e0849572d19fdcc7b2af7aa Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2126922 Reviewed-by: Emanuel Ziegler <ecmziegler@chromium.org> Commit-Queue: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/master@{#66949}
This commit is contained in:
parent
6ee457bf05
commit
7bb686a976
@ -329,7 +329,7 @@ void AsmJsScanner::ConsumeNumber(uc32 ch) {
|
||||
token_ = kParseError;
|
||||
return;
|
||||
}
|
||||
if (has_dot) {
|
||||
if (has_dot || trunc(double_value_) != double_value_) {
|
||||
token_ = kDouble;
|
||||
} else {
|
||||
// Exceeding safe integer range is an error.
|
||||
|
13
test/mjsunit/regress/wasm/regress-1065635.js
Normal file
13
test/mjsunit/regress/wasm/regress-1065635.js
Normal file
@ -0,0 +1,13 @@
|
||||
// Copyright 2020 the V8 project authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
function foo() {
|
||||
'use asm';
|
||||
function bar() {
|
||||
return -1e-15;
|
||||
}
|
||||
return {bar: bar};
|
||||
}
|
||||
|
||||
assertEquals(-1e-15, foo().bar());
|
Loading…
Reference in New Issue
Block a user