d175cefaa8
This fixes the signatures of "Math.ceil", "Math.floor" and "Math.sqrt" from "(float?) -> float" to "(float?) -> floatish" which avoids using a resulting float value without coercing the value via explicit "fround" annotations. This ensures proper ECMAScript semantics are maintained. R=clemensh@chromium.org TEST=mjsunit/regress/regress-6838-2 BUG=v8:6838 Change-Id: Ib5821641265bc862184adb270e8dbf8c703fdfb0 Reviewed-on: https://chromium-review.googlesource.com/681694 Reviewed-by: Clemens Hammacher <clemensh@chromium.org> Commit-Queue: Michael Starzinger <mstarzinger@chromium.org> Cr-Commit-Position: refs/heads/master@{#48142}
102 lines
2.3 KiB
JavaScript
102 lines
2.3 KiB
JavaScript
// Copyright 2017 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.
|
|
|
|
// Flags: --allow-natives-syntax
|
|
|
|
(function TestMathCeilReturningFloatish() {
|
|
function Module(stdlib) {
|
|
"use asm";
|
|
var ceil = stdlib.Math.ceil;
|
|
var fround = stdlib.Math.fround;
|
|
function f(a) {
|
|
a = fround(a);
|
|
return ceil(a);
|
|
}
|
|
return f;
|
|
}
|
|
var f = Module(this);
|
|
assertEquals(3, f(2.2));
|
|
assertFalse(%IsAsmWasmCode(Module));
|
|
})();
|
|
|
|
(function TestMathFloorReturningFloatish() {
|
|
function Module(stdlib) {
|
|
"use asm";
|
|
var floor = stdlib.Math.floor;
|
|
var fround = stdlib.Math.fround;
|
|
function f(a) {
|
|
a = fround(a);
|
|
return floor(a);
|
|
}
|
|
return f;
|
|
}
|
|
var f = Module(this);
|
|
assertEquals(2, f(2.2));
|
|
assertFalse(%IsAsmWasmCode(Module));
|
|
})();
|
|
|
|
(function TestMathSqrtReturningFloatish() {
|
|
function Module(stdlib) {
|
|
"use asm";
|
|
var sqrt = stdlib.Math.sqrt;
|
|
var fround = stdlib.Math.fround;
|
|
function f(a) {
|
|
a = fround(a);
|
|
return sqrt(a);
|
|
}
|
|
return f;
|
|
}
|
|
var f = Module(this);
|
|
assertEquals(Math.sqrt(Math.fround(2.2)), f(2.2));
|
|
assertFalse(%IsAsmWasmCode(Module));
|
|
})();
|
|
|
|
(function TestMathAbsReturningFloatish() {
|
|
function Module(stdlib) {
|
|
"use asm";
|
|
var abs = stdlib.Math.abs;
|
|
var fround = stdlib.Math.fround;
|
|
function f(a) {
|
|
a = fround(a);
|
|
return abs(a);
|
|
}
|
|
return f;
|
|
}
|
|
var f = Module(this);
|
|
assertEquals(Math.fround(2.2), f(-2.2));
|
|
assertFalse(%IsAsmWasmCode(Module));
|
|
})();
|
|
|
|
(function TestMathMinReturningFloat() {
|
|
function Module(stdlib) {
|
|
"use asm";
|
|
var min = stdlib.Math.min;
|
|
var fround = stdlib.Math.fround;
|
|
function f(a) {
|
|
a = fround(a);
|
|
return min(a, a);
|
|
}
|
|
return f;
|
|
}
|
|
var f = Module(this);
|
|
assertEquals(Math.fround(2.2), f(2.2));
|
|
assertTrue(%IsAsmWasmCode(Module));
|
|
})();
|
|
|
|
(function TestMathMaxReturningFloat() {
|
|
function Module(stdlib) {
|
|
"use asm";
|
|
var max = stdlib.Math.max;
|
|
var fround = stdlib.Math.fround;
|
|
function f(a) {
|
|
a = fround(a);
|
|
return max(a, a);
|
|
}
|
|
return f;
|
|
}
|
|
var f = Module(this);
|
|
assertEquals(Math.fround(2.2), f(2.2));
|
|
assertTrue(%IsAsmWasmCode(Module));
|
|
})();
|