[es6] Map/Set size getter should have "get size" name
authorarv <arv@chromium.org>
Thu, 23 Apr 2015 21:56:33 +0000 (14:56 -0700)
committerCommit bot <commit-bot@chromium.org>
Thu, 23 Apr 2015 21:56:10 +0000 (21:56 +0000)
Getter and setter function names in ES6 are defined as "get foo" and
"set foo".

BUG=None
LOG=N
R=adamk@chromium.org

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

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

src/runtime/runtime-function.cc
src/v8natives.js
test/mjsunit/es6/built-in-accessor-names.js [new file with mode: 0644]
test/mjsunit/es6/collections.js

index c211e18..98d4208 100644 (file)
@@ -82,7 +82,7 @@ static Handle<String> NameToFunctionName(Handle<Name> name) {
     stringName = Handle<String>::cast(name);
   }
 
-  return stringName;
+  return String::Flatten(stringName);
 }
 
 
index 41453d0..33f0c8b 100644 (file)
@@ -46,7 +46,8 @@ function InstallGetter(object, name, getter, attributes) {
   if (typeof attributes == "undefined") {
     attributes = DONT_ENUM;
   }
-  %FunctionSetName(getter, name);
+  %FunctionSetName(getter, "get " +
+      (IS_SYMBOL(name) ? "[" + %SymbolDescription(name) + "]" : name));
   %FunctionRemovePrototype(getter);
   %DefineAccessorPropertyUnchecked(object, name, getter, null, attributes);
   %SetNativeFlag(getter);
@@ -55,8 +56,10 @@ function InstallGetter(object, name, getter, attributes) {
 
 // Helper function to install a getter/setter accessor property.
 function InstallGetterSetter(object, name, getter, setter) {
-  %FunctionSetName(getter, name);
-  %FunctionSetName(setter, name);
+  var functionName =
+      IS_SYMBOL(name) ? "[" + %SymbolDescription(name) + "]" : name;
+  %FunctionSetName(getter, "get " + functionName);
+  %FunctionSetName(setter, "set " + functionName);
   %FunctionRemovePrototype(getter);
   %FunctionRemovePrototype(setter);
   %DefineAccessorPropertyUnchecked(object, name, getter, setter, DONT_ENUM);
diff --git a/test/mjsunit/es6/built-in-accessor-names.js b/test/mjsunit/es6/built-in-accessor-names.js
new file mode 100644 (file)
index 0000000..79de239
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2015 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+'use strict';
+
+function assertGetterName(expected, object, name) {
+  var descr = Object.getOwnPropertyDescriptor(object, name);
+  assertSame(expected, descr.get.name);
+}
+
+
+function assertSetterName(expected, object, name) {
+  var descr = Object.getOwnPropertyDescriptor(object, name);
+  assertSame(expected, descr.set.name);
+}
+
+
+assertGetterName('get byteLength', ArrayBuffer.prototype, 'byteLength');
+assertGetterName('get size', Set.prototype, 'size');
+assertGetterName('get size', Map.prototype, 'size');
+
+
+let typedArrays = [
+  Uint8Array,
+  Int8Array,
+  Uint16Array,
+  Int16Array,
+  Uint32Array,
+  Int32Array,
+  Float32Array,
+  Float64Array,
+  Uint8ClampedArray
+];
+
+for (let f of typedArrays) {
+  assertGetterName('get buffer', f.prototype, 'buffer');
+  assertGetterName('get byteOffset', f.prototype, 'byteOffset');
+  assertGetterName('get byteLength', f.prototype, 'byteLength');
+  assertGetterName('get length', f.prototype, 'length');
+  assertGetterName('get [Symbol.toStringTag]', f.prototype, Symbol.toStringTag);
+}
+
+
+assertGetterName('get buffer', DataView.prototype, 'buffer');
+assertGetterName('get byteOffset', DataView.prototype, 'byteOffset');
+assertGetterName('get byteLength', DataView.prototype, 'byteLength');
+
+
+assertGetterName('get __proto__', Object.prototype, '__proto__');
+assertSetterName('set __proto__', Object.prototype, '__proto__');
index e1e7758..e410e22 100644 (file)
@@ -443,6 +443,7 @@ assertTrue(setSizeDescriptor.get instanceof Function);
 assertEquals(undefined, setSizeDescriptor.get.prototype);
 assertFalse(setSizeDescriptor.enumerable);
 assertTrue(setSizeDescriptor.configurable);
+assertEquals('get size', setSizeDescriptor.get.name);
 
 var s = new Set();
 assertFalse(s.hasOwnProperty('size'));
@@ -463,6 +464,7 @@ assertTrue(mapSizeDescriptor.get instanceof Function);
 assertEquals(undefined, mapSizeDescriptor.get.prototype);
 assertFalse(mapSizeDescriptor.enumerable);
 assertTrue(mapSizeDescriptor.configurable);
+assertEquals('get size', mapSizeDescriptor.get.name);
 
 var m = new Map();
 assertFalse(m.hasOwnProperty('size'));