michael@0: function isnan(n) { return n !== n } michael@0: michael@0: function f(x) { michael@0: var sum = 0; michael@0: for (var i = 0; i < 100; ++i) michael@0: sum += x.x; michael@0: return sum; michael@0: } michael@0: var o = {}; michael@0: assertEq(isnan(f(o)), true); michael@0: o.x = 1; michael@0: assertEq(f(o), 100); michael@0: var o = {a:1, b:2}; michael@0: assertEq(isnan(f(o)), true); michael@0: o.x = 2; michael@0: assertEq(f(o), 200); michael@0: michael@0: function g(x) { michael@0: var sum = 0; michael@0: for (var i = 0; i < 100; ++i) michael@0: sum += x.x; michael@0: return sum; michael@0: } michael@0: var o = {c:1, x:1}; michael@0: assertEq(g(o), 100); michael@0: var o = {}; michael@0: assertEq(isnan(g(o)), true); michael@0: michael@0: function h(x) { michael@0: var sum = 0; michael@0: for (var i = 0; i < 100; ++i) michael@0: sum += x.x; michael@0: return sum; michael@0: } michael@0: michael@0: var proto1 = {}; michael@0: var proto2 = Object.create(proto1); michael@0: var o = Object.create(proto2); michael@0: assertEq(isnan(f(o)), true); michael@0: assertEq(isnan(g(o)), true); michael@0: assertEq(isnan(h(o)), true); michael@0: proto2.x = 2; michael@0: assertEq(f(o), 200); michael@0: assertEq(g(o), 200); michael@0: assertEq(h(o), 200); michael@0: var o = {} michael@0: assertEq(isnan(f(o)), true); michael@0: assertEq(isnan(g(o)), true); michael@0: assertEq(isnan(h(o)), true);