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.