63345e68f8
The CheckSmi in String.fromCodePoint() is unnecessary and even leads to unnecessary deoptimizations, since the CheckBounds already does the right thing, plus it also handles HeapNumbers (in Signed32 range) and properly identifies zeros. Bug: v8:8238 Change-Id: I73bf7a70c3cd718c987f112ceb928188c0534cd5 Reviewed-on: https://chromium-review.googlesource.com/c/1262675 Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#56395}
33 lines
989 B
JavaScript
33 lines
989 B
JavaScript
// Copyright 2018 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 --opt --noalways-opt
|
|
|
|
// Test that String.fromCodePoint() properly identifies zeros.
|
|
(function() {
|
|
function foo(x) {
|
|
return String.fromCodePoint(x);
|
|
}
|
|
|
|
assertEquals("\u0000", foo(0));
|
|
assertEquals("\u0000", foo(-0));
|
|
%OptimizeFunctionOnNextCall(foo);
|
|
assertEquals("\u0000", foo(0));
|
|
assertEquals("\u0000", foo(-0));
|
|
assertOptimized(foo);
|
|
|
|
// Now passing anything outside the valid code point
|
|
// range should invalidate the optimized code.
|
|
assertThrows(_ => foo(-1));
|
|
assertUnoptimized(foo);
|
|
|
|
// And TurboFan should not inline the builtin anymore
|
|
// from now on (aka no deoptimization loop).
|
|
%OptimizeFunctionOnNextCall(foo);
|
|
assertEquals("\u0000", foo(0));
|
|
assertEquals("\u0000", foo(-0));
|
|
assertThrows(_ => foo(-1));
|
|
assertOptimized(foo);
|
|
})();
|