| function assert(name, actual, expected) { |
| if (actual != expected) { |
| print("FAILED test " + name + ": expected " + expected + ", actual: " + actual); |
| throw "FAILED"; |
| } |
| } |
| |
| function checkResult(name, result, expectedK, expectedProp) { |
| assert(name, result[0], expectedK); |
| assert(name, result[1], expectedProp); |
| } |
| |
| // ForIn on Indexed properties. |
| |
| function testIndexedProperties(o) { |
| for (var k in o) { |
| { |
| function k() { } |
| } |
| return [ k, o[k] ]; |
| } |
| } |
| |
| var o = [42]; |
| for (var i = 0; i < 10000; ++i) { |
| var result = testIndexedProperties(o); |
| checkResult("testIndexedProperties", result, "function k() { }", undefined); |
| } |
| |
| function testIndexedProperties2(o) { |
| for (var k in o) { |
| { |
| k = "boo"; |
| function k() { } |
| } |
| return [ k, o[k] ]; |
| } |
| } |
| |
| var o = [42]; |
| for (var i = 0; i < 10000; ++i) { |
| var result = testIndexedProperties2(o); |
| checkResult("testIndexedProperties2", result, "boo", undefined); |
| } |
| |
| function testIndexedProperties3(o) { |
| for (var k in o) { |
| try { |
| } finally { |
| { |
| function k() { } |
| } |
| } |
| return [ k, o[k] ]; |
| } |
| } |
| |
| var o = [42]; |
| for (var i = 0; i < 10000; ++i) { |
| var result = testIndexedProperties3(o); |
| checkResult("testIndexedProperties3", result, "function k() { }", undefined); |
| } |
| |
| function testIndexedProperties4(o) { |
| for (var k in o) { |
| try { |
| } finally { |
| { |
| k = "boo"; |
| function k() { } |
| } |
| } |
| return [ k, o[k] ]; |
| } |
| } |
| |
| var o = [42]; |
| for (var i = 0; i < 10000; ++i) { |
| var result = testIndexedProperties4(o); |
| checkResult("testIndexedProperties4", result, "boo", undefined); |
| } |
| |
| // ForIn on Structure properties. |
| |
| function testStructureProperties(o) { |
| for (var k in o) { |
| { |
| function k() { } |
| } |
| return [ k, o[k] ]; |
| } |
| } |
| |
| var o = {a: 42}; |
| for (var i = 0; i < 10000; ++i) { |
| var result = testStructureProperties(o); |
| checkResult("testStructureProperties", result, "function k() { }", undefined); |
| } |
| |
| function testStructureProperties2(o) { |
| for (var k in o) { |
| { |
| k = 0x1234; |
| function k() { } |
| } |
| return [ k, o[k] ]; |
| } |
| } |
| |
| var o = {a: 42}; |
| for (var i = 0; i < 10000; ++i) { |
| var result = testStructureProperties2(o); |
| checkResult("testStructureProperties2", result, 0x1234, undefined); |
| } |
| |
| function testStructureProperties3(o) { |
| for (var k in o) { |
| try { |
| } finally { |
| { |
| function k() { } |
| } |
| } |
| return [ k, o[k] ]; |
| } |
| } |
| |
| var o = {a: 42}; |
| for (var i = 0; i < 10000; ++i) { |
| var result = testStructureProperties3(o); |
| checkResult("testStructureProperties3", result, "function k() { }", undefined); |
| } |
| |
| function testStructureProperties4(o) { |
| for (var k in o) { |
| try { |
| } finally { |
| { |
| k = 0x1234; |
| function k() { } |
| } |
| } |
| return [ k, o[k] ]; |
| } |
| } |
| |
| var o = {a: 42}; |
| for (var i = 0; i < 10000; ++i) { |
| var result = testStructureProperties4(o); |
| checkResult("testStructureProperties4", result, 0x1234, undefined); |
| } |