Revision f230a1cf deps/v8/src/accessors.cc
deps/v8/src/accessors.cc | ||
---|---|---|
78 | 78 |
} |
79 | 79 |
|
80 | 80 |
|
81 |
static V8_INLINE bool CheckForName(Handle<String> name, |
|
82 |
String* property_name, |
|
83 |
int offset, |
|
84 |
int* object_offset) { |
|
85 |
if (name->Equals(property_name)) { |
|
86 |
*object_offset = offset; |
|
87 |
return true; |
|
88 |
} |
|
89 |
return false; |
|
90 |
} |
|
91 |
|
|
92 |
|
|
93 |
bool Accessors::IsJSObjectFieldAccessor( |
|
94 |
Handle<Map> map, Handle<String> name, |
|
95 |
int* object_offset) { |
|
96 |
Isolate* isolate = map->GetIsolate(); |
|
97 |
switch (map->instance_type()) { |
|
98 |
case JS_ARRAY_TYPE: |
|
99 |
return |
|
100 |
CheckForName(name, isolate->heap()->length_string(), |
|
101 |
JSArray::kLengthOffset, object_offset); |
|
102 |
case JS_TYPED_ARRAY_TYPE: |
|
103 |
return |
|
104 |
CheckForName(name, isolate->heap()->length_string(), |
|
105 |
JSTypedArray::kLengthOffset, object_offset) || |
|
106 |
CheckForName(name, isolate->heap()->byte_length_string(), |
|
107 |
JSTypedArray::kByteLengthOffset, object_offset) || |
|
108 |
CheckForName(name, isolate->heap()->byte_offset_string(), |
|
109 |
JSTypedArray::kByteOffsetOffset, object_offset) || |
|
110 |
CheckForName(name, isolate->heap()->buffer_string(), |
|
111 |
JSTypedArray::kBufferOffset, object_offset); |
|
112 |
case JS_ARRAY_BUFFER_TYPE: |
|
113 |
return |
|
114 |
CheckForName(name, isolate->heap()->byte_length_string(), |
|
115 |
JSArrayBuffer::kByteLengthOffset, object_offset); |
|
116 |
case JS_DATA_VIEW_TYPE: |
|
117 |
return |
|
118 |
CheckForName(name, isolate->heap()->byte_length_string(), |
|
119 |
JSDataView::kByteLengthOffset, object_offset) || |
|
120 |
CheckForName(name, isolate->heap()->byte_offset_string(), |
|
121 |
JSDataView::kByteOffsetOffset, object_offset) || |
|
122 |
CheckForName(name, isolate->heap()->buffer_string(), |
|
123 |
JSDataView::kBufferOffset, object_offset); |
|
124 |
default: { |
|
125 |
if (map->instance_type() < FIRST_NONSTRING_TYPE) { |
|
126 |
return |
|
127 |
CheckForName(name, isolate->heap()->length_string(), |
|
128 |
String::kLengthOffset, object_offset); |
|
129 |
} |
|
130 |
return false; |
|
131 |
} |
|
132 |
} |
|
133 |
} |
|
134 |
|
|
135 |
|
|
81 | 136 |
// |
82 | 137 |
// Accessors::ArrayLength |
83 | 138 |
// |
Also available in: Unified diff