| 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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 TYPE_CHECKER(JSPromise, JS_PROMISE_TYPE) | 99 TYPE_CHECKER(JSPromise, JS_PROMISE_TYPE) |
| 100 TYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE) | 100 TYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE) |
| 101 TYPE_CHECKER(JSSet, JS_SET_TYPE) | 101 TYPE_CHECKER(JSSet, JS_SET_TYPE) |
| 102 TYPE_CHECKER(JSSetIterator, JS_SET_ITERATOR_TYPE) | 102 TYPE_CHECKER(JSSetIterator, JS_SET_ITERATOR_TYPE) |
| 103 TYPE_CHECKER(JSAsyncFromSyncIterator, JS_ASYNC_FROM_SYNC_ITERATOR_TYPE) | 103 TYPE_CHECKER(JSAsyncFromSyncIterator, JS_ASYNC_FROM_SYNC_ITERATOR_TYPE) |
| 104 TYPE_CHECKER(JSStringIterator, JS_STRING_ITERATOR_TYPE) | 104 TYPE_CHECKER(JSStringIterator, JS_STRING_ITERATOR_TYPE) |
| 105 TYPE_CHECKER(JSTypedArray, JS_TYPED_ARRAY_TYPE) | 105 TYPE_CHECKER(JSTypedArray, JS_TYPED_ARRAY_TYPE) |
| 106 TYPE_CHECKER(JSValue, JS_VALUE_TYPE) | 106 TYPE_CHECKER(JSValue, JS_VALUE_TYPE) |
| 107 TYPE_CHECKER(JSWeakMap, JS_WEAK_MAP_TYPE) | 107 TYPE_CHECKER(JSWeakMap, JS_WEAK_MAP_TYPE) |
| 108 TYPE_CHECKER(JSWeakSet, JS_WEAK_SET_TYPE) | 108 TYPE_CHECKER(JSWeakSet, JS_WEAK_SET_TYPE) |
| 109 TYPE_CHECKER(WasmInstanceObject, WASM_INSTANCE_TYPE) |
| 110 TYPE_CHECKER(WasmMemoryObject, WASM_MEMORY_TYPE) |
| 111 TYPE_CHECKER(WasmModuleObject, WASM_MODULE_TYPE) |
| 112 TYPE_CHECKER(WasmTableObject, WASM_TABLE_TYPE) |
| 109 TYPE_CHECKER(Map, MAP_TYPE) | 113 TYPE_CHECKER(Map, MAP_TYPE) |
| 110 TYPE_CHECKER(MutableHeapNumber, MUTABLE_HEAP_NUMBER_TYPE) | 114 TYPE_CHECKER(MutableHeapNumber, MUTABLE_HEAP_NUMBER_TYPE) |
| 111 TYPE_CHECKER(Oddball, ODDBALL_TYPE) | 115 TYPE_CHECKER(Oddball, ODDBALL_TYPE) |
| 112 TYPE_CHECKER(PropertyCell, PROPERTY_CELL_TYPE) | 116 TYPE_CHECKER(PropertyCell, PROPERTY_CELL_TYPE) |
| 113 TYPE_CHECKER(SourcePositionTableWithFrameCache, TUPLE2_TYPE) | 117 TYPE_CHECKER(SourcePositionTableWithFrameCache, TUPLE2_TYPE) |
| 114 TYPE_CHECKER(TransitionArray, TRANSITION_ARRAY_TYPE) | 118 TYPE_CHECKER(TransitionArray, TRANSITION_ARRAY_TYPE) |
| 115 TYPE_CHECKER(TypeFeedbackInfo, TUPLE3_TYPE) | 119 TYPE_CHECKER(TypeFeedbackInfo, TUPLE3_TYPE) |
| 116 TYPE_CHECKER(WeakCell, WEAK_CELL_TYPE) | 120 TYPE_CHECKER(WeakCell, WEAK_CELL_TYPE) |
| 117 TYPE_CHECKER(WeakFixedArray, FIXED_ARRAY_TYPE) | 121 TYPE_CHECKER(WeakFixedArray, FIXED_ARRAY_TYPE) |
| 118 TYPE_CHECKER(SmallOrderedHashSet, SMALL_ORDERED_HASH_SET_TYPE) | 122 TYPE_CHECKER(SmallOrderedHashSet, SMALL_ORDERED_HASH_SET_TYPE) |
| (...skipping 1350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1469 } | 1473 } |
| 1470 | 1474 |
| 1471 | 1475 |
| 1472 void WeakCell::clear_next(Object* the_hole_value) { | 1476 void WeakCell::clear_next(Object* the_hole_value) { |
| 1473 DCHECK_EQ(GetHeap()->the_hole_value(), the_hole_value); | 1477 DCHECK_EQ(GetHeap()->the_hole_value(), the_hole_value); |
| 1474 set_next(the_hole_value, SKIP_WRITE_BARRIER); | 1478 set_next(the_hole_value, SKIP_WRITE_BARRIER); |
| 1475 } | 1479 } |
| 1476 | 1480 |
| 1477 bool WeakCell::next_cleared() { return next()->IsTheHole(GetIsolate()); } | 1481 bool WeakCell::next_cleared() { return next()->IsTheHole(GetIsolate()); } |
| 1478 | 1482 |
| 1479 int JSObject::GetHeaderSize() { return GetHeaderSize(map()->instance_type()); } | 1483 int JSObject::GetHeaderSize() { |
| 1480 | |
| 1481 | |
| 1482 int JSObject::GetHeaderSize(InstanceType type) { | |
| 1483 // Check for the most common kind of JavaScript object before | 1484 // Check for the most common kind of JavaScript object before |
| 1484 // falling into the generic switch. This speeds up the internal | 1485 // falling into the generic switch. This speeds up the internal |
| 1485 // field operations considerably on average. | 1486 // field operations considerably on average. |
| 1486 if (type == JS_OBJECT_TYPE) return JSObject::kHeaderSize; | 1487 InstanceType type = map()->instance_type(); |
| 1487 switch (type) { | 1488 return type == JS_OBJECT_TYPE ? JSObject::kHeaderSize : GetHeaderSize(type); |
| 1488 case JS_API_OBJECT_TYPE: | |
| 1489 case JS_SPECIAL_API_OBJECT_TYPE: | |
| 1490 return JSObject::kHeaderSize; | |
| 1491 case JS_GENERATOR_OBJECT_TYPE: | |
| 1492 return JSGeneratorObject::kSize; | |
| 1493 case JS_ASYNC_GENERATOR_OBJECT_TYPE: | |
| 1494 return JSAsyncGeneratorObject::kSize; | |
| 1495 case JS_GLOBAL_PROXY_TYPE: | |
| 1496 return JSGlobalProxy::kSize; | |
| 1497 case JS_GLOBAL_OBJECT_TYPE: | |
| 1498 return JSGlobalObject::kSize; | |
| 1499 case JS_BOUND_FUNCTION_TYPE: | |
| 1500 return JSBoundFunction::kSize; | |
| 1501 case JS_FUNCTION_TYPE: | |
| 1502 return JSFunction::kSize; | |
| 1503 case JS_VALUE_TYPE: | |
| 1504 return JSValue::kSize; | |
| 1505 case JS_DATE_TYPE: | |
| 1506 return JSDate::kSize; | |
| 1507 case JS_ARRAY_TYPE: | |
| 1508 return JSArray::kSize; | |
| 1509 case JS_ARRAY_BUFFER_TYPE: | |
| 1510 return JSArrayBuffer::kSize; | |
| 1511 case JS_TYPED_ARRAY_TYPE: | |
| 1512 return JSTypedArray::kSize; | |
| 1513 case JS_DATA_VIEW_TYPE: | |
| 1514 return JSDataView::kSize; | |
| 1515 case JS_SET_TYPE: | |
| 1516 return JSSet::kSize; | |
| 1517 case JS_MAP_TYPE: | |
| 1518 return JSMap::kSize; | |
| 1519 case JS_SET_ITERATOR_TYPE: | |
| 1520 return JSSetIterator::kSize; | |
| 1521 case JS_MAP_ITERATOR_TYPE: | |
| 1522 return JSMapIterator::kSize; | |
| 1523 case JS_WEAK_MAP_TYPE: | |
| 1524 return JSWeakMap::kSize; | |
| 1525 case JS_WEAK_SET_TYPE: | |
| 1526 return JSWeakSet::kSize; | |
| 1527 case JS_PROMISE_CAPABILITY_TYPE: | |
| 1528 return JSPromiseCapability::kSize; | |
| 1529 case JS_PROMISE_TYPE: | |
| 1530 return JSPromise::kSize; | |
| 1531 case JS_REGEXP_TYPE: | |
| 1532 return JSRegExp::kSize; | |
| 1533 case JS_CONTEXT_EXTENSION_OBJECT_TYPE: | |
| 1534 return JSObject::kHeaderSize; | |
| 1535 case JS_MESSAGE_OBJECT_TYPE: | |
| 1536 return JSMessageObject::kSize; | |
| 1537 case JS_ARGUMENTS_TYPE: | |
| 1538 return JSArgumentsObject::kHeaderSize; | |
| 1539 case JS_ERROR_TYPE: | |
| 1540 return JSObject::kHeaderSize; | |
| 1541 case JS_STRING_ITERATOR_TYPE: | |
| 1542 return JSStringIterator::kSize; | |
| 1543 case JS_MODULE_NAMESPACE_TYPE: | |
| 1544 return JSModuleNamespace::kHeaderSize; | |
| 1545 default: | |
| 1546 if (type >= FIRST_ARRAY_ITERATOR_TYPE && | |
| 1547 type <= LAST_ARRAY_ITERATOR_TYPE) { | |
| 1548 return JSArrayIterator::kSize; | |
| 1549 } | |
| 1550 UNREACHABLE(); | |
| 1551 } | |
| 1552 } | 1489 } |
| 1553 | 1490 |
| 1554 inline bool IsSpecialReceiverInstanceType(InstanceType instance_type) { | 1491 inline bool IsSpecialReceiverInstanceType(InstanceType instance_type) { |
| 1555 return instance_type <= LAST_SPECIAL_RECEIVER_TYPE; | 1492 return instance_type <= LAST_SPECIAL_RECEIVER_TYPE; |
| 1556 } | 1493 } |
| 1557 | 1494 |
| 1558 // static | 1495 // static |
| 1559 int JSObject::GetEmbedderFieldCount(const Map* map) { | 1496 int JSObject::GetEmbedderFieldCount(const Map* map) { |
| 1560 int instance_size = map->instance_size(); | 1497 int instance_size = map->instance_size(); |
| 1561 if (instance_size == kVariableSizeSentinel) return 0; | 1498 if (instance_size == kVariableSizeSentinel) return 0; |
| (...skipping 4739 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6301 | 6238 |
| 6302 ACCESSORS(JSStringIterator, string, String, kStringOffset) | 6239 ACCESSORS(JSStringIterator, string, String, kStringOffset) |
| 6303 SMI_ACCESSORS(JSStringIterator, index, kNextIndexOffset) | 6240 SMI_ACCESSORS(JSStringIterator, index, kNextIndexOffset) |
| 6304 | 6241 |
| 6305 } // namespace internal | 6242 } // namespace internal |
| 6306 } // namespace v8 | 6243 } // namespace v8 |
| 6307 | 6244 |
| 6308 #include "src/objects/object-macros-undef.h" | 6245 #include "src/objects/object-macros-undef.h" |
| 6309 | 6246 |
| 6310 #endif // V8_OBJECTS_INL_H_ | 6247 #endif // V8_OBJECTS_INL_H_ |
| OLD | NEW |