v8/test/mjsunit/compiler/string-length.js
bmeurer b19f118c16 [turbofan] Optimize string "length" property access based on types.
Optimize string "length" property access based on static type
information if possible, but also optimistically optimize the access
based on type feedback from the LoadIC.

R=jarin@chromium.org

Committed: https://crrev.com/17add22ff4b9c5ca638502e7708f0d9d99baca40
Cr-Commit-Position: refs/heads/master@{#29543}

Review URL: https://codereview.chromium.org/1216593003

Cr-Commit-Position: refs/heads/master@{#29588}
2015-07-13 06:02:22 +00:00

32 lines
841 B
JavaScript

// Copyright 2015 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
assertEquals(0, "".length);
assertEquals(1, "a".length);
assertEquals(2, ("a" + "b").length);
function id(x) { return x; }
function f1(x) {
return x.length;
}
assertEquals(0, f1(""));
assertEquals(1, f1("a"));
%OptimizeFunctionOnNextCall(f1);
assertEquals(2, f1("a" + "b"));
assertEquals(3, f1(id("a") + id("b" + id("c"))))
function f2(x, y, z) {
x = x ? "" + y : "" + z;
return x.length;
}
assertEquals(0, f2(true, "", "a"));
assertEquals(1, f2(false, "", "a"));
%OptimizeFunctionOnNextCall(f2);
assertEquals(0, f2(true, "", "a"));
assertEquals(1, f2(false, "", "a"));
assertEquals(3, f2(true, id("a") + id("b" + id("c")), ""));