michael@0: function get_value_undefined(o) { michael@0: return o.value michael@0: } michael@0: michael@0: function get_value_null(o) { michael@0: return o.value michael@0: } michael@0: michael@0: function get_value_int(o) { michael@0: return o.value michael@0: } michael@0: michael@0: function get_value_effectfull(o) { michael@0: return o.value michael@0: } michael@0: michael@0: var count = 0 michael@0: var o_undefined = {value: undefined} michael@0: var o_null = {value: null} michael@0: var o_int = {value: 3} michael@0: var o_effectfull = {} michael@0: Object.defineProperty(o_effectfull, "value", { get: function () { count++; return undefined; } }); michael@0: michael@0: // compiled as undefined michael@0: for(var i=0; i<42; i++) michael@0: get_value_undefined(o_undefined) michael@0: michael@0: // compiled as null michael@0: for(var i=0; i<42; i++) michael@0: get_value_null(o_null) michael@0: michael@0: // compiled as int michael@0: for(var i=0; i<42; i++) michael@0: get_value_int(o_int) michael@0: michael@0: // compiled as effectfull property access michael@0: for(var i=0; i<42; i++) michael@0: get_value_effectfull(o_effectfull) michael@0: michael@0: // Note: michael@0: // because of bug 715111 when there is an invalidation we have bogus values on the stack. michael@0: // So we get wrong values. Therefor I run them twice. On as 'warmup'. Second time to test michael@0: michael@0: count = 0 michael@0: assertEq(get_value_undefined(o_undefined), undefined); michael@0: get_value_undefined(o_null) michael@0: assertEq(get_value_undefined(o_null), null); michael@0: get_value_undefined(o_int) michael@0: assertEq(get_value_undefined(o_int), 3); michael@0: get_value_undefined(o_effectfull) michael@0: assertEq(get_value_undefined(o_effectfull), undefined); michael@0: assertEq(get_value_undefined(o_undefined), undefined); michael@0: assertEq(count, 2); michael@0: michael@0: count = 0 michael@0: assertEq(get_value_null(o_null), null); michael@0: get_value_null(o_undefined) michael@0: assertEq(get_value_null(o_undefined), undefined); michael@0: get_value_null(o_int) michael@0: assertEq(get_value_null(o_int), 3); michael@0: get_value_null(o_effectfull) michael@0: assertEq(get_value_null(o_effectfull), undefined); michael@0: assertEq(get_value_null(o_null), null); michael@0: assertEq(count, 2); michael@0: michael@0: count = 0 michael@0: michael@0: assertEq(get_value_int(o_int), 3); michael@0: get_value_int(o_null) michael@0: assertEq(get_value_int(o_null), null); michael@0: get_value_int(o_undefined) michael@0: assertEq(get_value_int(o_undefined), undefined); michael@0: get_value_int(o_effectfull) michael@0: assertEq(get_value_int(o_effectfull), undefined); michael@0: assertEq(get_value_int(o_int), 3); michael@0: assertEq(count, 2); michael@0: michael@0: count = 0 michael@0: michael@0: assertEq(get_value_effectfull(o_effectfull), undefined); michael@0: get_value_effectfull(o_null) michael@0: assertEq(get_value_effectfull(o_null), null); michael@0: get_value_effectfull(o_undefined) michael@0: assertEq(get_value_effectfull(o_undefined), undefined); michael@0: get_value_effectfull(o_int) michael@0: assertEq(get_value_effectfull(o_int), 3); michael@0: assertEq(get_value_effectfull(o_effectfull), undefined); michael@0: assertEq(count, 2);