| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // Review notes: | 5 // Review notes: |
| 6 // | 6 // |
| 7 // - The use of macros in these inline functions may seem superfluous | 7 // - The use of macros in these inline functions may seem superfluous |
| 8 // but it is absolutely needed to make sure gcc generates optimal | 8 // but it is absolutely needed to make sure gcc generates optimal |
| 9 // code. gcc is not happy when attempting to inline too deep. | 9 // code. gcc is not happy when attempting to inline too deep. |
| 10 // | 10 // |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 TYPE_CHECKER(BytecodeArray, BYTECODE_ARRAY_TYPE) | 138 TYPE_CHECKER(BytecodeArray, BYTECODE_ARRAY_TYPE) |
| 139 TYPE_CHECKER(Cell, CELL_TYPE) | 139 TYPE_CHECKER(Cell, CELL_TYPE) |
| 140 TYPE_CHECKER(Code, CODE_TYPE) | 140 TYPE_CHECKER(Code, CODE_TYPE) |
| 141 TYPE_CHECKER(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE) | 141 TYPE_CHECKER(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE) |
| 142 TYPE_CHECKER(Foreign, FOREIGN_TYPE) | 142 TYPE_CHECKER(Foreign, FOREIGN_TYPE) |
| 143 TYPE_CHECKER(FreeSpace, FREE_SPACE_TYPE) | 143 TYPE_CHECKER(FreeSpace, FREE_SPACE_TYPE) |
| 144 TYPE_CHECKER(HeapNumber, HEAP_NUMBER_TYPE) | 144 TYPE_CHECKER(HeapNumber, HEAP_NUMBER_TYPE) |
| 145 TYPE_CHECKER(JSArgumentsObject, JS_ARGUMENTS_TYPE) | 145 TYPE_CHECKER(JSArgumentsObject, JS_ARGUMENTS_TYPE) |
| 146 TYPE_CHECKER(JSArray, JS_ARRAY_TYPE) | 146 TYPE_CHECKER(JSArray, JS_ARRAY_TYPE) |
| 147 TYPE_CHECKER(JSArrayBuffer, JS_ARRAY_BUFFER_TYPE) | 147 TYPE_CHECKER(JSArrayBuffer, JS_ARRAY_BUFFER_TYPE) |
| 148 TYPE_CHECKER(JSAsyncGeneratorObject, JS_ASYNC_GENERATOR_OBJECT_TYPE) |
| 148 TYPE_CHECKER(JSBoundFunction, JS_BOUND_FUNCTION_TYPE) | 149 TYPE_CHECKER(JSBoundFunction, JS_BOUND_FUNCTION_TYPE) |
| 149 TYPE_CHECKER(JSContextExtensionObject, JS_CONTEXT_EXTENSION_OBJECT_TYPE) | 150 TYPE_CHECKER(JSContextExtensionObject, JS_CONTEXT_EXTENSION_OBJECT_TYPE) |
| 150 TYPE_CHECKER(JSDataView, JS_DATA_VIEW_TYPE) | 151 TYPE_CHECKER(JSDataView, JS_DATA_VIEW_TYPE) |
| 151 TYPE_CHECKER(JSDate, JS_DATE_TYPE) | 152 TYPE_CHECKER(JSDate, JS_DATE_TYPE) |
| 152 TYPE_CHECKER(JSError, JS_ERROR_TYPE) | 153 TYPE_CHECKER(JSError, JS_ERROR_TYPE) |
| 153 TYPE_CHECKER(JSFunction, JS_FUNCTION_TYPE) | 154 TYPE_CHECKER(JSFunction, JS_FUNCTION_TYPE) |
| 154 TYPE_CHECKER(JSGeneratorObject, JS_GENERATOR_OBJECT_TYPE) | |
| 155 TYPE_CHECKER(JSGlobalObject, JS_GLOBAL_OBJECT_TYPE) | 155 TYPE_CHECKER(JSGlobalObject, JS_GLOBAL_OBJECT_TYPE) |
| 156 TYPE_CHECKER(JSMap, JS_MAP_TYPE) | 156 TYPE_CHECKER(JSMap, JS_MAP_TYPE) |
| 157 TYPE_CHECKER(JSMapIterator, JS_MAP_ITERATOR_TYPE) | 157 TYPE_CHECKER(JSMapIterator, JS_MAP_ITERATOR_TYPE) |
| 158 TYPE_CHECKER(JSMessageObject, JS_MESSAGE_OBJECT_TYPE) | 158 TYPE_CHECKER(JSMessageObject, JS_MESSAGE_OBJECT_TYPE) |
| 159 TYPE_CHECKER(JSModuleNamespace, JS_MODULE_NAMESPACE_TYPE) | 159 TYPE_CHECKER(JSModuleNamespace, JS_MODULE_NAMESPACE_TYPE) |
| 160 TYPE_CHECKER(JSPromiseCapability, JS_PROMISE_CAPABILITY_TYPE) | 160 TYPE_CHECKER(JSPromiseCapability, JS_PROMISE_CAPABILITY_TYPE) |
| 161 TYPE_CHECKER(JSPromise, JS_PROMISE_TYPE) | 161 TYPE_CHECKER(JSPromise, JS_PROMISE_TYPE) |
| 162 TYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE) | 162 TYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE) |
| 163 TYPE_CHECKER(JSSet, JS_SET_TYPE) | 163 TYPE_CHECKER(JSSet, JS_SET_TYPE) |
| 164 TYPE_CHECKER(JSSetIterator, JS_SET_ITERATOR_TYPE) | 164 TYPE_CHECKER(JSSetIterator, JS_SET_ITERATOR_TYPE) |
| (...skipping 28 matching lines...) Expand all Loading... |
| 193 InstanceType instance_type = map()->instance_type(); | 193 InstanceType instance_type = map()->instance_type(); |
| 194 return instance_type == FIXED_ARRAY_TYPE || | 194 return instance_type == FIXED_ARRAY_TYPE || |
| 195 instance_type == TRANSITION_ARRAY_TYPE; | 195 instance_type == TRANSITION_ARRAY_TYPE; |
| 196 } | 196 } |
| 197 | 197 |
| 198 // External objects are not extensible, so the map check is enough. | 198 // External objects are not extensible, so the map check is enough. |
| 199 bool HeapObject::IsExternal() const { | 199 bool HeapObject::IsExternal() const { |
| 200 return map() == GetHeap()->external_map(); | 200 return map() == GetHeap()->external_map(); |
| 201 } | 201 } |
| 202 | 202 |
| 203 bool HeapObject::IsJSGeneratorObject() const { |
| 204 return map()->instance_type() == JS_GENERATOR_OBJECT_TYPE || |
| 205 IsJSAsyncGeneratorObject(); |
| 206 } |
| 207 |
| 203 #define SIMD128_TYPE_CHECKER(TYPE, Type, type, lane_count, lane_type) \ | 208 #define SIMD128_TYPE_CHECKER(TYPE, Type, type, lane_count, lane_type) \ |
| 204 bool HeapObject::Is##Type() const { return map() == GetHeap()->type##_map(); } | 209 bool HeapObject::Is##Type() const { return map() == GetHeap()->type##_map(); } |
| 205 SIMD128_TYPES(SIMD128_TYPE_CHECKER) | 210 SIMD128_TYPES(SIMD128_TYPE_CHECKER) |
| 206 #undef SIMD128_TYPE_CHECKER | 211 #undef SIMD128_TYPE_CHECKER |
| 207 | 212 |
| 208 #define IS_TYPE_FUNCTION_DEF(type_) \ | 213 #define IS_TYPE_FUNCTION_DEF(type_) \ |
| 209 bool Object::Is##type_() const { \ | 214 bool Object::Is##type_() const { \ |
| 210 return IsHeapObject() && HeapObject::cast(this)->Is##type_(); \ | 215 return IsHeapObject() && HeapObject::cast(this)->Is##type_(); \ |
| 211 } | 216 } |
| 212 HEAP_OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DEF) | 217 HEAP_OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DEF) |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 645 CAST_ACCESSOR(Int32x4) | 650 CAST_ACCESSOR(Int32x4) |
| 646 CAST_ACCESSOR(Int8x16) | 651 CAST_ACCESSOR(Int8x16) |
| 647 CAST_ACCESSOR(JSArray) | 652 CAST_ACCESSOR(JSArray) |
| 648 CAST_ACCESSOR(JSArrayBuffer) | 653 CAST_ACCESSOR(JSArrayBuffer) |
| 649 CAST_ACCESSOR(JSArrayBufferView) | 654 CAST_ACCESSOR(JSArrayBufferView) |
| 650 CAST_ACCESSOR(JSBoundFunction) | 655 CAST_ACCESSOR(JSBoundFunction) |
| 651 CAST_ACCESSOR(JSDataView) | 656 CAST_ACCESSOR(JSDataView) |
| 652 CAST_ACCESSOR(JSDate) | 657 CAST_ACCESSOR(JSDate) |
| 653 CAST_ACCESSOR(JSFunction) | 658 CAST_ACCESSOR(JSFunction) |
| 654 CAST_ACCESSOR(JSGeneratorObject) | 659 CAST_ACCESSOR(JSGeneratorObject) |
| 660 CAST_ACCESSOR(JSAsyncGeneratorObject) |
| 655 CAST_ACCESSOR(JSGlobalObject) | 661 CAST_ACCESSOR(JSGlobalObject) |
| 656 CAST_ACCESSOR(JSGlobalProxy) | 662 CAST_ACCESSOR(JSGlobalProxy) |
| 657 CAST_ACCESSOR(JSMap) | 663 CAST_ACCESSOR(JSMap) |
| 658 CAST_ACCESSOR(JSMapIterator) | 664 CAST_ACCESSOR(JSMapIterator) |
| 659 CAST_ACCESSOR(JSMessageObject) | 665 CAST_ACCESSOR(JSMessageObject) |
| 660 CAST_ACCESSOR(JSModuleNamespace) | 666 CAST_ACCESSOR(JSModuleNamespace) |
| 661 CAST_ACCESSOR(JSObject) | 667 CAST_ACCESSOR(JSObject) |
| 662 CAST_ACCESSOR(JSProxy) | 668 CAST_ACCESSOR(JSProxy) |
| 663 CAST_ACCESSOR(JSReceiver) | 669 CAST_ACCESSOR(JSReceiver) |
| 664 CAST_ACCESSOR(JSRegExp) | 670 CAST_ACCESSOR(JSRegExp) |
| (...skipping 1497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2162 // Check for the most common kind of JavaScript object before | 2168 // Check for the most common kind of JavaScript object before |
| 2163 // falling into the generic switch. This speeds up the internal | 2169 // falling into the generic switch. This speeds up the internal |
| 2164 // field operations considerably on average. | 2170 // field operations considerably on average. |
| 2165 if (type == JS_OBJECT_TYPE) return JSObject::kHeaderSize; | 2171 if (type == JS_OBJECT_TYPE) return JSObject::kHeaderSize; |
| 2166 switch (type) { | 2172 switch (type) { |
| 2167 case JS_API_OBJECT_TYPE: | 2173 case JS_API_OBJECT_TYPE: |
| 2168 case JS_SPECIAL_API_OBJECT_TYPE: | 2174 case JS_SPECIAL_API_OBJECT_TYPE: |
| 2169 return JSObject::kHeaderSize; | 2175 return JSObject::kHeaderSize; |
| 2170 case JS_GENERATOR_OBJECT_TYPE: | 2176 case JS_GENERATOR_OBJECT_TYPE: |
| 2171 return JSGeneratorObject::kSize; | 2177 return JSGeneratorObject::kSize; |
| 2178 case JS_ASYNC_GENERATOR_OBJECT_TYPE: |
| 2179 return JSAsyncGeneratorObject::kSize; |
| 2172 case JS_GLOBAL_PROXY_TYPE: | 2180 case JS_GLOBAL_PROXY_TYPE: |
| 2173 return JSGlobalProxy::kSize; | 2181 return JSGlobalProxy::kSize; |
| 2174 case JS_GLOBAL_OBJECT_TYPE: | 2182 case JS_GLOBAL_OBJECT_TYPE: |
| 2175 return JSGlobalObject::kSize; | 2183 return JSGlobalObject::kSize; |
| 2176 case JS_BOUND_FUNCTION_TYPE: | 2184 case JS_BOUND_FUNCTION_TYPE: |
| 2177 return JSBoundFunction::kSize; | 2185 return JSBoundFunction::kSize; |
| 2178 case JS_FUNCTION_TYPE: | 2186 case JS_FUNCTION_TYPE: |
| 2179 return JSFunction::kSize; | 2187 return JSFunction::kSize; |
| 2180 case JS_VALUE_TYPE: | 2188 case JS_VALUE_TYPE: |
| 2181 return JSValue::kSize; | 2189 return JSValue::kSize; |
| (...skipping 3581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5763 ACCESSORS(PromiseReactionJobInfo, deferred_promise, Object, | 5771 ACCESSORS(PromiseReactionJobInfo, deferred_promise, Object, |
| 5764 kDeferredPromiseOffset); | 5772 kDeferredPromiseOffset); |
| 5765 ACCESSORS(PromiseReactionJobInfo, deferred_on_resolve, Object, | 5773 ACCESSORS(PromiseReactionJobInfo, deferred_on_resolve, Object, |
| 5766 kDeferredOnResolveOffset); | 5774 kDeferredOnResolveOffset); |
| 5767 ACCESSORS(PromiseReactionJobInfo, deferred_on_reject, Object, | 5775 ACCESSORS(PromiseReactionJobInfo, deferred_on_reject, Object, |
| 5768 kDeferredOnRejectOffset); | 5776 kDeferredOnRejectOffset); |
| 5769 SMI_ACCESSORS(PromiseReactionJobInfo, debug_id, kDebugIdOffset); | 5777 SMI_ACCESSORS(PromiseReactionJobInfo, debug_id, kDebugIdOffset); |
| 5770 SMI_ACCESSORS(PromiseReactionJobInfo, debug_name, kDebugNameOffset); | 5778 SMI_ACCESSORS(PromiseReactionJobInfo, debug_name, kDebugNameOffset); |
| 5771 ACCESSORS(PromiseReactionJobInfo, context, Context, kContextOffset); | 5779 ACCESSORS(PromiseReactionJobInfo, context, Context, kContextOffset); |
| 5772 | 5780 |
| 5781 ACCESSORS(AsyncGeneratorRequest, next, Object, kNextOffset) |
| 5782 SMI_ACCESSORS(AsyncGeneratorRequest, resume_mode, kResumeModeOffset) |
| 5783 ACCESSORS(AsyncGeneratorRequest, value, Object, kValueOffset) |
| 5784 ACCESSORS(AsyncGeneratorRequest, promise, Object, kPromiseOffset) |
| 5785 ACCESSORS(AsyncGeneratorRequest, awaited_promise, Object, kAwaitedPromiseOffset) |
| 5786 |
| 5773 Map* PrototypeInfo::ObjectCreateMap() { | 5787 Map* PrototypeInfo::ObjectCreateMap() { |
| 5774 return Map::cast(WeakCell::cast(object_create_map())->value()); | 5788 return Map::cast(WeakCell::cast(object_create_map())->value()); |
| 5775 } | 5789 } |
| 5776 | 5790 |
| 5777 // static | 5791 // static |
| 5778 void PrototypeInfo::SetObjectCreateMap(Handle<PrototypeInfo> info, | 5792 void PrototypeInfo::SetObjectCreateMap(Handle<PrototypeInfo> info, |
| 5779 Handle<Map> map) { | 5793 Handle<Map> map) { |
| 5780 Handle<WeakCell> cell = Map::WeakCellForMap(map); | 5794 Handle<WeakCell> cell = Map::WeakCellForMap(map); |
| 5781 info->set_object_create_map(*cell); | 5795 info->set_object_create_map(*cell); |
| 5782 } | 5796 } |
| (...skipping 994 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6777 | 6791 |
| 6778 void Foreign::set_foreign_address(Address value) { | 6792 void Foreign::set_foreign_address(Address value) { |
| 6779 WRITE_INTPTR_FIELD(this, kForeignAddressOffset, OffsetFrom(value)); | 6793 WRITE_INTPTR_FIELD(this, kForeignAddressOffset, OffsetFrom(value)); |
| 6780 } | 6794 } |
| 6781 | 6795 |
| 6782 | 6796 |
| 6783 ACCESSORS(JSGeneratorObject, function, JSFunction, kFunctionOffset) | 6797 ACCESSORS(JSGeneratorObject, function, JSFunction, kFunctionOffset) |
| 6784 ACCESSORS(JSGeneratorObject, context, Context, kContextOffset) | 6798 ACCESSORS(JSGeneratorObject, context, Context, kContextOffset) |
| 6785 ACCESSORS(JSGeneratorObject, receiver, Object, kReceiverOffset) | 6799 ACCESSORS(JSGeneratorObject, receiver, Object, kReceiverOffset) |
| 6786 ACCESSORS(JSGeneratorObject, input_or_debug_pos, Object, kInputOrDebugPosOffset) | 6800 ACCESSORS(JSGeneratorObject, input_or_debug_pos, Object, kInputOrDebugPosOffset) |
| 6801 ACCESSORS(JSGeneratorObject, await_input, Object, kAwaitInputOffset) |
| 6787 SMI_ACCESSORS(JSGeneratorObject, resume_mode, kResumeModeOffset) | 6802 SMI_ACCESSORS(JSGeneratorObject, resume_mode, kResumeModeOffset) |
| 6788 SMI_ACCESSORS(JSGeneratorObject, continuation, kContinuationOffset) | 6803 SMI_ACCESSORS(JSGeneratorObject, continuation, kContinuationOffset) |
| 6789 ACCESSORS(JSGeneratorObject, register_file, FixedArray, kRegisterFileOffset) | 6804 ACCESSORS(JSGeneratorObject, register_file, FixedArray, kRegisterFileOffset) |
| 6790 | 6805 |
| 6791 bool JSGeneratorObject::is_suspended() const { | 6806 bool JSGeneratorObject::is_suspended() const { |
| 6792 DCHECK_LT(kGeneratorExecuting, 0); | 6807 DCHECK_LT(kGeneratorExecuting, 0); |
| 6793 DCHECK_LT(kGeneratorClosed, 0); | 6808 DCHECK_LT(kGeneratorClosed, 0); |
| 6794 return continuation() >= 0; | 6809 return continuation() >= 0; |
| 6795 } | 6810 } |
| 6796 | 6811 |
| 6797 bool JSGeneratorObject::is_closed() const { | 6812 bool JSGeneratorObject::is_closed() const { |
| 6798 return continuation() == kGeneratorClosed; | 6813 return continuation() == kGeneratorClosed; |
| 6799 } | 6814 } |
| 6800 | 6815 |
| 6801 bool JSGeneratorObject::is_executing() const { | 6816 bool JSGeneratorObject::is_executing() const { |
| 6802 return continuation() == kGeneratorExecuting; | 6817 return continuation() == kGeneratorExecuting; |
| 6803 } | 6818 } |
| 6804 | 6819 |
| 6820 ACCESSORS(JSAsyncGeneratorObject, queue, HeapObject, kQueueOffset) |
| 6821 |
| 6805 ACCESSORS(JSValue, value, Object, kValueOffset) | 6822 ACCESSORS(JSValue, value, Object, kValueOffset) |
| 6806 | 6823 |
| 6807 | 6824 |
| 6808 HeapNumber* HeapNumber::cast(Object* object) { | 6825 HeapNumber* HeapNumber::cast(Object* object) { |
| 6809 SLOW_DCHECK(object->IsHeapNumber() || object->IsMutableHeapNumber()); | 6826 SLOW_DCHECK(object->IsHeapNumber() || object->IsMutableHeapNumber()); |
| 6810 return reinterpret_cast<HeapNumber*>(object); | 6827 return reinterpret_cast<HeapNumber*>(object); |
| 6811 } | 6828 } |
| 6812 | 6829 |
| 6813 | 6830 |
| 6814 const HeapNumber* HeapNumber::cast(const Object* object) { | 6831 const HeapNumber* HeapNumber::cast(const Object* object) { |
| (...skipping 1588 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8403 ACCESSORS(JSIteratorResult, value, Object, kValueOffset) | 8420 ACCESSORS(JSIteratorResult, value, Object, kValueOffset) |
| 8404 ACCESSORS(JSIteratorResult, done, Object, kDoneOffset) | 8421 ACCESSORS(JSIteratorResult, done, Object, kDoneOffset) |
| 8405 | 8422 |
| 8406 ACCESSORS(JSArrayIterator, object, Object, kIteratedObjectOffset) | 8423 ACCESSORS(JSArrayIterator, object, Object, kIteratedObjectOffset) |
| 8407 ACCESSORS(JSArrayIterator, index, Object, kNextIndexOffset) | 8424 ACCESSORS(JSArrayIterator, index, Object, kNextIndexOffset) |
| 8408 ACCESSORS(JSArrayIterator, object_map, Object, kIteratedObjectMapOffset) | 8425 ACCESSORS(JSArrayIterator, object_map, Object, kIteratedObjectMapOffset) |
| 8409 | 8426 |
| 8410 ACCESSORS(JSStringIterator, string, String, kStringOffset) | 8427 ACCESSORS(JSStringIterator, string, String, kStringOffset) |
| 8411 SMI_ACCESSORS(JSStringIterator, index, kNextIndexOffset) | 8428 SMI_ACCESSORS(JSStringIterator, index, kNextIndexOffset) |
| 8412 | 8429 |
| 8430 ACCESSORS(JSAsyncFromSyncIterator, sync_iterator, HeapObject, |
| 8431 kSyncIteratorOffset) |
| 8432 |
| 8413 #undef INT_ACCESSORS | 8433 #undef INT_ACCESSORS |
| 8414 #undef ACCESSORS | 8434 #undef ACCESSORS |
| 8415 #undef ACCESSORS_CHECKED | 8435 #undef ACCESSORS_CHECKED |
| 8416 #undef ACCESSORS_CHECKED2 | 8436 #undef ACCESSORS_CHECKED2 |
| 8417 #undef SMI_ACCESSORS | 8437 #undef SMI_ACCESSORS |
| 8418 #undef SYNCHRONIZED_SMI_ACCESSORS | 8438 #undef SYNCHRONIZED_SMI_ACCESSORS |
| 8419 #undef NOBARRIER_SMI_ACCESSORS | 8439 #undef NOBARRIER_SMI_ACCESSORS |
| 8420 #undef BOOL_GETTER | 8440 #undef BOOL_GETTER |
| 8421 #undef BOOL_ACCESSORS | 8441 #undef BOOL_ACCESSORS |
| 8422 #undef FIELD_ADDR | 8442 #undef FIELD_ADDR |
| (...skipping 30 matching lines...) Expand all Loading... |
| 8453 #undef WRITE_INT64_FIELD | 8473 #undef WRITE_INT64_FIELD |
| 8454 #undef READ_BYTE_FIELD | 8474 #undef READ_BYTE_FIELD |
| 8455 #undef WRITE_BYTE_FIELD | 8475 #undef WRITE_BYTE_FIELD |
| 8456 #undef NOBARRIER_READ_BYTE_FIELD | 8476 #undef NOBARRIER_READ_BYTE_FIELD |
| 8457 #undef NOBARRIER_WRITE_BYTE_FIELD | 8477 #undef NOBARRIER_WRITE_BYTE_FIELD |
| 8458 | 8478 |
| 8459 } // namespace internal | 8479 } // namespace internal |
| 8460 } // namespace v8 | 8480 } // namespace v8 |
| 8461 | 8481 |
| 8462 #endif // V8_OBJECTS_INL_H_ | 8482 #endif // V8_OBJECTS_INL_H_ |
| OLD | NEW |