Revert of [es6] Object.getPrototypeOf should work with values (patchset #3 id:40001...
authoryangguo <yangguo@chromium.org>
Tue, 24 Mar 2015 09:19:11 +0000 (02:19 -0700)
committerCommit bot <commit-bot@chromium.org>
Tue, 24 Mar 2015 09:19:26 +0000 (09:19 +0000)
Reason for revert:
Layout test failures. Please update layout test expectations before landing this, in order to not block the roll.

Original issue's description:
> [es6] Object.getPrototypeOf should work with values
>
> The final spec for Object.getPrototypeOf calls ToObject on the
> parameter, which means that it should only throw for null and
> undefined. For other non object values the prototype of the wrapper
> should be used.
>
> BUG=v8:3964
> LOG=N
> R=adamk, rossberg@chromium.org
>
> Committed: https://crrev.com/ea463a916bbe5994b0d2d04e8075058b373b2e2c
> Cr-Commit-Position: refs/heads/master@{#27354}

TBR=adamk@chromium.org,rossberg@chromium.org,arv@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=v8:3964

Review URL: https://codereview.chromium.org/1033623002

Cr-Commit-Position: refs/heads/master@{#27389}

src/v8natives.js
test/mjsunit/get-prototype-of.js
test/mjsunit/harmony/set-prototype-of.js
test/test262-es6/test262-es6.status
test/test262/test262.status
test/webkit/prototypes-expected.txt
test/webkit/prototypes.js

index 99fc64f88a61114e8f0f952c655bfa6ce1fb8a73..1ea3f412f815333e8d0d6e22d7d9eb4228ca5699 100644 (file)
@@ -976,9 +976,12 @@ function DefineOwnProperty(obj, p, desc, should_throw) {
 }
 
 
-// ES6 section 19.1.2.9
+// ES5 section 15.2.3.2.
 function ObjectGetPrototypeOf(obj) {
-  return %_GetPrototype(TO_OBJECT_INLINE(obj));
+  if (!IS_SPEC_OBJECT(obj)) {
+    throw MakeTypeError("called_on_non_object", ["Object.getPrototypeOf"]);
+  }
+  return %_GetPrototype(obj);
 }
 
 // ES6 section 19.1.2.19.
index 3c6c16af8ea4ecca3b68cfdc573b5508f57e6877..c2a492a3cf3a3872c94829a97b89bd09f0e9133f 100644 (file)
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-assertThrows(function() {
-  Object.getPrototypeOf(undefined);
-}, TypeError);
 
-assertThrows(function() {
-  Object.getPrototypeOf(null);
-}, TypeError);
+function TryGetPrototypeOfNonObject(x) {
+  var caught = 0;
+  try {
+      Object.getPrototypeOf(x);
+  } catch (e) {
+    caught = e;
+  }
 
+  assertTrue(caught instanceof TypeError);
+};
 
-function F(){};
-var y = new F();
-
-assertSame(Object.getPrototypeOf(y), F.prototype);
-assertSame(Object.getPrototypeOf(F), Function.prototype);
-
-assertSame(Object.getPrototypeOf({x: 5}), Object.prototype);
-assertSame(Object.getPrototypeOf({x: 5, __proto__: null}), null);
-
-assertSame(Object.getPrototypeOf([1, 2]), Array.prototype);
-
-
-assertSame(Object.getPrototypeOf(1), Number.prototype);
-assertSame(Object.getPrototypeOf(true), Boolean.prototype);
-assertSame(Object.getPrototypeOf(false), Boolean.prototype);
-assertSame(Object.getPrototypeOf('str'), String.prototype);
-assertSame(Object.getPrototypeOf(Symbol()), Symbol.prototype);
+function GetPrototypeOfObject(x) {
+  assertDoesNotThrow(Object.getPrototypeOf(x));
+  assertNotNull(Object.getPrototypeOf(x));
+  assertEquals(Object.getPrototypeOf(x), x.__proto__);
+}
 
+function F(){};
 
-// Builtin constructors.
-var functions = [
-  Array,
-  ArrayBuffer,
-  Boolean,
-  // DataView,
-  Date,
-  Error,
-  EvalError,
-  Float32Array,
-  Float64Array,
-  Function,
-  Int16Array,
-  Int32Array,
-  Int8Array,
-  Map,
-  Number,
-  Object,
-  // Promise,
-  RangeError,
-  ReferenceError,
-  RegExp,
-  Set,
-  String,
-  // Symbol, not constructible
-  SyntaxError,
-  TypeError,
-  URIError,
-  Uint16Array,
-  Uint32Array,
-  Uint8Array,
-  Uint8ClampedArray,
-  WeakMap,
-  WeakSet,
-];
+// Non object
+var x = 10;
 
-for (var f of functions) {
-  assertSame(Object.getPrototypeOf(f), Function.prototype);
-  assertSame(Object.getPrototypeOf(new f), f.prototype);
-}
+// Object
+var y = new F();
 
-var p = new Promise(function() {});
-assertSame(Object.getPrototypeOf(p), Promise.prototype);
+// Make sure that TypeError exceptions are thrown when non-objects are passed
+// as argument
+TryGetPrototypeOfNonObject(0);
+TryGetPrototypeOfNonObject(null);
+TryGetPrototypeOfNonObject('Testing');
+TryGetPrototypeOfNonObject(x);
 
-var dv = new DataView(new ArrayBuffer());
-assertSame(Object.getPrototypeOf(dv), DataView.prototype);
+// Make sure the real objects have this method and that it returns the
+// actual prototype object. Also test for Functions and RegExp.
+GetPrototypeOfObject(this);
+GetPrototypeOfObject(y);
+GetPrototypeOfObject({x:5});
+GetPrototypeOfObject(F);
+GetPrototypeOfObject(RegExp);
index e06215a0edfcca65a84b4524f017c9805e856d22..810220d1a8f217a773c3c31da10bea9ca3ef4d8e 100644 (file)
@@ -64,9 +64,15 @@ var valuesWithoutNull = coercibleValues.concat(undefined);
 function TestSetPrototypeOfCoercibleValues() {
   for (var i = 0; i < coercibleValues.length; i++) {
     var value = coercibleValues[i];
-    var proto = Object.getPrototypeOf(value);
+    assertThrows(function() {
+      Object.getPrototypeOf(value);
+    }, TypeError);
+
     assertEquals(Object.setPrototypeOf(value, {}), value);
-    assertSame(proto, Object.getPrototypeOf(value));
+
+    assertThrows(function() {
+      Object.getPrototypeOf(value);
+    }, TypeError);
   }
 }
 TestSetPrototypeOfCoercibleValues();
index 1197cd8e63650650e1057e89c2cf112a24d545db..c004242ce3e84c10f88a68f10bde53d9d64c7be1 100644 (file)
   'intl402/ch13/13.3/13.3.2_L15': [FAIL],
   'intl402/ch13/13.3/13.3.3_L15': [FAIL],
 
-  # Object.getPrototypeOf wraps primitive values in ES6.
-  'ch15/15.2/15.2.3/15.2.3.2/15.2.3.2-1-3': [FAIL],
-  'ch15/15.2/15.2.3/15.2.3.2/15.2.3.2-1-4': [FAIL],
-  'ch15/15.2/15.2.3/15.2.3.2/15.2.3.2-1': [FAIL],
-
   ############################ SKIPPED TESTS #############################
 
   # These tests take a looong time to run in debug mode.
index 54c7454adfa4b2c12b5e21104bc7bf5cb6eca2be..8e7496bc2511e32dc0e7b57c40a16bd512c7e5a5 100644 (file)
@@ -1,4 +1,3 @@
-
 # Copyright 2011 the V8 project authors. All rights reserved.
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are
   'S15.9.5.8_A3_T2': [FAIL],
   'S15.9.5.9_A3_T2': [FAIL],
 
-  # Object.getPrototypeOf wraps primitive values in ES6.
-  '15.2.3.2-1': [FAIL],
-  '15.2.3.2-1-3': [FAIL],
-  '15.2.3.2-1-4': [FAIL],
-
   ######################## NEEDS INVESTIGATION ###########################
 
   # These test failures are specific to the intl402 suite and need investigation
index 935cd6222bafd65ca2129bf0c899766ce9850a0d..c2c35b177c4b39442c11674fffec4aade581c77d 100644 (file)
@@ -43,8 +43,8 @@ PASS Array.__proto__ is Object.__proto__
 PASS Date.__proto__ is Object.__proto__
 PASS Number.__proto__ is Object.__proto__
 PASS String.__proto__ is Object.__proto__
-PASS Object.getPrototypeOf('') is String.prototype
-PASS Object.getPrototypeOf(0) is Number.prototype
+PASS Object.getPrototypeOf('') threw exception TypeError: Object.getPrototypeOf called on non-object.
+PASS Object.getPrototypeOf(0) threw exception TypeError: Object.getPrototypeOf called on non-object.
 PASS Object.getPrototypeOf([]) is Array.prototype
 PASS Object.getPrototypeOf({}) is Object.prototype
 PASS Object.getPrototypeOf(new Date) is Date.prototype
index 9e62c3a52ee4bef1ae52c6a445b4927f9dcf9d7f..26ae286df69b1d3ac7d1a7fd3a994f7f66140168 100644 (file)
@@ -43,8 +43,8 @@ shouldBe("Date.__proto__", "Object.__proto__");
 shouldBe("Number.__proto__", "Object.__proto__");
 shouldBe("String.__proto__", "Object.__proto__");
 
-shouldBe("Object.getPrototypeOf('')", "String.prototype");
-shouldBe("Object.getPrototypeOf(0)", "Number.prototype");
+shouldThrow("Object.getPrototypeOf('')");
+shouldThrow("Object.getPrototypeOf(0)");
 shouldBe("Object.getPrototypeOf([])", "Array.prototype");
 shouldBe("Object.getPrototypeOf({})", "Object.prototype");
 shouldBe("Object.getPrototypeOf(new Date)", "Date.prototype");