aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/field-type-tracking.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/field-type-tracking.js')
-rw-r--r--deps/v8/test/mjsunit/field-type-tracking.js14
1 files changed, 12 insertions, 2 deletions
diff --git a/deps/v8/test/mjsunit/field-type-tracking.js b/deps/v8/test/mjsunit/field-type-tracking.js
index 6fc8558469..1ff336a6b3 100644
--- a/deps/v8/test/mjsunit/field-type-tracking.js
+++ b/deps/v8/test/mjsunit/field-type-tracking.js
@@ -9,13 +9,13 @@
var o = { text: "Hello World!" };
function A() {
// Assign twice to make the field non-constant.
- // TODO(ishell): update test once constant field tracking is done.
this.a = {text: 'foo'};
this.a = o;
}
function readA(x) {
return x.a;
}
+ %PrepareFunctionForOptimization(readA);
var a = new A();
assertUnoptimized(readA);
readA(a); readA(a); readA(a);
@@ -27,6 +27,7 @@
b.b = o;
assertEquals(readA(b), o);
assertUnoptimized(readA);
+ %PrepareFunctionForOptimization(readA);
%OptimizeFunctionOnNextCall(readA);
assertEquals(readA(a), o);
assertOptimized(readA);
@@ -38,6 +39,7 @@
return x.a;
}
assertUnoptimized(readAFromB);
+ %PrepareFunctionForOptimization(readAFromB);
readAFromB(b); readAFromB(b); readAFromB(b);
%OptimizeFunctionOnNextCall(readAFromB);
assertEquals(readAFromB(b), o);
@@ -50,6 +52,8 @@
c.a = [1];
assertUnoptimized(readA);
assertUnoptimized(readAFromB);
+ %PrepareFunctionForOptimization(readA);
+ %PrepareFunctionForOptimization(readAFromB);
assertEquals(readA(a), o);
assertEquals(readA(b), o);
assertEquals(readA(c), [1]);
@@ -78,7 +82,9 @@
A.prototype = {y: 20};
function B(o) { return o.a.y; }
function C() { this.a = new A(); }
+ %EnsureFeedbackVectorForFunction(C);
+ %PrepareFunctionForOptimization(B);
B(new C());
B(new C());
%OptimizeFunctionOnNextCall(B);
@@ -89,6 +95,7 @@
assertEquals(10, B(c));
assertUnoptimized(B);
+ %PrepareFunctionForOptimization(B);
var c = new C();
%OptimizeFunctionOnNextCall(B);
assertEquals(20, B(c));
@@ -111,13 +118,13 @@
(function() {
function Foo(x) { this.x = x; }
- // TODO(ishell): update test once constant field tracking is done.
var f0 = new Foo({x: 0});
f0.x = {x: 0}; // make Foo.x non-constant here.
var f1 = new Foo({x: 1});
var f2 = new Foo({x: 2});
var f3 = new Foo({x: 3});
function readX(f) { return f.x.x; }
+ %PrepareFunctionForOptimization(readX);
assertEquals(readX(f1), 1);
assertEquals(readX(f2), 2);
assertUnoptimized(readX);
@@ -125,6 +132,7 @@
assertEquals(readX(f3), 3);
assertOptimized(readX);
function writeX(f, x) { f.x = x; }
+ %PrepareFunctionForOptimization(writeX);
writeX(f1, {x: 11});
writeX(f2, {x: 22});
assertUnoptimized(writeX);
@@ -148,6 +156,7 @@
var f2 = new Narf(2);
var f3 = new Narf(3);
function baz(f, y) { f.y = y; }
+ %PrepareFunctionForOptimization(baz);
baz(f1, {b: 9});
baz(f2, {b: 9});
baz(f2, {b: 9});
@@ -163,6 +172,7 @@
function readA(o) { return o.x.a; }
var f = new Foo({a:1});
var b = new Bar({a:2});
+ %PrepareFunctionForOptimization(readA);
assertEquals(readA(f), 1);
assertEquals(readA(b), 2);
assertEquals(readA(f), 1);