Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(324)

Side by Side Diff: src/objects-inl.h

Issue 2900713004: [objects] Extract DebugInfo and BreakPointInfo to own file (Closed)
Patch Set: Remove undefs from objects-inl.h Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/objects-debug.cc ('k') | src/objects-printer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 } 60 }
61 61
62 62
63 int PropertyDetails::field_width_in_words() const { 63 int PropertyDetails::field_width_in_words() const {
64 DCHECK(location() == kField); 64 DCHECK(location() == kField);
65 if (!FLAG_unbox_double_fields) return 1; 65 if (!FLAG_unbox_double_fields) return 1;
66 if (kDoubleSize == kPointerSize) return 1; 66 if (kDoubleSize == kPointerSize) return 1;
67 return representation().IsDouble() ? kDoubleSize / kPointerSize : 1; 67 return representation().IsDouble() ? kDoubleSize / kPointerSize : 1;
68 } 68 }
69 69
70 #define INT_ACCESSORS(holder, name, offset) \
71 int holder::name() const { return READ_INT_FIELD(this, offset); } \
72 void holder::set_##name(int value) { WRITE_INT_FIELD(this, offset, value); }
73
74 #define ACCESSORS_CHECKED2(holder, name, type, offset, get_condition, \
75 set_condition) \
76 type* holder::name() const { \
77 DCHECK(get_condition); \
78 return type::cast(READ_FIELD(this, offset)); \
79 } \
80 void holder::set_##name(type* value, WriteBarrierMode mode) { \
81 DCHECK(set_condition); \
82 WRITE_FIELD(this, offset, value); \
83 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, offset, value, mode); \
84 }
85 #define ACCESSORS_CHECKED(holder, name, type, offset, condition) \
86 ACCESSORS_CHECKED2(holder, name, type, offset, condition, condition)
87
88 #define ACCESSORS(holder, name, type, offset) \
89 ACCESSORS_CHECKED(holder, name, type, offset, true)
90
91 // Getter that returns a Smi as an int and writes an int as a Smi.
92 #define SMI_ACCESSORS_CHECKED(holder, name, offset, condition) \
93 int holder::name() const { \
94 DCHECK(condition); \
95 Object* value = READ_FIELD(this, offset); \
96 return Smi::cast(value)->value(); \
97 } \
98 void holder::set_##name(int value) { \
99 DCHECK(condition); \
100 WRITE_FIELD(this, offset, Smi::FromInt(value)); \
101 }
102
103 #define SMI_ACCESSORS(holder, name, offset) \
104 SMI_ACCESSORS_CHECKED(holder, name, offset, true)
105
106 #define SYNCHRONIZED_SMI_ACCESSORS(holder, name, offset) \
107 int holder::synchronized_##name() const { \
108 Object* value = ACQUIRE_READ_FIELD(this, offset); \
109 return Smi::cast(value)->value(); \
110 } \
111 void holder::synchronized_set_##name(int value) { \
112 RELEASE_WRITE_FIELD(this, offset, Smi::FromInt(value)); \
113 }
114
115 #define NOBARRIER_SMI_ACCESSORS(holder, name, offset) \
116 int holder::nobarrier_##name() const { \
117 Object* value = NOBARRIER_READ_FIELD(this, offset); \
118 return Smi::cast(value)->value(); \
119 } \
120 void holder::nobarrier_set_##name(int value) { \
121 NOBARRIER_WRITE_FIELD(this, offset, Smi::FromInt(value)); \
122 }
123
124 #define BOOL_GETTER(holder, field, name, offset) \
125 bool holder::name() const { \
126 return BooleanBit::get(field(), offset); \
127 } \
128
129
130 #define BOOL_ACCESSORS(holder, field, name, offset) \
131 bool holder::name() const { \
132 return BooleanBit::get(field(), offset); \
133 } \
134 void holder::set_##name(bool value) { \
135 set_##field(BooleanBit::set(field(), offset, value)); \
136 }
137
138 #define TYPE_CHECKER(type, instancetype) \
139 bool HeapObject::Is##type() const { \
140 return map()->instance_type() == instancetype; \
141 }
142
143 TYPE_CHECKER(BreakPointInfo, TUPLE2_TYPE) 70 TYPE_CHECKER(BreakPointInfo, TUPLE2_TYPE)
144 TYPE_CHECKER(ByteArray, BYTE_ARRAY_TYPE) 71 TYPE_CHECKER(ByteArray, BYTE_ARRAY_TYPE)
145 TYPE_CHECKER(BytecodeArray, BYTECODE_ARRAY_TYPE) 72 TYPE_CHECKER(BytecodeArray, BYTECODE_ARRAY_TYPE)
146 TYPE_CHECKER(CallHandlerInfo, TUPLE2_TYPE) 73 TYPE_CHECKER(CallHandlerInfo, TUPLE2_TYPE)
147 TYPE_CHECKER(Cell, CELL_TYPE) 74 TYPE_CHECKER(Cell, CELL_TYPE)
148 TYPE_CHECKER(Code, CODE_TYPE) 75 TYPE_CHECKER(Code, CODE_TYPE)
149 TYPE_CHECKER(ConstantElementsPair, TUPLE2_TYPE) 76 TYPE_CHECKER(ConstantElementsPair, TUPLE2_TYPE)
150 TYPE_CHECKER(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE) 77 TYPE_CHECKER(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE)
151 TYPE_CHECKER(Foreign, FOREIGN_TYPE) 78 TYPE_CHECKER(Foreign, FOREIGN_TYPE)
152 TYPE_CHECKER(FreeSpace, FREE_SPACE_TYPE) 79 TYPE_CHECKER(FreeSpace, FREE_SPACE_TYPE)
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 522
596 bool Object::IsMinusZero() const { 523 bool Object::IsMinusZero() const {
597 return this->IsHeapNumber() && 524 return this->IsHeapNumber() &&
598 i::IsMinusZero(HeapNumber::cast(this)->value()); 525 i::IsMinusZero(HeapNumber::cast(this)->value());
599 } 526 }
600 527
601 // ------------------------------------ 528 // ------------------------------------
602 // Cast operations 529 // Cast operations
603 530
604 CAST_ACCESSOR(AbstractCode) 531 CAST_ACCESSOR(AbstractCode)
532 CAST_ACCESSOR(AccessCheckInfo)
533 CAST_ACCESSOR(AccessorInfo)
534 CAST_ACCESSOR(AccessorPair)
535 CAST_ACCESSOR(AliasedArgumentsEntry)
536 CAST_ACCESSOR(AllocationMemento)
537 CAST_ACCESSOR(AllocationSite)
605 CAST_ACCESSOR(ArrayList) 538 CAST_ACCESSOR(ArrayList)
539 CAST_ACCESSOR(AsyncGeneratorRequest)
606 CAST_ACCESSOR(BoilerplateDescription) 540 CAST_ACCESSOR(BoilerplateDescription)
607 CAST_ACCESSOR(BreakPointInfo)
608 CAST_ACCESSOR(ByteArray) 541 CAST_ACCESSOR(ByteArray)
609 CAST_ACCESSOR(BytecodeArray) 542 CAST_ACCESSOR(BytecodeArray)
610 CAST_ACCESSOR(CallHandlerInfo) 543 CAST_ACCESSOR(CallHandlerInfo)
611 CAST_ACCESSOR(Cell) 544 CAST_ACCESSOR(Cell)
612 CAST_ACCESSOR(Code) 545 CAST_ACCESSOR(Code)
613 CAST_ACCESSOR(ConsString) 546 CAST_ACCESSOR(ConsString)
614 CAST_ACCESSOR(ConstantElementsPair) 547 CAST_ACCESSOR(ConstantElementsPair)
548 CAST_ACCESSOR(ContextExtension)
615 CAST_ACCESSOR(DeoptimizationInputData) 549 CAST_ACCESSOR(DeoptimizationInputData)
616 CAST_ACCESSOR(DeoptimizationOutputData) 550 CAST_ACCESSOR(DeoptimizationOutputData)
617 CAST_ACCESSOR(DependentCode) 551 CAST_ACCESSOR(DependentCode)
618 CAST_ACCESSOR(DescriptorArray) 552 CAST_ACCESSOR(DescriptorArray)
619 CAST_ACCESSOR(ExternalOneByteString) 553 CAST_ACCESSOR(ExternalOneByteString)
620 CAST_ACCESSOR(ExternalString) 554 CAST_ACCESSOR(ExternalString)
621 CAST_ACCESSOR(ExternalTwoByteString) 555 CAST_ACCESSOR(ExternalTwoByteString)
622 CAST_ACCESSOR(FixedArray) 556 CAST_ACCESSOR(FixedArray)
623 CAST_ACCESSOR(FixedArrayBase) 557 CAST_ACCESSOR(FixedArrayBase)
624 CAST_ACCESSOR(FixedDoubleArray) 558 CAST_ACCESSOR(FixedDoubleArray)
625 CAST_ACCESSOR(FixedTypedArrayBase) 559 CAST_ACCESSOR(FixedTypedArrayBase)
626 CAST_ACCESSOR(Foreign) 560 CAST_ACCESSOR(Foreign)
561 CAST_ACCESSOR(FunctionTemplateInfo)
627 CAST_ACCESSOR(GlobalDictionary) 562 CAST_ACCESSOR(GlobalDictionary)
628 CAST_ACCESSOR(HandlerTable) 563 CAST_ACCESSOR(HandlerTable)
629 CAST_ACCESSOR(HeapObject) 564 CAST_ACCESSOR(HeapObject)
565 CAST_ACCESSOR(InterceptorInfo)
630 CAST_ACCESSOR(JSArgumentsObject); 566 CAST_ACCESSOR(JSArgumentsObject);
631 CAST_ACCESSOR(JSArray) 567 CAST_ACCESSOR(JSArray)
632 CAST_ACCESSOR(JSArrayBuffer) 568 CAST_ACCESSOR(JSArrayBuffer)
633 CAST_ACCESSOR(JSArrayBufferView) 569 CAST_ACCESSOR(JSArrayBufferView)
570 CAST_ACCESSOR(JSArrayIterator)
571 CAST_ACCESSOR(JSAsyncFromSyncIterator)
572 CAST_ACCESSOR(JSAsyncGeneratorObject)
634 CAST_ACCESSOR(JSBoundFunction) 573 CAST_ACCESSOR(JSBoundFunction)
635 CAST_ACCESSOR(JSDataView) 574 CAST_ACCESSOR(JSDataView)
636 CAST_ACCESSOR(JSDate) 575 CAST_ACCESSOR(JSDate)
637 CAST_ACCESSOR(JSFunction) 576 CAST_ACCESSOR(JSFunction)
638 CAST_ACCESSOR(JSGeneratorObject) 577 CAST_ACCESSOR(JSGeneratorObject)
639 CAST_ACCESSOR(JSAsyncGeneratorObject)
640 CAST_ACCESSOR(JSGlobalObject) 578 CAST_ACCESSOR(JSGlobalObject)
641 CAST_ACCESSOR(JSGlobalProxy) 579 CAST_ACCESSOR(JSGlobalProxy)
642 CAST_ACCESSOR(JSMap) 580 CAST_ACCESSOR(JSMap)
643 CAST_ACCESSOR(JSMapIterator) 581 CAST_ACCESSOR(JSMapIterator)
644 CAST_ACCESSOR(JSMessageObject) 582 CAST_ACCESSOR(JSMessageObject)
645 CAST_ACCESSOR(JSModuleNamespace) 583 CAST_ACCESSOR(JSModuleNamespace)
646 CAST_ACCESSOR(JSObject) 584 CAST_ACCESSOR(JSObject)
585 CAST_ACCESSOR(JSPromise)
586 CAST_ACCESSOR(JSPromiseCapability)
647 CAST_ACCESSOR(JSProxy) 587 CAST_ACCESSOR(JSProxy)
648 CAST_ACCESSOR(JSReceiver) 588 CAST_ACCESSOR(JSReceiver)
649 CAST_ACCESSOR(JSRegExp) 589 CAST_ACCESSOR(JSRegExp)
650 CAST_ACCESSOR(JSPromiseCapability)
651 CAST_ACCESSOR(JSPromise)
652 CAST_ACCESSOR(JSSet) 590 CAST_ACCESSOR(JSSet)
653 CAST_ACCESSOR(JSSetIterator) 591 CAST_ACCESSOR(JSSetIterator)
654 CAST_ACCESSOR(JSSloppyArgumentsObject) 592 CAST_ACCESSOR(JSSloppyArgumentsObject)
655 CAST_ACCESSOR(JSAsyncFromSyncIterator)
656 CAST_ACCESSOR(JSStringIterator) 593 CAST_ACCESSOR(JSStringIterator)
657 CAST_ACCESSOR(JSArrayIterator)
658 CAST_ACCESSOR(JSTypedArray) 594 CAST_ACCESSOR(JSTypedArray)
659 CAST_ACCESSOR(JSValue) 595 CAST_ACCESSOR(JSValue)
660 CAST_ACCESSOR(JSWeakCollection) 596 CAST_ACCESSOR(JSWeakCollection)
661 CAST_ACCESSOR(JSWeakMap) 597 CAST_ACCESSOR(JSWeakMap)
662 CAST_ACCESSOR(JSWeakSet) 598 CAST_ACCESSOR(JSWeakSet)
663 CAST_ACCESSOR(LayoutDescriptor) 599 CAST_ACCESSOR(LayoutDescriptor)
600 CAST_ACCESSOR(Module)
664 CAST_ACCESSOR(ModuleInfo) 601 CAST_ACCESSOR(ModuleInfo)
602 CAST_ACCESSOR(ModuleInfoEntry)
665 CAST_ACCESSOR(Name) 603 CAST_ACCESSOR(Name)
666 CAST_ACCESSOR(NameDictionary) 604 CAST_ACCESSOR(NameDictionary)
667 CAST_ACCESSOR(NormalizedMapCache) 605 CAST_ACCESSOR(NormalizedMapCache)
668 CAST_ACCESSOR(Object) 606 CAST_ACCESSOR(Object)
607 CAST_ACCESSOR(ObjectHashSet)
669 CAST_ACCESSOR(ObjectHashTable) 608 CAST_ACCESSOR(ObjectHashTable)
670 CAST_ACCESSOR(ObjectHashSet) 609 CAST_ACCESSOR(ObjectTemplateInfo)
671 CAST_ACCESSOR(Oddball) 610 CAST_ACCESSOR(Oddball)
672 CAST_ACCESSOR(OrderedHashMap) 611 CAST_ACCESSOR(OrderedHashMap)
673 CAST_ACCESSOR(OrderedHashSet) 612 CAST_ACCESSOR(OrderedHashSet)
613 CAST_ACCESSOR(PromiseReactionJobInfo)
614 CAST_ACCESSOR(PromiseResolveThenableJobInfo)
674 CAST_ACCESSOR(PropertyCell) 615 CAST_ACCESSOR(PropertyCell)
675 CAST_ACCESSOR(TemplateList) 616 CAST_ACCESSOR(PrototypeInfo)
676 CAST_ACCESSOR(RegExpMatchInfo) 617 CAST_ACCESSOR(RegExpMatchInfo)
677 CAST_ACCESSOR(ScopeInfo) 618 CAST_ACCESSOR(ScopeInfo)
619 CAST_ACCESSOR(Script)
678 CAST_ACCESSOR(SeededNumberDictionary) 620 CAST_ACCESSOR(SeededNumberDictionary)
679 CAST_ACCESSOR(SeqOneByteString) 621 CAST_ACCESSOR(SeqOneByteString)
680 CAST_ACCESSOR(SeqString) 622 CAST_ACCESSOR(SeqString)
681 CAST_ACCESSOR(SeqTwoByteString) 623 CAST_ACCESSOR(SeqTwoByteString)
682 CAST_ACCESSOR(SharedFunctionInfo) 624 CAST_ACCESSOR(SharedFunctionInfo)
683 CAST_ACCESSOR(SourcePositionTableWithFrameCache)
684 CAST_ACCESSOR(SlicedString) 625 CAST_ACCESSOR(SlicedString)
685 CAST_ACCESSOR(SloppyArgumentsElements) 626 CAST_ACCESSOR(SloppyArgumentsElements)
686 CAST_ACCESSOR(Smi) 627 CAST_ACCESSOR(Smi)
628 CAST_ACCESSOR(SourcePositionTableWithFrameCache)
629 CAST_ACCESSOR(StackFrameInfo)
687 CAST_ACCESSOR(String) 630 CAST_ACCESSOR(String)
688 CAST_ACCESSOR(StringSet) 631 CAST_ACCESSOR(StringSet)
689 CAST_ACCESSOR(StringTable) 632 CAST_ACCESSOR(StringTable)
690 CAST_ACCESSOR(Struct) 633 CAST_ACCESSOR(Struct)
691 CAST_ACCESSOR(Symbol) 634 CAST_ACCESSOR(Symbol)
692 CAST_ACCESSOR(TemplateInfo) 635 CAST_ACCESSOR(TemplateInfo)
636 CAST_ACCESSOR(TemplateList)
693 CAST_ACCESSOR(ThinString) 637 CAST_ACCESSOR(ThinString)
638 CAST_ACCESSOR(Tuple2)
639 CAST_ACCESSOR(Tuple3)
694 CAST_ACCESSOR(TypeFeedbackInfo) 640 CAST_ACCESSOR(TypeFeedbackInfo)
695 CAST_ACCESSOR(UnseededNumberDictionary) 641 CAST_ACCESSOR(UnseededNumberDictionary)
696 CAST_ACCESSOR(WeakCell) 642 CAST_ACCESSOR(WeakCell)
697 CAST_ACCESSOR(WeakFixedArray) 643 CAST_ACCESSOR(WeakFixedArray)
698 CAST_ACCESSOR(WeakHashTable) 644 CAST_ACCESSOR(WeakHashTable)
699 645
700 #define MAKE_STRUCT_CAST(NAME, Name, name) CAST_ACCESSOR(Name)
701 STRUCT_LIST(MAKE_STRUCT_CAST)
702 #undef MAKE_STRUCT_CAST
703
704 #undef CAST_ACCESSOR
705
706 bool Object::HasValidElements() { 646 bool Object::HasValidElements() {
707 // Dictionary is covered under FixedArray. 647 // Dictionary is covered under FixedArray.
708 return IsFixedArray() || IsFixedDoubleArray() || IsFixedTypedArrayBase(); 648 return IsFixedArray() || IsFixedDoubleArray() || IsFixedTypedArrayBase();
709 } 649 }
710 650
711 bool Object::KeyEquals(Object* second) { 651 bool Object::KeyEquals(Object* second) {
712 Object* first = this; 652 Object* first = this;
713 if (second->IsNumber()) { 653 if (second->IsNumber()) {
714 if (first->IsNumber()) return first->Number() == second->Number(); 654 if (first->IsNumber()) return first->Number() == second->Number();
715 Object* temp = first; 655 Object* temp = first;
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
1260 HeapObject* empty = isolate->heap()->empty_fixed_array(); 1200 HeapObject* empty = isolate->heap()->empty_fixed_array();
1261 while (prototype != null) { 1201 while (prototype != null) {
1262 Map* map = prototype->map(); 1202 Map* map = prototype->map();
1263 if (map->instance_type() <= LAST_CUSTOM_ELEMENTS_RECEIVER) return false; 1203 if (map->instance_type() <= LAST_CUSTOM_ELEMENTS_RECEIVER) return false;
1264 if (JSObject::cast(prototype)->elements() != empty) return false; 1204 if (JSObject::cast(prototype)->elements() != empty) return false;
1265 prototype = HeapObject::cast(map->prototype()); 1205 prototype = HeapObject::cast(map->prototype());
1266 } 1206 }
1267 return true; 1207 return true;
1268 } 1208 }
1269 1209
1270 #define FIELD_ADDR(p, offset) \
1271 (reinterpret_cast<byte*>(p) + offset - kHeapObjectTag)
1272
1273 #define FIELD_ADDR_CONST(p, offset) \
1274 (reinterpret_cast<const byte*>(p) + offset - kHeapObjectTag)
1275
1276 #define READ_FIELD(p, offset) \
1277 (*reinterpret_cast<Object* const*>(FIELD_ADDR_CONST(p, offset)))
1278
1279 #define ACQUIRE_READ_FIELD(p, offset) \
1280 reinterpret_cast<Object*>(base::Acquire_Load( \
1281 reinterpret_cast<const base::AtomicWord*>(FIELD_ADDR_CONST(p, offset))))
1282
1283 #define NOBARRIER_READ_FIELD(p, offset) \
1284 reinterpret_cast<Object*>(base::NoBarrier_Load( \
1285 reinterpret_cast<const base::AtomicWord*>(FIELD_ADDR_CONST(p, offset))))
1286
1287 #ifdef V8_CONCURRENT_MARKING
1288 #define WRITE_FIELD(p, offset, value) \
1289 base::NoBarrier_Store( \
1290 reinterpret_cast<base::AtomicWord*>(FIELD_ADDR(p, offset)), \
1291 reinterpret_cast<base::AtomicWord>(value));
1292 #else
1293 #define WRITE_FIELD(p, offset, value) \
1294 (*reinterpret_cast<Object**>(FIELD_ADDR(p, offset)) = value)
1295 #endif
1296
1297 #define RELEASE_WRITE_FIELD(p, offset, value) \
1298 base::Release_Store( \
1299 reinterpret_cast<base::AtomicWord*>(FIELD_ADDR(p, offset)), \
1300 reinterpret_cast<base::AtomicWord>(value));
1301
1302 #define NOBARRIER_WRITE_FIELD(p, offset, value) \
1303 base::NoBarrier_Store( \
1304 reinterpret_cast<base::AtomicWord*>(FIELD_ADDR(p, offset)), \
1305 reinterpret_cast<base::AtomicWord>(value));
1306
1307 #define WRITE_BARRIER(heap, object, offset, value) \
1308 heap->incremental_marking()->RecordWrite( \
1309 object, HeapObject::RawField(object, offset), value); \
1310 heap->RecordWrite(object, offset, value);
1311
1312 #define FIXED_ARRAY_ELEMENTS_WRITE_BARRIER(heap, array, start, length) \
1313 do { \
1314 heap->RecordFixedArrayElements(array, start, length); \
1315 heap->incremental_marking()->IterateBlackObject(array); \
1316 } while (false)
1317
1318 #define CONDITIONAL_WRITE_BARRIER(heap, object, offset, value, mode) \
1319 if (mode != SKIP_WRITE_BARRIER) { \
1320 if (mode == UPDATE_WRITE_BARRIER) { \
1321 heap->incremental_marking()->RecordWrite( \
1322 object, HeapObject::RawField(object, offset), value); \
1323 } \
1324 heap->RecordWrite(object, offset, value); \
1325 }
1326
1327 #define READ_DOUBLE_FIELD(p, offset) \
1328 ReadDoubleValue(FIELD_ADDR_CONST(p, offset))
1329
1330 #define WRITE_DOUBLE_FIELD(p, offset, value) \
1331 WriteDoubleValue(FIELD_ADDR(p, offset), value)
1332
1333 #define READ_INT_FIELD(p, offset) \
1334 (*reinterpret_cast<const int*>(FIELD_ADDR_CONST(p, offset)))
1335
1336 #define WRITE_INT_FIELD(p, offset, value) \
1337 (*reinterpret_cast<int*>(FIELD_ADDR(p, offset)) = value)
1338
1339 #define READ_INTPTR_FIELD(p, offset) \
1340 (*reinterpret_cast<const intptr_t*>(FIELD_ADDR_CONST(p, offset)))
1341
1342 #define WRITE_INTPTR_FIELD(p, offset, value) \
1343 (*reinterpret_cast<intptr_t*>(FIELD_ADDR(p, offset)) = value)
1344
1345 #define READ_UINT8_FIELD(p, offset) \
1346 (*reinterpret_cast<const uint8_t*>(FIELD_ADDR_CONST(p, offset)))
1347
1348 #define WRITE_UINT8_FIELD(p, offset, value) \
1349 (*reinterpret_cast<uint8_t*>(FIELD_ADDR(p, offset)) = value)
1350
1351 #define READ_INT8_FIELD(p, offset) \
1352 (*reinterpret_cast<const int8_t*>(FIELD_ADDR_CONST(p, offset)))
1353
1354 #define WRITE_INT8_FIELD(p, offset, value) \
1355 (*reinterpret_cast<int8_t*>(FIELD_ADDR(p, offset)) = value)
1356
1357 #define READ_UINT16_FIELD(p, offset) \
1358 (*reinterpret_cast<const uint16_t*>(FIELD_ADDR_CONST(p, offset)))
1359
1360 #define WRITE_UINT16_FIELD(p, offset, value) \
1361 (*reinterpret_cast<uint16_t*>(FIELD_ADDR(p, offset)) = value)
1362
1363 #define READ_INT16_FIELD(p, offset) \
1364 (*reinterpret_cast<const int16_t*>(FIELD_ADDR_CONST(p, offset)))
1365
1366 #define WRITE_INT16_FIELD(p, offset, value) \
1367 (*reinterpret_cast<int16_t*>(FIELD_ADDR(p, offset)) = value)
1368
1369 #define READ_UINT32_FIELD(p, offset) \
1370 (*reinterpret_cast<const uint32_t*>(FIELD_ADDR_CONST(p, offset)))
1371
1372 #define WRITE_UINT32_FIELD(p, offset, value) \
1373 (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset)) = value)
1374
1375 #define READ_INT32_FIELD(p, offset) \
1376 (*reinterpret_cast<const int32_t*>(FIELD_ADDR_CONST(p, offset)))
1377
1378 #define WRITE_INT32_FIELD(p, offset, value) \
1379 (*reinterpret_cast<int32_t*>(FIELD_ADDR(p, offset)) = value)
1380
1381 #define READ_FLOAT_FIELD(p, offset) \
1382 (*reinterpret_cast<const float*>(FIELD_ADDR_CONST(p, offset)))
1383
1384 #define WRITE_FLOAT_FIELD(p, offset, value) \
1385 (*reinterpret_cast<float*>(FIELD_ADDR(p, offset)) = value)
1386
1387 #define READ_UINT64_FIELD(p, offset) \
1388 (*reinterpret_cast<const uint64_t*>(FIELD_ADDR_CONST(p, offset)))
1389
1390 #define WRITE_UINT64_FIELD(p, offset, value) \
1391 (*reinterpret_cast<uint64_t*>(FIELD_ADDR(p, offset)) = value)
1392
1393 #define READ_INT64_FIELD(p, offset) \
1394 (*reinterpret_cast<const int64_t*>(FIELD_ADDR_CONST(p, offset)))
1395
1396 #define WRITE_INT64_FIELD(p, offset, value) \
1397 (*reinterpret_cast<int64_t*>(FIELD_ADDR(p, offset)) = value)
1398
1399 #define READ_BYTE_FIELD(p, offset) \
1400 (*reinterpret_cast<const byte*>(FIELD_ADDR_CONST(p, offset)))
1401
1402 #define NOBARRIER_READ_BYTE_FIELD(p, offset) \
1403 static_cast<byte>(base::NoBarrier_Load( \
1404 reinterpret_cast<base::Atomic8*>(FIELD_ADDR(p, offset))))
1405
1406 #define WRITE_BYTE_FIELD(p, offset, value) \
1407 (*reinterpret_cast<byte*>(FIELD_ADDR(p, offset)) = value)
1408
1409 #define NOBARRIER_WRITE_BYTE_FIELD(p, offset, value) \
1410 base::NoBarrier_Store( \
1411 reinterpret_cast<base::Atomic8*>(FIELD_ADDR(p, offset)), \
1412 static_cast<base::Atomic8>(value));
1413
1414 Object** HeapObject::RawField(HeapObject* obj, int byte_offset) { 1210 Object** HeapObject::RawField(HeapObject* obj, int byte_offset) {
1415 return reinterpret_cast<Object**>(FIELD_ADDR(obj, byte_offset)); 1211 return reinterpret_cast<Object**>(FIELD_ADDR(obj, byte_offset));
1416 } 1212 }
1417 1213
1418 1214
1419 MapWord MapWord::FromMap(const Map* map) { 1215 MapWord MapWord::FromMap(const Map* map) {
1420 return MapWord(reinterpret_cast<uintptr_t>(map)); 1216 return MapWord(reinterpret_cast<uintptr_t>(map));
1421 } 1217 }
1422 1218
1423 1219
(...skipping 4414 matching lines...) Expand 10 before | Expand all | Expand 10 after
5838 ScriptOriginOptions Script::origin_options() { 5634 ScriptOriginOptions Script::origin_options() {
5839 return ScriptOriginOptions((flags() & kOriginOptionsMask) >> 5635 return ScriptOriginOptions((flags() & kOriginOptionsMask) >>
5840 kOriginOptionsShift); 5636 kOriginOptionsShift);
5841 } 5637 }
5842 void Script::set_origin_options(ScriptOriginOptions origin_options) { 5638 void Script::set_origin_options(ScriptOriginOptions origin_options) {
5843 DCHECK(!(origin_options.Flags() & ~((1 << kOriginOptionsSize) - 1))); 5639 DCHECK(!(origin_options.Flags() & ~((1 << kOriginOptionsSize) - 1)));
5844 set_flags((flags() & ~kOriginOptionsMask) | 5640 set_flags((flags() & ~kOriginOptionsMask) |
5845 (origin_options.Flags() << kOriginOptionsShift)); 5641 (origin_options.Flags() << kOriginOptionsShift));
5846 } 5642 }
5847 5643
5848
5849 ACCESSORS(DebugInfo, shared, SharedFunctionInfo, kSharedFunctionInfoIndex)
5850 SMI_ACCESSORS(DebugInfo, debugger_hints, kDebuggerHintsIndex)
5851 ACCESSORS(DebugInfo, debug_bytecode_array, Object, kDebugBytecodeArrayIndex)
5852 ACCESSORS(DebugInfo, break_points, FixedArray, kBreakPointsStateIndex)
5853
5854 bool DebugInfo::HasDebugBytecodeArray() {
5855 return debug_bytecode_array()->IsBytecodeArray();
5856 }
5857
5858 bool DebugInfo::HasDebugCode() {
5859 Code* code = shared()->code();
5860 bool has = code->kind() == Code::FUNCTION;
5861 DCHECK(!has || code->has_debug_break_slots());
5862 return has;
5863 }
5864
5865 BytecodeArray* DebugInfo::OriginalBytecodeArray() {
5866 DCHECK(HasDebugBytecodeArray());
5867 return shared()->bytecode_array();
5868 }
5869
5870 BytecodeArray* DebugInfo::DebugBytecodeArray() {
5871 DCHECK(HasDebugBytecodeArray());
5872 return BytecodeArray::cast(debug_bytecode_array());
5873 }
5874
5875 Code* DebugInfo::DebugCode() {
5876 DCHECK(HasDebugCode());
5877 return shared()->code();
5878 }
5879
5880 SMI_ACCESSORS(BreakPointInfo, source_position, kSourcePositionIndex)
5881 ACCESSORS(BreakPointInfo, break_point_objects, Object, kBreakPointObjectsIndex)
5882
5883 SMI_ACCESSORS(StackFrameInfo, line_number, kLineNumberIndex) 5644 SMI_ACCESSORS(StackFrameInfo, line_number, kLineNumberIndex)
5884 SMI_ACCESSORS(StackFrameInfo, column_number, kColumnNumberIndex) 5645 SMI_ACCESSORS(StackFrameInfo, column_number, kColumnNumberIndex)
5885 SMI_ACCESSORS(StackFrameInfo, script_id, kScriptIdIndex) 5646 SMI_ACCESSORS(StackFrameInfo, script_id, kScriptIdIndex)
5886 ACCESSORS(StackFrameInfo, script_name, Object, kScriptNameIndex) 5647 ACCESSORS(StackFrameInfo, script_name, Object, kScriptNameIndex)
5887 ACCESSORS(StackFrameInfo, script_name_or_source_url, Object, 5648 ACCESSORS(StackFrameInfo, script_name_or_source_url, Object,
5888 kScriptNameOrSourceUrlIndex) 5649 kScriptNameOrSourceUrlIndex)
5889 ACCESSORS(StackFrameInfo, function_name, Object, kFunctionNameIndex) 5650 ACCESSORS(StackFrameInfo, function_name, Object, kFunctionNameIndex)
5890 SMI_ACCESSORS(StackFrameInfo, flag, kFlagIndex) 5651 SMI_ACCESSORS(StackFrameInfo, flag, kFlagIndex)
5891 BOOL_ACCESSORS(StackFrameInfo, flag, is_eval, kIsEvalBit) 5652 BOOL_ACCESSORS(StackFrameInfo, flag, is_eval, kIsEvalBit)
5892 BOOL_ACCESSORS(StackFrameInfo, flag, is_constructor, kIsConstructorBit) 5653 BOOL_ACCESSORS(StackFrameInfo, flag, is_constructor, kIsConstructorBit)
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
6210 return scope_info()->HasSimpleParameters(); 5971 return scope_info()->HasSimpleParameters();
6211 } 5972 }
6212 5973
6213 bool SharedFunctionInfo::HasDebugInfo() const { 5974 bool SharedFunctionInfo::HasDebugInfo() const {
6214 bool has_debug_info = !debug_info()->IsSmi(); 5975 bool has_debug_info = !debug_info()->IsSmi();
6215 DCHECK_EQ(debug_info()->IsStruct(), has_debug_info); 5976 DCHECK_EQ(debug_info()->IsStruct(), has_debug_info);
6216 DCHECK(!has_debug_info || HasDebugCode()); 5977 DCHECK(!has_debug_info || HasDebugCode());
6217 return has_debug_info; 5978 return has_debug_info;
6218 } 5979 }
6219 5980
6220 DebugInfo* SharedFunctionInfo::GetDebugInfo() const {
6221 DCHECK(HasDebugInfo());
6222 return DebugInfo::cast(debug_info());
6223 }
6224
6225 bool SharedFunctionInfo::HasDebugCode() const { 5981 bool SharedFunctionInfo::HasDebugCode() const {
6226 if (HasBaselineCode()) return code()->has_debug_break_slots(); 5982 if (HasBaselineCode()) return code()->has_debug_break_slots();
6227 return HasBytecodeArray(); 5983 return HasBytecodeArray();
6228 } 5984 }
6229 5985
6230 int SharedFunctionInfo::debugger_hints() const {
6231 if (HasDebugInfo()) return GetDebugInfo()->debugger_hints();
6232 return Smi::cast(debug_info())->value();
6233 }
6234
6235 void SharedFunctionInfo::set_debugger_hints(int value) {
6236 if (HasDebugInfo()) {
6237 GetDebugInfo()->set_debugger_hints(value);
6238 } else {
6239 set_debug_info(Smi::FromInt(value));
6240 }
6241 }
6242
6243 bool SharedFunctionInfo::IsApiFunction() { 5986 bool SharedFunctionInfo::IsApiFunction() {
6244 return function_data()->IsFunctionTemplateInfo(); 5987 return function_data()->IsFunctionTemplateInfo();
6245 } 5988 }
6246 5989
6247 5990
6248 FunctionTemplateInfo* SharedFunctionInfo::get_api_func_data() { 5991 FunctionTemplateInfo* SharedFunctionInfo::get_api_func_data() {
6249 DCHECK(IsApiFunction()); 5992 DCHECK(IsApiFunction());
6250 return FunctionTemplateInfo::cast(function_data()); 5993 return FunctionTemplateInfo::cast(function_data());
6251 } 5994 }
6252 5995
(...skipping 1962 matching lines...) Expand 10 before | Expand all | Expand 10 after
8215 ACCESSORS(JSArrayIterator, object, Object, kIteratedObjectOffset) 7958 ACCESSORS(JSArrayIterator, object, Object, kIteratedObjectOffset)
8216 ACCESSORS(JSArrayIterator, index, Object, kNextIndexOffset) 7959 ACCESSORS(JSArrayIterator, index, Object, kNextIndexOffset)
8217 ACCESSORS(JSArrayIterator, object_map, Object, kIteratedObjectMapOffset) 7960 ACCESSORS(JSArrayIterator, object_map, Object, kIteratedObjectMapOffset)
8218 7961
8219 ACCESSORS(JSAsyncFromSyncIterator, sync_iterator, JSReceiver, 7962 ACCESSORS(JSAsyncFromSyncIterator, sync_iterator, JSReceiver,
8220 kSyncIteratorOffset) 7963 kSyncIteratorOffset)
8221 7964
8222 ACCESSORS(JSStringIterator, string, String, kStringOffset) 7965 ACCESSORS(JSStringIterator, string, String, kStringOffset)
8223 SMI_ACCESSORS(JSStringIterator, index, kNextIndexOffset) 7966 SMI_ACCESSORS(JSStringIterator, index, kNextIndexOffset)
8224 7967
8225 #undef INT_ACCESSORS
8226 #undef ACCESSORS
8227 #undef ACCESSORS_CHECKED
8228 #undef ACCESSORS_CHECKED2
8229 #undef SMI_ACCESSORS
8230 #undef SYNCHRONIZED_SMI_ACCESSORS
8231 #undef NOBARRIER_SMI_ACCESSORS
8232 #undef BOOL_GETTER
8233 #undef BOOL_ACCESSORS
8234 #undef FIELD_ADDR
8235 #undef FIELD_ADDR_CONST
8236 #undef READ_FIELD
8237 #undef NOBARRIER_READ_FIELD
8238 #undef WRITE_FIELD
8239 #undef NOBARRIER_WRITE_FIELD
8240 #undef WRITE_BARRIER
8241 #undef CONDITIONAL_WRITE_BARRIER
8242 #undef READ_DOUBLE_FIELD
8243 #undef WRITE_DOUBLE_FIELD
8244 #undef READ_INT_FIELD
8245 #undef WRITE_INT_FIELD
8246 #undef READ_INTPTR_FIELD
8247 #undef WRITE_INTPTR_FIELD
8248 #undef READ_UINT8_FIELD
8249 #undef WRITE_UINT8_FIELD
8250 #undef READ_INT8_FIELD
8251 #undef WRITE_INT8_FIELD
8252 #undef READ_UINT16_FIELD
8253 #undef WRITE_UINT16_FIELD
8254 #undef READ_INT16_FIELD
8255 #undef WRITE_INT16_FIELD
8256 #undef READ_UINT32_FIELD
8257 #undef WRITE_UINT32_FIELD
8258 #undef READ_INT32_FIELD
8259 #undef WRITE_INT32_FIELD
8260 #undef READ_FLOAT_FIELD
8261 #undef WRITE_FLOAT_FIELD
8262 #undef READ_UINT64_FIELD
8263 #undef WRITE_UINT64_FIELD
8264 #undef READ_INT64_FIELD
8265 #undef WRITE_INT64_FIELD
8266 #undef READ_BYTE_FIELD
8267 #undef WRITE_BYTE_FIELD
8268 #undef NOBARRIER_READ_BYTE_FIELD
8269 #undef NOBARRIER_WRITE_BYTE_FIELD
8270
8271 } // namespace internal 7968 } // namespace internal
8272 } // namespace v8 7969 } // namespace v8
8273 7970
8274 #include "src/objects/object-macros-undef.h" 7971 #include "src/objects/object-macros-undef.h"
8275 7972
8276 #endif // V8_OBJECTS_INL_H_ 7973 #endif // V8_OBJECTS_INL_H_
OLDNEW
« no previous file with comments | « src/objects-debug.cc ('k') | src/objects-printer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698