| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 #include <iomanip> | 5 #include <iomanip> |
| 6 #include <sstream> | 6 #include <sstream> |
| 7 | 7 |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 | 9 |
| 10 #include "src/accessors.h" | 10 #include "src/accessors.h" |
| 11 #include "src/allocation-site-scopes.h" | 11 #include "src/allocation-site-scopes.h" |
| 12 #include "src/api.h" | 12 #include "src/api.h" |
| 13 #include "src/arguments.h" | 13 #include "src/arguments.h" |
| 14 #include "src/base/bits.h" | 14 #include "src/base/bits.h" |
| 15 #include "src/base/utils/random-number-generator.h" | 15 #include "src/base/utils/random-number-generator.h" |
| 16 #include "src/bootstrapper.h" | 16 #include "src/bootstrapper.h" |
| 17 #include "src/code-stubs.h" | 17 #include "src/code-stubs.h" |
| 18 #include "src/codegen.h" | 18 #include "src/codegen.h" |
| 19 #include "src/compilation-dependencies.h" | 19 #include "src/compilation-dependencies.h" |
| 20 #include "src/compiler.h" | 20 #include "src/compiler.h" |
| 21 #include "src/cpu-profiler.h" | 21 #include "src/cpu-profiler.h" |
| 22 #include "src/date.h" | 22 #include "src/date.h" |
| 23 #include "src/debug/debug.h" | 23 #include "src/debug/debug.h" |
| 24 #include "src/deoptimizer.h" | 24 #include "src/deoptimizer.h" |
| 25 #include "src/elements.h" | 25 #include "src/elements.h" |
| 26 #include "src/execution.h" | 26 #include "src/execution.h" |
| 27 #include "src/field-index-inl.h" | 27 #include "src/field-index-inl.h" |
| 28 #include "src/field-index.h" | 28 #include "src/field-index.h" |
| 29 #include "src/full-codegen/full-codegen.h" | 29 #include "src/full-codegen/full-codegen.h" |
| 30 #include "src/heap/objects-visiting-inl.h" | |
| 31 #include "src/hydrogen.h" | 30 #include "src/hydrogen.h" |
| 32 #include "src/ic/ic.h" | 31 #include "src/ic/ic.h" |
| 33 #include "src/interpreter/bytecodes.h" | 32 #include "src/interpreter/bytecodes.h" |
| 34 #include "src/log.h" | 33 #include "src/log.h" |
| 35 #include "src/lookup.h" | 34 #include "src/lookup.h" |
| 36 #include "src/macro-assembler.h" | 35 #include "src/macro-assembler.h" |
| 37 #include "src/messages.h" | 36 #include "src/messages.h" |
| 38 #include "src/objects-inl.h" | 37 #include "src/objects-inl.h" |
| 39 #include "src/prototype.h" | 38 #include "src/prototype.h" |
| 40 #include "src/safepoint-table.h" | 39 #include "src/safepoint-table.h" |
| (...skipping 1418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1459 | 1458 |
| 1460 void HeapObject::Iterate(ObjectVisitor* v) { | 1459 void HeapObject::Iterate(ObjectVisitor* v) { |
| 1461 // Handle header | 1460 // Handle header |
| 1462 IteratePointer(v, kMapOffset); | 1461 IteratePointer(v, kMapOffset); |
| 1463 // Handle object body | 1462 // Handle object body |
| 1464 Map* m = map(); | 1463 Map* m = map(); |
| 1465 IterateBody(m->instance_type(), SizeFromMap(m), v); | 1464 IterateBody(m->instance_type(), SizeFromMap(m), v); |
| 1466 } | 1465 } |
| 1467 | 1466 |
| 1468 | 1467 |
| 1469 void HeapObject::IterateBody(InstanceType type, int object_size, | |
| 1470 ObjectVisitor* v) { | |
| 1471 // Avoiding <Type>::cast(this) because it accesses the map pointer field. | |
| 1472 // During GC, the map pointer field is encoded. | |
| 1473 if (type < FIRST_NONSTRING_TYPE) { | |
| 1474 switch (type & kStringRepresentationMask) { | |
| 1475 case kSeqStringTag: | |
| 1476 break; | |
| 1477 case kConsStringTag: | |
| 1478 ConsString::BodyDescriptor::IterateBody(this, v); | |
| 1479 break; | |
| 1480 case kSlicedStringTag: | |
| 1481 SlicedString::BodyDescriptor::IterateBody(this, v); | |
| 1482 break; | |
| 1483 case kExternalStringTag: | |
| 1484 if ((type & kStringEncodingMask) == kOneByteStringTag) { | |
| 1485 reinterpret_cast<ExternalOneByteString*>(this) | |
| 1486 ->ExternalOneByteStringIterateBody(v); | |
| 1487 } else { | |
| 1488 reinterpret_cast<ExternalTwoByteString*>(this)-> | |
| 1489 ExternalTwoByteStringIterateBody(v); | |
| 1490 } | |
| 1491 break; | |
| 1492 } | |
| 1493 return; | |
| 1494 } | |
| 1495 | |
| 1496 switch (type) { | |
| 1497 case FIXED_ARRAY_TYPE: | |
| 1498 FixedArray::BodyDescriptor::IterateBody(this, object_size, v); | |
| 1499 break; | |
| 1500 case FIXED_DOUBLE_ARRAY_TYPE: | |
| 1501 break; | |
| 1502 case JS_OBJECT_TYPE: | |
| 1503 case JS_CONTEXT_EXTENSION_OBJECT_TYPE: | |
| 1504 case JS_GENERATOR_OBJECT_TYPE: | |
| 1505 case JS_MODULE_TYPE: | |
| 1506 case JS_VALUE_TYPE: | |
| 1507 case JS_DATE_TYPE: | |
| 1508 case JS_ARRAY_TYPE: | |
| 1509 case JS_ARRAY_BUFFER_TYPE: | |
| 1510 case JS_TYPED_ARRAY_TYPE: | |
| 1511 case JS_DATA_VIEW_TYPE: | |
| 1512 case JS_SET_TYPE: | |
| 1513 case JS_MAP_TYPE: | |
| 1514 case JS_SET_ITERATOR_TYPE: | |
| 1515 case JS_MAP_ITERATOR_TYPE: | |
| 1516 case JS_WEAK_MAP_TYPE: | |
| 1517 case JS_WEAK_SET_TYPE: | |
| 1518 case JS_REGEXP_TYPE: | |
| 1519 case JS_GLOBAL_PROXY_TYPE: | |
| 1520 case JS_GLOBAL_OBJECT_TYPE: | |
| 1521 case JS_BUILTINS_OBJECT_TYPE: | |
| 1522 case JS_MESSAGE_OBJECT_TYPE: | |
| 1523 JSObject::BodyDescriptor::IterateBody(this, object_size, v); | |
| 1524 break; | |
| 1525 case JS_FUNCTION_TYPE: | |
| 1526 reinterpret_cast<JSFunction*>(this) | |
| 1527 ->JSFunctionIterateBody(object_size, v); | |
| 1528 break; | |
| 1529 case ODDBALL_TYPE: | |
| 1530 Oddball::BodyDescriptor::IterateBody(this, v); | |
| 1531 break; | |
| 1532 case JS_PROXY_TYPE: | |
| 1533 JSProxy::BodyDescriptor::IterateBody(this, v); | |
| 1534 break; | |
| 1535 case JS_FUNCTION_PROXY_TYPE: | |
| 1536 JSFunctionProxy::BodyDescriptor::IterateBody(this, v); | |
| 1537 break; | |
| 1538 case FOREIGN_TYPE: | |
| 1539 reinterpret_cast<Foreign*>(this)->ForeignIterateBody(v); | |
| 1540 break; | |
| 1541 case MAP_TYPE: | |
| 1542 Map::BodyDescriptor::IterateBody(this, v); | |
| 1543 break; | |
| 1544 case CODE_TYPE: | |
| 1545 reinterpret_cast<Code*>(this)->CodeIterateBody(v); | |
| 1546 break; | |
| 1547 case CELL_TYPE: | |
| 1548 Cell::BodyDescriptor::IterateBody(this, v); | |
| 1549 break; | |
| 1550 case PROPERTY_CELL_TYPE: | |
| 1551 PropertyCell::BodyDescriptor::IterateBody(this, v); | |
| 1552 break; | |
| 1553 case WEAK_CELL_TYPE: | |
| 1554 WeakCell::BodyDescriptor::IterateBody(this, v); | |
| 1555 break; | |
| 1556 case SYMBOL_TYPE: | |
| 1557 Symbol::BodyDescriptor::IterateBody(this, v); | |
| 1558 break; | |
| 1559 | |
| 1560 case HEAP_NUMBER_TYPE: | |
| 1561 case MUTABLE_HEAP_NUMBER_TYPE: | |
| 1562 case SIMD128_VALUE_TYPE: | |
| 1563 case FILLER_TYPE: | |
| 1564 case BYTE_ARRAY_TYPE: | |
| 1565 case BYTECODE_ARRAY_TYPE: | |
| 1566 case FREE_SPACE_TYPE: | |
| 1567 break; | |
| 1568 | |
| 1569 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ | |
| 1570 case FIXED_##TYPE##_ARRAY_TYPE: \ | |
| 1571 reinterpret_cast<FixedTypedArrayBase*>(this) \ | |
| 1572 ->FixedTypedArrayBaseIterateBody(v); \ | |
| 1573 break; | |
| 1574 | |
| 1575 | |
| 1576 TYPED_ARRAYS(TYPED_ARRAY_CASE) | |
| 1577 #undef TYPED_ARRAY_CASE | |
| 1578 | |
| 1579 case SHARED_FUNCTION_INFO_TYPE: { | |
| 1580 SharedFunctionInfo::BodyDescriptor::IterateBody(this, v); | |
| 1581 break; | |
| 1582 } | |
| 1583 | |
| 1584 #define MAKE_STRUCT_CASE(NAME, Name, name) \ | |
| 1585 case NAME##_TYPE: | |
| 1586 STRUCT_LIST(MAKE_STRUCT_CASE) | |
| 1587 #undef MAKE_STRUCT_CASE | |
| 1588 if (type == ALLOCATION_SITE_TYPE) { | |
| 1589 AllocationSite::BodyDescriptor::IterateBody(this, v); | |
| 1590 } else { | |
| 1591 StructBodyDescriptor::IterateBody(this, object_size, v); | |
| 1592 } | |
| 1593 break; | |
| 1594 default: | |
| 1595 PrintF("Unknown type: %d\n", type); | |
| 1596 UNREACHABLE(); | |
| 1597 } | |
| 1598 } | |
| 1599 | |
| 1600 | |
| 1601 bool HeapNumber::HeapNumberBooleanValue() { | 1468 bool HeapNumber::HeapNumberBooleanValue() { |
| 1602 return DoubleToBoolean(value()); | 1469 return DoubleToBoolean(value()); |
| 1603 } | 1470 } |
| 1604 | 1471 |
| 1605 | 1472 |
| 1606 void HeapNumber::HeapNumberPrint(std::ostream& os) { // NOLINT | 1473 void HeapNumber::HeapNumberPrint(std::ostream& os) { // NOLINT |
| 1607 os << value(); | 1474 os << value(); |
| 1608 } | 1475 } |
| 1609 | 1476 |
| 1610 | 1477 |
| (...skipping 14252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15863 if (cell->value() != *new_value) { | 15730 if (cell->value() != *new_value) { |
| 15864 cell->set_value(*new_value); | 15731 cell->set_value(*new_value); |
| 15865 Isolate* isolate = cell->GetIsolate(); | 15732 Isolate* isolate = cell->GetIsolate(); |
| 15866 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 15733 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
| 15867 isolate, DependentCode::kPropertyCellChangedGroup); | 15734 isolate, DependentCode::kPropertyCellChangedGroup); |
| 15868 } | 15735 } |
| 15869 } | 15736 } |
| 15870 | 15737 |
| 15871 } // namespace internal | 15738 } // namespace internal |
| 15872 } // namespace v8 | 15739 } // namespace v8 |
| OLD | NEW |