| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index e6417c92edde4d3eb63123469c65dcabc9317cf4..c81f9dbe29c3d59fa232fc87d7a550d3fe427ee4 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -134,7 +134,6 @@
|
| // - Struct
|
| // - Box
|
| // - AccessorInfo
|
| -// - ExecutableAccessorInfo
|
| // - AccessorPair
|
| // - AccessCheckInfo
|
| // - InterceptorInfo
|
| @@ -384,9 +383,7 @@ const int kStubMinorKeyBits = kSmiValueSize - kStubMajorKeyBits - 1;
|
| \
|
| V(FILLER_TYPE) \
|
| \
|
| - V(DECLARED_ACCESSOR_DESCRIPTOR_TYPE) \
|
| - V(DECLARED_ACCESSOR_INFO_TYPE) \
|
| - V(EXECUTABLE_ACCESSOR_INFO_TYPE) \
|
| + V(ACCESSOR_INFO_TYPE) \
|
| V(ACCESSOR_PAIR_TYPE) \
|
| V(ACCESS_CHECK_INFO_TYPE) \
|
| V(INTERCEPTOR_INFO_TYPE) \
|
| @@ -505,8 +502,7 @@ const int kStubMinorKeyBits = kSmiValueSize - kStubMajorKeyBits - 1;
|
| // manually.
|
| #define STRUCT_LIST(V) \
|
| V(BOX, Box, box) \
|
| - V(EXECUTABLE_ACCESSOR_INFO, ExecutableAccessorInfo, \
|
| - executable_accessor_info) \
|
| + V(ACCESSOR_INFO, AccessorInfo, accessor_info) \
|
| V(ACCESSOR_PAIR, AccessorPair, accessor_pair) \
|
| V(ACCESS_CHECK_INFO, AccessCheckInfo, access_check_info) \
|
| V(INTERCEPTOR_INFO, InterceptorInfo, interceptor_info) \
|
| @@ -676,9 +672,7 @@ enum InstanceType {
|
| FILLER_TYPE, // LAST_DATA_TYPE
|
|
|
| // Structs.
|
| - DECLARED_ACCESSOR_DESCRIPTOR_TYPE,
|
| - DECLARED_ACCESSOR_INFO_TYPE,
|
| - EXECUTABLE_ACCESSOR_INFO_TYPE,
|
| + ACCESSOR_INFO_TYPE,
|
| ACCESSOR_PAIR_TYPE,
|
| ACCESS_CHECK_INFO_TYPE,
|
| INTERCEPTOR_INFO_TYPE,
|
| @@ -1043,7 +1037,6 @@ class Object {
|
|
|
| INLINE(bool IsFixedArrayBase() const);
|
| INLINE(bool IsExternal() const);
|
| - INLINE(bool IsAccessorInfo() const);
|
|
|
| INLINE(bool IsStruct() const);
|
| #define DECLARE_STRUCT_PREDICATE(NAME, Name, name) \
|
| @@ -2072,27 +2065,27 @@ class JSObject: public JSReceiver {
|
| LookupIterator* it, Handle<Object> value);
|
|
|
| // SetLocalPropertyIgnoreAttributes converts callbacks to fields. We need to
|
| - // grant an exemption to ExecutableAccessor callbacks in some cases.
|
| - enum ExecutableAccessorInfoHandling { DEFAULT_HANDLING, DONT_FORCE_FIELD };
|
| + // grant an exemption to AccessorInfo callbacks in some cases.
|
| + enum AccessorInfoHandling { DEFAULT_HANDLING, DONT_FORCE_FIELD };
|
|
|
| MUST_USE_RESULT static MaybeHandle<Object> DefineOwnPropertyIgnoreAttributes(
|
| LookupIterator* it, Handle<Object> value, PropertyAttributes attributes,
|
| - ExecutableAccessorInfoHandling handling = DEFAULT_HANDLING);
|
| + AccessorInfoHandling handling = DEFAULT_HANDLING);
|
|
|
| MUST_USE_RESULT static Maybe<bool> DefineOwnPropertyIgnoreAttributes(
|
| LookupIterator* it, Handle<Object> value, PropertyAttributes attributes,
|
| ShouldThrow should_throw,
|
| - ExecutableAccessorInfoHandling handling = DEFAULT_HANDLING);
|
| + AccessorInfoHandling handling = DEFAULT_HANDLING);
|
|
|
| MUST_USE_RESULT static MaybeHandle<Object> SetOwnPropertyIgnoreAttributes(
|
| Handle<JSObject> object, Handle<Name> name, Handle<Object> value,
|
| PropertyAttributes attributes,
|
| - ExecutableAccessorInfoHandling handling = DEFAULT_HANDLING);
|
| + AccessorInfoHandling handling = DEFAULT_HANDLING);
|
|
|
| MUST_USE_RESULT static MaybeHandle<Object> SetOwnElementIgnoreAttributes(
|
| Handle<JSObject> object, uint32_t index, Handle<Object> value,
|
| PropertyAttributes attributes,
|
| - ExecutableAccessorInfoHandling handling = DEFAULT_HANDLING);
|
| + AccessorInfoHandling handling = DEFAULT_HANDLING);
|
|
|
| // Equivalent to one of the above depending on whether |name| can be converted
|
| // to an array index.
|
| @@ -2100,7 +2093,7 @@ class JSObject: public JSReceiver {
|
| DefinePropertyOrElementIgnoreAttributes(
|
| Handle<JSObject> object, Handle<Name> name, Handle<Object> value,
|
| PropertyAttributes attributes = NONE,
|
| - ExecutableAccessorInfoHandling handling = DEFAULT_HANDLING);
|
| + AccessorInfoHandling handling = DEFAULT_HANDLING);
|
|
|
| // Adds or reconfigures a property to attributes NONE. It will fail when it
|
| // cannot.
|
| @@ -10182,11 +10175,28 @@ class JSRegExpResult: public JSArray {
|
| };
|
|
|
|
|
| +// An accessor must have a getter, but can have no setter.
|
| +//
|
| +// When setting a property, V8 searches accessors in prototypes.
|
| +// If an accessor was found and it does not have a setter,
|
| +// the request is ignored.
|
| +//
|
| +// If the accessor in the prototype has the READ_ONLY property attribute, then
|
| +// a new value is added to the derived object when the property is set.
|
| +// This shadows the accessor in the prototype.
|
| class AccessorInfo: public Struct {
|
| public:
|
| DECL_ACCESSORS(name, Object)
|
| DECL_INT_ACCESSORS(flag)
|
| DECL_ACCESSORS(expected_receiver_type, Object)
|
| + DECL_ACCESSORS(getter, Object)
|
| + DECL_ACCESSORS(setter, Object)
|
| + DECL_ACCESSORS(data, Object)
|
| +
|
| + // Dispatched behavior.
|
| + DECLARE_PRINTER(AccessorInfo)
|
| +
|
| + static void ClearSetter(Handle<AccessorInfo> info);
|
|
|
| inline bool all_can_read();
|
| inline void set_all_can_read(bool value);
|
| @@ -10220,7 +10230,11 @@ class AccessorInfo: public Struct {
|
| static const int kNameOffset = HeapObject::kHeaderSize;
|
| static const int kFlagOffset = kNameOffset + kPointerSize;
|
| static const int kExpectedReceiverTypeOffset = kFlagOffset + kPointerSize;
|
| - static const int kSize = kExpectedReceiverTypeOffset + kPointerSize;
|
| + static const int kGetterOffset = kExpectedReceiverTypeOffset + kPointerSize;
|
| + static const int kSetterOffset = kGetterOffset + kPointerSize;
|
| + static const int kDataOffset = kSetterOffset + kPointerSize;
|
| + static const int kSize = kDataOffset + kPointerSize;
|
| +
|
|
|
| private:
|
| inline bool HasExpectedReceiverType();
|
| @@ -10235,39 +10249,6 @@ class AccessorInfo: public Struct {
|
| };
|
|
|
|
|
| -// An accessor must have a getter, but can have no setter.
|
| -//
|
| -// When setting a property, V8 searches accessors in prototypes.
|
| -// If an accessor was found and it does not have a setter,
|
| -// the request is ignored.
|
| -//
|
| -// If the accessor in the prototype has the READ_ONLY property attribute, then
|
| -// a new value is added to the derived object when the property is set.
|
| -// This shadows the accessor in the prototype.
|
| -class ExecutableAccessorInfo: public AccessorInfo {
|
| - public:
|
| - DECL_ACCESSORS(getter, Object)
|
| - DECL_ACCESSORS(setter, Object)
|
| - DECL_ACCESSORS(data, Object)
|
| -
|
| - DECLARE_CAST(ExecutableAccessorInfo)
|
| -
|
| - // Dispatched behavior.
|
| - DECLARE_PRINTER(ExecutableAccessorInfo)
|
| - DECLARE_VERIFIER(ExecutableAccessorInfo)
|
| -
|
| - static const int kGetterOffset = AccessorInfo::kSize;
|
| - static const int kSetterOffset = kGetterOffset + kPointerSize;
|
| - static const int kDataOffset = kSetterOffset + kPointerSize;
|
| - static const int kSize = kDataOffset + kPointerSize;
|
| -
|
| - static void ClearSetter(Handle<ExecutableAccessorInfo> info);
|
| -
|
| - private:
|
| - DISALLOW_IMPLICIT_CONSTRUCTORS(ExecutableAccessorInfo);
|
| -};
|
| -
|
| -
|
| // Support for JavaScript accessors: A pair of a getter and a setter. Each
|
| // accessor can either be
|
| // * a pointer to a JavaScript function or proxy: a real accessor
|
|
|