Chromium Code Reviews| Index: include/v8.h |
| diff --git a/include/v8.h b/include/v8.h |
| index fa572b0a00e2d9f1517ef5fd4448c547453657c3..4b834ebe72062dae1e377edd312df81fbface829 100644 |
| --- a/include/v8.h |
| +++ b/include/v8.h |
| @@ -96,6 +96,7 @@ class ObjectTemplate; |
| class Platform; |
| class Primitive; |
| class Promise; |
| +class PropertyDescriptor; |
| class Proxy; |
| class RawOperationDescriptor; |
| class Script; |
| @@ -2791,6 +2792,21 @@ class V8_EXPORT Object : public Value { |
| Local<Context> context, Local<Name> key, Local<Value> value, |
| PropertyAttribute attributes = None); |
| + // Implements Object.DefineProperty(O, P, Attributes), see Ecma-262 19.1.2.4. |
| + // |
| + // The defineProperty function is used to add an own property or |
| + // update the attributes of an existing own property of an object. |
| + // |
| + // Both data and accessor descriptors can be used. |
| + // |
| + // In general, CreateDataProperty is faster, however, does not allow |
| + // for specifying attributes or an accessor descriptor. |
| + // |
| + // Returns true on success. |
| + V8_WARN_UNUSED_RESULT Maybe<bool> DefineProperty( |
| + Local<Context> context, Local<Name> key, |
| + const PropertyDescriptor& descriptor); |
| + |
| // Sets an own property on this object bypassing interceptors and |
| // overriding accessors or read-only properties. |
| // |
| @@ -3608,6 +3624,61 @@ class V8_EXPORT Promise : public Object { |
| static void CheckCast(Value* obj); |
| }; |
| +/** |
| + * An instance of a Property Descriptor, see Ecma-262 6.2.4. |
| + * |
| + * This property descriptor is immutable except for its properties enumerable |
| + * and configurable. An invalid descriptor that is both |
| + * a data and accessor descriptor can not be generated. To determine if |
| + * a descriptor is an accessor, data, or generic descriptor, use the |
| + * `has_x()` functions for appropriate x. |
| + * |
| + * Accessors `get` or `set` must be callable, unless they are undefined. Use |
| + * empty handles to indicate that `value`, `get`, or `set` are not set. |
| + * |
| + * \code |
| + * PropertyDescriptor(Local<Function>())) // var desc = {} |
| + * PropertyDescriptor(v8::Undefined(isolate)) // var desc = {get: undefined} |
| + * \endcode |
| + */ |
| +class V8_EXPORT PropertyDescriptor { |
| + public: |
| + enum State { kTrue = 0, kFalse = 1, kNotSet = 2 }; |
| + |
| + // GenericDescriptor |
| + PropertyDescriptor(); |
| + |
| + // DataDescriptor |
| + PropertyDescriptor(Local<Value> value, State writable); |
| + |
| + // AccessorDescriptor |
| + PropertyDescriptor(Local<Value> get, Local<Value> set); |
| + |
| + ~PropertyDescriptor(); |
| + |
| + Local<Value> value() const; |
| + bool has_value() const; |
| + |
| + Local<Value> get() const; |
| + bool has_get() const; |
| + Local<Value> set() const; |
| + bool has_set() const; |
| + |
| + void set_enumerable(bool enumerable); |
| + State enumerable() const; |
|
Jakob Kummerow
2016/08/29 12:32:23
I'd be fine with a "bool enumerable() / bool has_e
Franzi
2016/08/31 09:44:13
As discussed, I'm using bool instead of the enum S
|
| + |
| + void set_configurable(bool configurable); |
| + State configurable() const; |
| + |
| + State writable() const; |
| + |
| + PropertyDescriptor(const PropertyDescriptor&) = delete; |
| + void operator=(const PropertyDescriptor&) = delete; |
| + |
| + private: |
| + struct PrivateData; |
| + PrivateData* private_; |
| +}; |
| /** |
| * An instance of the built-in Proxy constructor (ECMA-262, 6th Edition, |