Reviewers: rossberg,

Message:
WDYT? Given that the previously-specified "private" symbols were junked due to leaking their keys to proxies, it seems OK to re-appropriate the name "private"
internally to mean private-own symbols.

Description:
All private symbols are own symbols

[email protected]
LOG=N
BUG=

Please review this at https://codereview.chromium.org/1182303004/

Base URL: https://chromium.googlesource.com/v8/v8@master

Affected files (+34, -60 lines):
  M src/factory.h
  M src/factory.cc
  M src/heap/heap.cc
  M src/isolate.cc
  M src/lookup.h
  M src/macros.py
  M src/objects.h
  M src/objects-inl.h
  M src/objects-printer.cc
  M src/runtime/runtime.h
  M src/runtime/runtime-symbol.cc
  M test/mjsunit/harmony/private.js
  M test/mjsunit/own-symbols.js


Index: src/factory.cc
diff --git a/src/factory.cc b/src/factory.cc
index b1619d447691ce6ec000b7c16d8b1783f4def6f3..3827fee5a5b62bb1a342b57ac408fa870f97f416 100644
--- a/src/factory.cc
+++ b/src/factory.cc
@@ -676,17 +676,9 @@ Handle<Symbol> Factory::NewSymbol() {
 }


-Handle<Symbol> Factory::NewPrivateSymbol() {
+Handle<Symbol> Factory::NewPrivateSymbol(Handle<Object> name) {
   Handle<Symbol> symbol = NewSymbol();
   symbol->set_is_private(true);
-  return symbol;
-}
-
-
-Handle<Symbol> Factory::NewPrivateOwnSymbol(Handle<Object> name) {
-  Handle<Symbol> symbol = NewSymbol();
-  symbol->set_is_private(true);
-  symbol->set_is_own(true);
   if (name->IsString()) {
     symbol->set_name(*name);
   } else {
Index: src/factory.h
diff --git a/src/factory.h b/src/factory.h
index cd00487c7a397418bf1aa4b42f175a33247b559d..2de768bf138e328518ab5108c6086eff74556650 100644
--- a/src/factory.h
+++ b/src/factory.h
@@ -225,8 +225,7 @@ class Factory final {

   // Create a symbol.
   Handle<Symbol> NewSymbol();
-  Handle<Symbol> NewPrivateSymbol();
-  Handle<Symbol> NewPrivateOwnSymbol(Handle<Object> name);
+  Handle<Symbol> NewPrivateSymbol(Handle<Object> name);

   // Create a global (but otherwise uninitialized) context.
   Handle<Context> NewNativeContext();
Index: src/heap/heap.cc
diff --git a/src/heap/heap.cc b/src/heap/heap.cc
index 361b4d91d7ffbdbf128fb05f6dde00e27f84e0a7..2dca3c4cfbc3c38af4eb406f656fc599c1dfbae8 100644
--- a/src/heap/heap.cc
+++ b/src/heap/heap.cc
@@ -3250,11 +3250,11 @@ void Heap::CreateInitialObjects() {

   {
     HandleScope scope(isolate());
-#define SYMBOL_INIT(name) \ - { \ - Handle<String> name##d = factory->NewStringFromStaticChars(#name); \ - Handle<Object> symbol(isolate()->factory()->NewPrivateOwnSymbol(name##d)); \ - roots_[k##name##RootIndex] = *symbol; \ +#define SYMBOL_INIT(name) \ + { \ + Handle<String> name##d = factory->NewStringFromStaticChars(#name); \ + Handle<Object> symbol(isolate()->factory()->NewPrivateSymbol(name##d)); \ + roots_[k##name##RootIndex] = *symbol; \
   }
     PRIVATE_SYMBOL_LIST(SYMBOL_INIT)
 #undef SYMBOL_INIT
Index: src/isolate.cc
diff --git a/src/isolate.cc b/src/isolate.cc
index 6361caee1c232cb6b0c1fda58f57c8decd363776..17f480c1d5a4c249da957814e7937e0b3941b2e6 100644
--- a/src/isolate.cc
+++ b/src/isolate.cc
@@ -774,8 +774,7 @@ void Isolate::ReportFailedAccessCheck(Handle<JSObject> receiver) {

 bool Isolate::IsInternallyUsedPropertyName(Handle<Object> name) {
   if (name->IsSymbol()) {
-    return Handle<Symbol>::cast(name)->is_private() &&
-           Handle<Symbol>::cast(name)->is_own();
+    return Handle<Symbol>::cast(name)->is_private();
   }
   return name.is_identical_to(factory()->hidden_string());
 }
@@ -783,7 +782,7 @@ bool Isolate::IsInternallyUsedPropertyName(Handle<Object> name) {

 bool Isolate::IsInternallyUsedPropertyName(Object* name) {
   if (name->IsSymbol()) {
- return Symbol::cast(name)->is_private() && Symbol::cast(name)->is_own();
+    return Symbol::cast(name)->is_private();
   }
   return name == heap()->hidden_string();
 }
Index: src/lookup.h
diff --git a/src/lookup.h b/src/lookup.h
index 7aafdea03076aa064b6b1caddf6e7b636005e04c..c7a4a36e37b6d80e94c8b0932e1828e7fda1268b 100644
--- a/src/lookup.h
+++ b/src/lookup.h
@@ -277,7 +277,7 @@ class LookupIterator final BASE_EMBEDDED {

   static Configuration ComputeConfiguration(
       Configuration configuration, Handle<Name> name) {
-    if (name->IsOwn()) {
+    if (name->IsPrivate()) {
       return static_cast<Configuration>(configuration &
                                         HIDDEN_SKIP_INTERCEPTOR);
     } else {
Index: src/macros.py
diff --git a/src/macros.py b/src/macros.py
index 94f94c39e18c91321ca086bd1b7da8c32c87da34..d2827a2b1a64c2d1a731e8c401903674c5c6cc02 100644
--- a/src/macros.py
+++ b/src/macros.py
@@ -161,8 +161,8 @@ macro HAS_INDEX(array, index, is_array) = ((is_array && %_HasFastPackedElements(
 # Private names.
 # GET_PRIVATE should only be used if the property is known to exists on obj
# itself (it should really use %GetOwnProperty, but that would be way slower).
-macro GLOBAL_PRIVATE(name) = (%CreateGlobalPrivateOwnSymbol(name));
-macro NEW_PRIVATE_OWN(name) = (%CreatePrivateOwnSymbol(name));
+macro GLOBAL_PRIVATE(name) = (%CreateGlobalPrivateSymbol(name));
+macro NEW_PRIVATE_OWN(name) = (%CreatePrivateSymbol(name));
 macro IS_PRIVATE(sym) = (%SymbolIsPrivate(sym));
 macro HAS_PRIVATE(obj, sym) = (%HasOwnProperty(obj, sym));
 macro HAS_DEFINED_PRIVATE(obj, sym) = (!IS_UNDEFINED(obj[sym]));
Index: src/objects-inl.h
diff --git a/src/objects-inl.h b/src/objects-inl.h
index 04b78e5f73b642bd6ab09c3986db6a2ddfda606e..c6adef4f85f91dcbf590c6e22d366f15477dde6e 100644
--- a/src/objects-inl.h
+++ b/src/objects-inl.h
@@ -3195,7 +3195,6 @@ bool Name::Equals(Handle<Name> one, Handle<Name> two) {
 ACCESSORS(Symbol, name, Object, kNameOffset)
 ACCESSORS(Symbol, flags, Smi, kFlagsOffset)
 BOOL_ACCESSORS(Symbol, flags, is_private, kPrivateBit)
-BOOL_ACCESSORS(Symbol, flags, is_own, kOwnBit)


 bool String::Equals(String* other) {
@@ -6395,8 +6394,9 @@ uint32_t Name::Hash() {
   return String::cast(this)->ComputeAndSetHash();
 }

-bool Name::IsOwn() {
-  return this->IsSymbol() && Symbol::cast(this)->is_own();
+
+bool Name::IsPrivate() {
+  return this->IsSymbol() && Symbol::cast(this)->is_private();
 }


Index: src/objects-printer.cc
diff --git a/src/objects-printer.cc b/src/objects-printer.cc
index a5d09eff0a24d58e448a684c867d7cb406a21f70..fb6b1b80e2f9993ae021c75b5f4d55f87490a35c 100644
--- a/src/objects-printer.cc
+++ b/src/objects-printer.cc
@@ -402,7 +402,6 @@ void Symbol::SymbolPrint(std::ostream& os) {  // NOLINT
     os << " (" << PrivateSymbolToName() << ")";
   }
   os << "\n - private: " << is_private();
-  os << "\n - own: " << is_own();
   os << "\n";
 }

Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index 79a8fbafbe8769104feef8626efb7ff82b8db7ff..39cf787f22d94ad13d69a79ced86c0689f8feb81 100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -8568,8 +8568,8 @@ class Name: public HeapObject {
   // Conversion.
   inline bool AsArrayIndex(uint32_t* index);

-  // Whether name can only name own properties.
-  inline bool IsOwn();
+  // If the name is private, it can only name own properties.
+  inline bool IsPrivate();

   DECLARE_CAST(Name)

@@ -8647,18 +8647,15 @@ class Name: public HeapObject {
 // ES6 symbols.
 class Symbol: public Name {
  public:
-  // [name]: the print name of a symbol, or undefined if none.
+  // [name]: The print name of a symbol, or undefined if none.
   DECL_ACCESSORS(name, Object)

   DECL_ACCESSORS(flags, Smi)

-  // [is_private]: whether this is a private symbol.
+ // [is_private]: Whether this is a private symbol. Private symbols can only
+  // be used to designate own properties of objects.
   DECL_BOOLEAN_ACCESSORS(is_private)

- // [is_own]: whether this is an own symbol, that is, only used to designate
-  // own properties of objects.
-  DECL_BOOLEAN_ACCESSORS(is_own)
-
   DECLARE_CAST(Symbol)

   // Dispatched behavior.
@@ -8676,7 +8673,6 @@ class Symbol: public Name {

  private:
   static const int kPrivateBit = 0;
-  static const int kOwnBit = 1;

   const char* PrivateSymbolToName() const;

Index: src/runtime/runtime-symbol.cc
diff --git a/src/runtime/runtime-symbol.cc b/src/runtime/runtime-symbol.cc
index 7ff7eb96436a25b25f1227bd60ee7ceeb2a91a08..412ee0ae3158e04a8fb8727963fd3ad7eaaee6e4 100644
--- a/src/runtime/runtime-symbol.cc
+++ b/src/runtime/runtime-symbol.cc
@@ -26,22 +26,11 @@ RUNTIME_FUNCTION(Runtime_CreatePrivateSymbol) {
   DCHECK(args.length() == 1);
   CONVERT_ARG_HANDLE_CHECKED(Object, name, 0);
   RUNTIME_ASSERT(name->IsString() || name->IsUndefined());
-  Handle<Symbol> symbol = isolate->factory()->NewPrivateSymbol();
-  if (name->IsString()) symbol->set_name(*name);
-  return *symbol;
-}
-
-
-RUNTIME_FUNCTION(Runtime_CreatePrivateOwnSymbol) {
-  HandleScope scope(isolate);
-  DCHECK(args.length() == 1);
-  CONVERT_ARG_HANDLE_CHECKED(Object, name, 0);
-  RUNTIME_ASSERT(name->IsString() || name->IsUndefined());
-  return *isolate->factory()->NewPrivateOwnSymbol(name);
+  return *isolate->factory()->NewPrivateSymbol(name);
 }


-RUNTIME_FUNCTION(Runtime_CreateGlobalPrivateOwnSymbol) {
+RUNTIME_FUNCTION(Runtime_CreateGlobalPrivateSymbol) {
   HandleScope scope(isolate);
   DCHECK(args.length() == 1);
   CONVERT_ARG_HANDLE_CHECKED(String, name, 0);
@@ -55,7 +44,7 @@ RUNTIME_FUNCTION(Runtime_CreateGlobalPrivateOwnSymbol) {
                                      Object::GetProperty(privates, name));
   if (!symbol->IsSymbol()) {
     DCHECK(symbol->IsUndefined());
-    symbol = isolate->factory()->NewPrivateOwnSymbol(name);
+    symbol = isolate->factory()->NewPrivateSymbol(name);
JSObject::AddProperty(Handle<JSObject>::cast(privates), name, symbol, NONE);
   }
   return *symbol;
Index: src/runtime/runtime.h
diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h
index 50f89b93ded1ed9c1126fa162a87b0b8198c2f72..b8918c424af1e056a623cab2f6ae86890a3efee8 100644
--- a/src/runtime/runtime.h
+++ b/src/runtime/runtime.h
@@ -586,14 +586,13 @@ namespace internal {
   F(StringGetLength, 1, 1)


-#define FOR_EACH_INTRINSIC_SYMBOL(F)    \
-  F(CreateSymbol, 1, 1)                 \
-  F(CreatePrivateSymbol, 1, 1)          \
-  F(CreatePrivateOwnSymbol, 1, 1)       \
-  F(CreateGlobalPrivateOwnSymbol, 1, 1) \
-  F(NewSymbolWrapper, 1, 1)             \
-  F(SymbolDescription, 1, 1)            \
-  F(SymbolRegistry, 0, 1)               \
+#define FOR_EACH_INTRINSIC_SYMBOL(F) \
+  F(CreateSymbol, 1, 1)              \
+  F(CreatePrivateSymbol, 1, 1)       \
+  F(CreateGlobalPrivateSymbol, 1, 1) \
+  F(NewSymbolWrapper, 1, 1)          \
+  F(SymbolDescription, 1, 1)         \
+  F(SymbolRegistry, 0, 1)            \
   F(SymbolIsPrivate, 1, 1)


Index: test/mjsunit/harmony/private.js
diff --git a/test/mjsunit/harmony/private.js b/test/mjsunit/harmony/private.js index c08daf105055cfcc9ac8ea940c4372bf0b8e0803..8c7ec33f9f85a8932608f1eabe85c7cae70e3247 100644
--- a/test/mjsunit/harmony/private.js
+++ b/test/mjsunit/harmony/private.js
@@ -241,7 +241,8 @@ function TestKeyGet(obj) {
   var obj2 = Object.create(obj)
   for (var i in symbols) {
     assertEquals(i|0, obj[symbols[i]])
-    assertEquals(i|0, obj2[symbols[i]])
+    // Private symbols key own-properties..
+    assertEquals(undefined, obj2[symbols[i]])
   }
 }

Index: test/mjsunit/own-symbols.js
diff --git a/test/mjsunit/own-symbols.js b/test/mjsunit/own-symbols.js
index 588a032aa86c582380497f087649988910cd0750..c74935c00062f10bd9a8bec0a97a2776c93f9d02 100644
--- a/test/mjsunit/own-symbols.js
+++ b/test/mjsunit/own-symbols.js
@@ -4,8 +4,8 @@
 //
 // Flags: --allow-natives-syntax

-var s = %CreatePrivateOwnSymbol("s");
-var s1 = %CreatePrivateOwnSymbol("s1");
+var s = %CreatePrivateSymbol("s");
+var s1 = %CreatePrivateSymbol("s1");

 function TestSimple() {
   var p = {}


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to