blob: a685489a2d2a9d973dc6ba1cb928eae74b1bb82b [file] [log] [blame]
(function() {
// Iterate over an array with normal indexed properties.
var foo = function() {
var a = [1, 2, 3, 4, 5];
var sum = 0;
var result = "";
for (var p in a)
result += a[p];
return result;
};
noInline(foo);
for (var i = 0; i < 10000; ++i) {
if (foo() !== "12345")
throw new Error("bad result");
}
foo(null);
})();
(function() {
// Iterate over an object with normal non-indexed properties.
var foo = function() {
var o = {};
o.x = 1;
o.y = 2;
o.z = 3;
var result = "";
for (var p in o)
result += o[p];
return result;
};
noInline(foo);
for (var i = 0; i < 10000; ++i) {
if (foo() !== "123")
throw new Error("bad result");
}
foo(null);
})();
(function() {
// Iterate over an object with both indexed and non-indexed properties.
var foo = function() {
var o = {};
o.x = 1;
o.y = 2;
o.z = 3;
o[0] = 4;
o[1] = 5;
o[2] = 6;
var result = "";
for (var p in o)
result += o[p];
return result;
};
noInline(foo);
for (var i = 0; i < 10000; ++i) {
if (foo() != "456123")
throw new Error("bad result");
}
foo(null);
})();
(function() {
// Iterate over an array with both indexed and non-indexed properties.
var foo = function() {
var a = [4, 5, 6];
a.x = 1;
a.y = 2;
a.z = 3;
var result = "";
for (var p in a)
result += a[p];
return result;
};
noInline(foo);
for (var i = 0; i < 10000; ++i) {
if (foo() !== "456123")
throw new Error("bad result");
}
foo(null);
})();
(function() {
var foo = function(a, b) {
for (var p in b) {
var f1 = a[p];
var f2 = b[p];
if (f1 === f2)
continue;
a[p] = b[p];
}
};
noInline(foo);
for (var i = 0; i < 10000; ++i) {
var o1 = {};
var o2 = {};
o2.x = 42;
o2.y = 53;
foo(o1, o2);
if (o1.x !== o2.x)
throw new Error("bad result: " + o1.x + "!==" + o2.x);
if (o1.y !== o2.y)
throw new Error("bad result: " + o1.y + "!==" + o2.y);
}
})();
(function() {
var foo = function(a, b) {
for (var p = b in a) {}
return p;
};
noInline(foo);
for (var i = 0; i < 10000; ++i) {
var expected = 'expected-result';
var result = foo({}, expected);
if (expected !== result)
throw new Error("bad result: " + result + "!==" + expected);
}
for (var i = 0; i < 10000; ++i) {
var expected = 'a';
var result = foo({a:'abcd'}, expected);
if (expected !== result)
throw new Error("bad result: " + result + "!==" + expected);
}
for (var i = 0; i < 10000; ++i) {
var expected = 'b';
var result = foo({a:'abcd', b: 'bcde'}, expected);
if (expected !== result)
throw new Error("bad result: " + result + "!==" + expected);
}
for (var i = 0; i < 10000; ++i) {
var expected = 'c';
var o = {a:'abcd', b: 'bcde'};
o.c = 'cdef';
var result = foo(o, expected);
if (expected !== result)
throw new Error("bad result: " + result + "!==" + expected);
}
})();
(function() {
var boo = function () { return 'expected-result'; };
var foo = function(a) {
for (var p = boo() in a) {}
return p;
};
noInline(foo);
for (var i = 0; i < 10000; ++i) {
var expected = 'expected-result';
var result = foo({});
if (expected !== result)
throw new Error("bad result: " + result + "!==" + expected);
}
})();
(function() {
var foo = function(a, b, first) {
{
let p = 'some-value';
for (var p = b in a) {}
if (first)
return p;
}
return p;
};
noInline(foo);
for (var i = 0; i < 10000; ++i) {
var expected = 'expected-result';
var result = foo({}, expected, true);
if (expected !== result)
throw new Error("bad result: " + result + "!==" + expected);
}
for (var i = 0; i < 10000; ++i) {
var expected = 'expected-result';
var result = foo({}, expected, false);
if (typeof result !== 'undefined')
throw new Error("bad result: " + result + "!== undefined");
}
})();
(function() {
var foo = function(a, b, c) {
for (var p = b + c in a) {}
return p;
};
noInline(foo);
for (var i = 0; i < 10000; ++i) {
var expected = 'expected-result';
var result = foo({}, 'expected', '-result');
if (expected !== result)
throw new Error("bad result: " + result + "!==" + expected);
}
})();
(function() {
var error = false;
try {
eval("(function() { 'use strict'; for (var i = 0 in {}) {}})()");
} catch(e) {
error = e instanceof SyntaxError;
}
if (!error)
throw new Error("Expected SyntaxError error");
})();
(function() {
var error = false;
try {
eval("(function() { const i = 10; for (var i = 0 in {}) {}})()");
} catch(e) {
error = e instanceof SyntaxError;
}
if (!error)
throw new Error("Expected SyntaxError error");
})();