Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(224)

Unified Diff: third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h

Issue 2770043003: Refactor V8PrivateProperty to use an array.
Patch Set: move the DCHECK before the indexing Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h b/third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h
index 9af86f546ffee2bd29fc49fe5ec736a78dd0cecf..0be99a8613a468110d9cc0199b9c960911a7fa55 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h
@@ -46,10 +46,6 @@ class ScriptWrappable;
#define V8_PRIVATE_PROPERTY_GETTER_NAME(InterfaceName, PrivateKeyName) \
get##InterfaceName##PrivateKeyName
-// The member variable's name for a private property.
-#define V8_PRIVATE_PROPERTY_MEMBER_NAME(InterfaceName, PrivateKeyName) \
- m_symbol##InterfaceName##PrivateKeyName
-
// The string used to create a private symbol. Must be unique per V8 instance.
#define V8_PRIVATE_PROPERTY_SYMBOL_STRING(InterfaceName, PrivateKeyName) \
#InterfaceName "#" #PrivateKeyName // NOLINT(whitespace/indent)
@@ -133,28 +129,31 @@ class CORE_EXPORT V8PrivateProperty {
return WTF::wrapUnique(new V8PrivateProperty());
}
-#define V8_PRIVATE_PROPERTY_DEFINE_GETTER(InterfaceName, KeyName) \
- static Symbol V8_PRIVATE_PROPERTY_GETTER_NAME(InterfaceName, KeyName)( \
- v8::Isolate * isolate) /* NOLINT(readability/naming/underscores) */ \
- { \
- V8PrivateProperty* privateProp = \
- V8PerIsolateData::from(isolate)->privateProperty(); \
- if (UNLIKELY(privateProp \
- ->V8_PRIVATE_PROPERTY_MEMBER_NAME(InterfaceName, KeyName) \
- .IsEmpty())) { \
- privateProp->V8_PRIVATE_PROPERTY_MEMBER_NAME(InterfaceName, KeyName) \
- .Set( \
- isolate, \
- createV8Private( \
- isolate, \
- V8_PRIVATE_PROPERTY_SYMBOL_STRING(InterfaceName, KeyName), \
- sizeof V8_PRIVATE_PROPERTY_SYMBOL_STRING( \
- InterfaceName, \
- KeyName))); /* NOLINT(readability/naming/underscores) */ \
- } \
- return Symbol( \
- privateProp->V8_PRIVATE_PROPERTY_MEMBER_NAME(InterfaceName, KeyName) \
- .Get(isolate)); \
+ enum SymbolID {
+#define V8_PRIVATE_PROPERTY_ENUMERATOR(InterfaceName, PrivateKeyName) \
+ k##InterfaceName##PrivateKeyName,
+ V8_PRIVATE_PROPERTY_FOR_EACH(V8_PRIVATE_PROPERTY_ENUMERATOR)
+#undef V8_PRIVATE_PROPERTY_ENUMERATOR
+ kSymbolCount
+ };
+
+ static Symbol get(v8::Isolate* isolate, SymbolID symbolID) {
+ V8PrivateProperty* privateProp =
+ V8PerIsolateData::from(isolate)->privateProperty();
+ DCHECK_GE(symbolID, 0);
+ DCHECK_LT(symbolID, kSymbolCount);
+ auto& symbol = privateProp->m_symbols[symbolID];
+ if (UNLIKELY(symbol.IsEmpty()))
+ privateProp->initialize(isolate, symbolID);
+ DCHECK(!symbol.IsEmpty());
+ return Symbol(symbol.Get(isolate));
+ }
+
+#define V8_PRIVATE_PROPERTY_DEFINE_GETTER(InterfaceName, KeyName) \
+ static Symbol V8_PRIVATE_PROPERTY_GETTER_NAME(InterfaceName, KeyName)( \
+ v8::Isolate * isolate) /* NOLINT(readability/naming/underscores) */ \
+ { \
+ return get(isolate, k##InterfaceName##KeyName); \
}
V8_PRIVATE_PROPERTY_FOR_EACH(V8_PRIVATE_PROPERTY_DEFINE_GETTER)
#undef V8_PRIVATE_PROPERTY_DEFINE_GETTER
@@ -168,15 +167,13 @@ class CORE_EXPORT V8PrivateProperty {
private:
V8PrivateProperty() {}
+ void initialize(v8::Isolate*, SymbolID);
+
static v8::Local<v8::Private> createV8Private(v8::Isolate*,
const char* symbol,
size_t length);
-#define V8_PRIVATE_PROPERTY_DECLARE_MEMBER(InterfaceName, KeyName) \
- v8::Eternal<v8::Private> V8_PRIVATE_PROPERTY_MEMBER_NAME( \
- InterfaceName, KeyName); // NOLINT(readability/naming/underscores)
- V8_PRIVATE_PROPERTY_FOR_EACH(V8_PRIVATE_PROPERTY_DECLARE_MEMBER)
-#undef V8_PRIVATE_PROPERTY_DECLARE_MEMBER
+ v8::Eternal<v8::Private> m_symbols[kSymbolCount];
};
} // namespace blink
« no previous file with comments | « no previous file | third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698