Chromium Code Reviews| Index: include/v8.h |
| diff --git a/include/v8.h b/include/v8.h |
| index 0b8a3db6f4fc288eae058dcfaf942861ec716cd8..7a07b76d2b8db37a633af538aa21c692231bbeaa 100644 |
| --- a/include/v8.h |
| +++ b/include/v8.h |
| @@ -103,6 +103,7 @@ class String; |
| class StringObject; |
| class Symbol; |
| class SymbolObject; |
| +class Private; |
| class Uint32; |
| class Utils; |
| class Value; |
| @@ -311,6 +312,7 @@ class Local { |
| friend class String; |
| friend class Object; |
| friend class Context; |
| + friend class Private; |
| template<class F> friend class internal::CustomArguments; |
| friend Local<Primitive> Undefined(Isolate* isolate); |
| friend Local<Primitive> Null(Isolate* isolate); |
| @@ -2483,6 +2485,34 @@ class V8_EXPORT Symbol : public Name { |
| /** |
| + * A private symbol |
| + * |
| + * This is an experimental feature. Use at your own risk. |
| + */ |
| +class V8_EXPORT Private : public Data { |
| + public: |
| + // Returns the print name string of the private symbol, or undefined if none. |
| + Local<Value> Name() const; |
| + |
| + // Create a private symbol. If name is not empty, it will be the description. |
| + static Local<Private> New(Isolate* isolate, |
| + Local<String> name = Local<String>()); |
| + |
| + // Retrieve a global private symbol. If a symbol with this name has not |
| + // been retrieved in the same isolate before, it is created. |
| + // Note that private symbols created this way are never collected, so |
| + // they should only be used for statically fixed properties. |
| + // Also, there is only one global name space for the names used as keys. |
| + // To minimize the potential for clashes, use qualified names as keys, |
| + // e.g., "Class#property". |
| + static Local<Private> ForApi(Isolate* isolate, Local<String> name); |
| + |
| + private: |
| + Private(); |
| +}; |
| + |
| + |
| +/** |
| * A JavaScript number value (ECMA-262, 4.3.20) |
| */ |
| class V8_EXPORT Number : public Primitive { |
| @@ -2710,6 +2740,18 @@ class V8_EXPORT Object : public Value { |
| AccessControl settings = DEFAULT); |
| /** |
| + * Functionality for private properties. |
| + * This is an experimental feature, use at your own risk. |
| + * Note: Private properties are not inherited. Do not rely on this, since it |
| + * may change. |
| + */ |
| + Maybe<bool> HasPrivate(Local<Context> context, Local<Private> key); |
| + Maybe<bool> SetPrivate(Local<Context> context, Local<Private> key, |
| + Local<Value> value); |
| + Maybe<bool> DeletePrivate(Local<Context> context, Local<Private> key); |
|
rossberg
2015/10/29 14:06:15
As discussed offline, if there is no real use case
|
| + MaybeLocal<Value> GetPrivate(Local<Context> context, Local<Private> key); |
| + |
| + /** |
| * Returns an array containing the names of the enumerable properties |
| * of this object, including properties from prototype objects. The |
| * array returned by this method contains the same values as would |
| @@ -2877,16 +2919,12 @@ class V8_EXPORT Object : public Value { |
| */ |
| int GetIdentityHash(); |
| - /** |
| - * Access hidden properties on JavaScript objects. These properties are |
| - * hidden from the executing JavaScript and only accessible through the V8 |
| - * C++ API. Hidden properties introduced by V8 internally (for example the |
| - * identity hash) are prefixed with "v8::". |
| - */ |
| - // TODO(dcarney): convert these to take a isolate and optionally bailout? |
| - bool SetHiddenValue(Local<String> key, Local<Value> value); |
| - Local<Value> GetHiddenValue(Local<String> key); |
| - bool DeleteHiddenValue(Local<String> key); |
| + V8_DEPRECATE_SOON("Use v8::Object::SetPrivate instead.", |
| + bool SetHiddenValue(Local<String> key, Local<Value> value)); |
| + V8_DEPRECATE_SOON("Use v8::Object::GetHidden instead.", |
| + Local<Value> GetHiddenValue(Local<String> key)); |
| + V8_DEPRECATE_SOON("Use v8::Object::DeletePrivate instead.", |
| + bool DeleteHiddenValue(Local<String> key)); |
| /** |
| * Clone this object with a fast but shallow copy. Values will point |