[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:
Clemens Backes 2020-03-30 18:34:41 +02:00 committed by Commit Bot
parent 6ee457bf05
commit 7bb686a976
2 changed files with 14 additions and 1 deletions

View File

@ -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.

View 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());