diff options
author | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-03-19 09:25:14 +0100 |
---|---|---|
committer | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-03-19 09:56:31 +0100 |
commit | 6313e1fe4c27755adde87e62db1c2f9fac534ae4 (patch) | |
tree | c57bb29f65e02fbfcc07895a8cc2903fff9300ba /src/3rdparty/v8/test/mjsunit/object-define-property.js | |
parent | b5a49a260d03249c386f1b63c249089383dd81fa (diff) | |
parent | cac65e7a222b848a735a974b0aeb43209b0cfa18 (diff) | |
download | qtjsbackend-6313e1fe4c27755adde87e62db1c2f9fac534ae4.tar.gz |
Merge branch 'dev' into stable
This starts Qt 5.1 release cycle
Change-Id: I892bbc73c276842894a720f761ce31ad1b015672
Diffstat (limited to 'src/3rdparty/v8/test/mjsunit/object-define-property.js')
-rw-r--r-- | src/3rdparty/v8/test/mjsunit/object-define-property.js | 109 |
1 files changed, 107 insertions, 2 deletions
diff --git a/src/3rdparty/v8/test/mjsunit/object-define-property.js b/src/3rdparty/v8/test/mjsunit/object-define-property.js index fdaf82d..970a803 100644 --- a/src/3rdparty/v8/test/mjsunit/object-define-property.js +++ b/src/3rdparty/v8/test/mjsunit/object-define-property.js @@ -27,7 +27,7 @@ // Tests the object.defineProperty method - ES 15.2.3.6 -// Flags: --allow-natives-syntax +// Flags: --allow-natives-syntax --es5-readonly // Check that an exception is thrown when null is passed as object. var exception = false; @@ -1057,6 +1057,8 @@ assertEquals(999, o[999]); // Regression test: Bizzare behavior on non-strict arguments object. +// TODO(yangguo): Tests disabled, needs investigation! +/* (function test(arg0) { // Here arguments[0] is a fast alias on arg0. Object.defineProperty(arguments, "0", { @@ -1075,7 +1077,7 @@ assertEquals(999, o[999]); assertEquals(2, arg0); assertEquals(3, arguments[0]); })(0); - +*/ // Regression test: We should never observe the hole value. var objectWithGetter = {}; @@ -1085,3 +1087,106 @@ assertEquals(undefined, objectWithGetter.__lookupSetter__('foo')); var objectWithSetter = {}; objectWithSetter.__defineSetter__('foo', function(x) {}); assertEquals(undefined, objectWithSetter.__lookupGetter__('foo')); + +// An object with a getter on the prototype chain. +function getter() { return 111; } +function anotherGetter() { return 222; } + +function testGetterOnProto(expected, o) { + assertEquals(expected, o.quebec); +} + +obj1 = {}; +Object.defineProperty(obj1, "quebec", { get: getter, configurable: true }); +obj2 = Object.create(obj1); +obj3 = Object.create(obj2); + +testGetterOnProto(111, obj3); +testGetterOnProto(111, obj3); +%OptimizeFunctionOnNextCall(testGetterOnProto); +testGetterOnProto(111, obj3); +testGetterOnProto(111, obj3); + +Object.defineProperty(obj1, "quebec", { get: anotherGetter }); + +testGetterOnProto(222, obj3); +testGetterOnProto(222, obj3); +%OptimizeFunctionOnNextCall(testGetterOnProto); +testGetterOnProto(222, obj3); +testGetterOnProto(222, obj3); + +// An object with a setter on the prototype chain. +var modifyMe; +function setter(x) { modifyMe = x+1; } +function anotherSetter(x) { modifyMe = x+2; } + +function testSetterOnProto(expected, o) { + modifyMe = 333; + o.romeo = 444; + assertEquals(expected, modifyMe); +} + +obj1 = {}; +Object.defineProperty(obj1, "romeo", { set: setter, configurable: true }); +obj2 = Object.create(obj1); +obj3 = Object.create(obj2); + +testSetterOnProto(445, obj3); +testSetterOnProto(445, obj3); +%OptimizeFunctionOnNextCall(testSetterOnProto); +testSetterOnProto(445, obj3); +testSetterOnProto(445, obj3); + +Object.defineProperty(obj1, "romeo", { set: anotherSetter }); + +testSetterOnProto(446, obj3); +testSetterOnProto(446, obj3); +%OptimizeFunctionOnNextCall(testSetterOnProto); +testSetterOnProto(446, obj3); +testSetterOnProto(446, obj3); + +// Removing a setter on the prototype chain. +function testSetterOnProtoStrict(o) { + "use strict"; + o.sierra = 12345; +} + +obj1 = {}; +Object.defineProperty(obj1, "sierra", + { get: getter, set: setter, configurable: true }); +obj2 = Object.create(obj1); +obj3 = Object.create(obj2); + +testSetterOnProtoStrict(obj3); +testSetterOnProtoStrict(obj3); +%OptimizeFunctionOnNextCall(testSetterOnProtoStrict); +testSetterOnProtoStrict(obj3); +testSetterOnProtoStrict(obj3); + +Object.defineProperty(obj1, "sierra", + { get: getter, set: undefined, configurable: true }); + +exception = false; +try { + testSetterOnProtoStrict(obj3); +} catch (e) { + exception = true; + assertTrue(/which has only a getter/.test(e)); +} +assertTrue(exception); + +// Test assignment to a getter-only property on the prototype chain. This makes +// sure that crankshaft re-checks its assumptions and doesn't rely only on type +// feedback (which would be monomorphic here). + +function Assign(o) { + o.blubb = 123; +} + +function C() {} + +Assign(new C); +Assign(new C); +%OptimizeFunctionOnNextCall(Assign); +Object.defineProperty(C.prototype, "blubb", {get: function() { return -42; }}); +Assign(new C); |