| OLD | NEW |
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 value_ = smi->value(); | 51 value_ = smi->value(); |
| 52 } | 52 } |
| 53 | 53 |
| 54 | 54 |
| 55 Smi* PropertyDetails::AsSmi() { | 55 Smi* PropertyDetails::AsSmi() { |
| 56 return Smi::FromInt(value_); | 56 return Smi::FromInt(value_); |
| 57 } | 57 } |
| 58 | 58 |
| 59 | 59 |
| 60 PropertyDetails PropertyDetails::AsDeleted() { | 60 PropertyDetails PropertyDetails::AsDeleted() { |
| 61 PropertyDetails d(DONT_ENUM, NORMAL); | 61 Smi* smi = Smi::FromInt(value_ | DeletedField::encode(1)); |
| 62 Smi* smi = Smi::FromInt(AsSmi()->value() | DeletedField::encode(1)); | |
| 63 return PropertyDetails(smi); | 62 return PropertyDetails(smi); |
| 64 } | 63 } |
| 65 | 64 |
| 66 | 65 |
| 67 #define CAST_ACCESSOR(type) \ | 66 #define CAST_ACCESSOR(type) \ |
| 68 type* type::cast(Object* object) { \ | 67 type* type::cast(Object* object) { \ |
| 69 ASSERT(object->Is##type()); \ | 68 ASSERT(object->Is##type()); \ |
| 70 return reinterpret_cast<type*>(object); \ | 69 return reinterpret_cast<type*>(object); \ |
| 71 } | 70 } |
| 72 | 71 |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 | 402 |
| 404 | 403 |
| 405 bool MaybeObject::IsRetryAfterGC() { | 404 bool MaybeObject::IsRetryAfterGC() { |
| 406 return HAS_FAILURE_TAG(this) | 405 return HAS_FAILURE_TAG(this) |
| 407 && Failure::cast(this)->type() == Failure::RETRY_AFTER_GC; | 406 && Failure::cast(this)->type() == Failure::RETRY_AFTER_GC; |
| 408 } | 407 } |
| 409 | 408 |
| 410 | 409 |
| 411 bool MaybeObject::IsOutOfMemory() { | 410 bool MaybeObject::IsOutOfMemory() { |
| 412 return HAS_FAILURE_TAG(this) | 411 return HAS_FAILURE_TAG(this) |
| 413 && Failure::cast(this)->IsOutOfMemoryException(); | 412 && Failure::cast(this)->IsOutOfMemoryException(); |
| 414 } | 413 } |
| 415 | 414 |
| 416 | 415 |
| 417 bool MaybeObject::IsException() { | 416 bool MaybeObject::IsException() { |
| 418 return this == Failure::Exception(); | 417 return this == Failure::Exception(); |
| 419 } | 418 } |
| 420 | 419 |
| 421 | 420 |
| 422 bool MaybeObject::IsTheHole() { | 421 bool MaybeObject::IsTheHole() { |
| 423 return this == Heap::the_hole_value(); | 422 return this == Heap::the_hole_value(); |
| 424 } | 423 } |
| 425 | 424 |
| 426 | 425 |
| 427 Failure* Failure::cast(MaybeObject* obj) { | 426 Failure* Failure::cast(MaybeObject* obj) { |
| 428 ASSERT(HAS_FAILURE_TAG(obj)); | 427 ASSERT(HAS_FAILURE_TAG(obj)); |
| 429 return reinterpret_cast<Failure*>(obj); | 428 return reinterpret_cast<Failure*>(obj); |
| 430 } | 429 } |
| 431 | 430 |
| 432 | 431 |
| 433 bool Object::IsJSObject() { | 432 bool Object::IsJSObject() { |
| 434 return IsHeapObject() | 433 return IsHeapObject() |
| 435 && HeapObject::cast(this)->map()->instance_type() >= FIRST_JS_OBJECT_TYPE; | 434 && HeapObject::cast(this)->map()->instance_type() >= FIRST_JS_OBJECT_TYPE; |
| 436 } | 435 } |
| 437 | 436 |
| 438 | 437 |
| 439 bool Object::IsJSContextExtensionObject() { | 438 bool Object::IsJSContextExtensionObject() { |
| 440 return IsHeapObject() | 439 return IsHeapObject() |
| 441 && (HeapObject::cast(this)->map()->instance_type() == | 440 && (HeapObject::cast(this)->map()->instance_type() == |
| 442 JS_CONTEXT_EXTENSION_OBJECT_TYPE); | 441 JS_CONTEXT_EXTENSION_OBJECT_TYPE); |
| 443 } | 442 } |
| 444 | 443 |
| 445 | 444 |
| 446 bool Object::IsMap() { | 445 bool Object::IsMap() { |
| 447 return Object::IsHeapObject() | 446 return Object::IsHeapObject() |
| 448 && HeapObject::cast(this)->map()->instance_type() == MAP_TYPE; | 447 && HeapObject::cast(this)->map()->instance_type() == MAP_TYPE; |
| 449 } | 448 } |
| 450 | 449 |
| 451 | 450 |
| 452 bool Object::IsFixedArray() { | 451 bool Object::IsFixedArray() { |
| 453 return Object::IsHeapObject() | 452 return Object::IsHeapObject() |
| 454 && HeapObject::cast(this)->map()->instance_type() == FIXED_ARRAY_TYPE; | 453 && HeapObject::cast(this)->map()->instance_type() == FIXED_ARRAY_TYPE; |
| 455 } | 454 } |
| 456 | 455 |
| 457 | 456 |
| 458 bool Object::IsDescriptorArray() { | 457 bool Object::IsDescriptorArray() { |
| 459 return IsFixedArray(); | 458 return IsFixedArray(); |
| 460 } | 459 } |
| 461 | 460 |
| 462 | 461 |
| 463 bool Object::IsDeoptimizationInputData() { | 462 bool Object::IsDeoptimizationInputData() { |
| 464 // Must be a fixed array. | 463 // Must be a fixed array. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 490 bool Object::IsContext() { | 489 bool Object::IsContext() { |
| 491 return Object::IsHeapObject() | 490 return Object::IsHeapObject() |
| 492 && (HeapObject::cast(this)->map() == Heap::context_map() || | 491 && (HeapObject::cast(this)->map() == Heap::context_map() || |
| 493 HeapObject::cast(this)->map() == Heap::catch_context_map() || | 492 HeapObject::cast(this)->map() == Heap::catch_context_map() || |
| 494 HeapObject::cast(this)->map() == Heap::global_context_map()); | 493 HeapObject::cast(this)->map() == Heap::global_context_map()); |
| 495 } | 494 } |
| 496 | 495 |
| 497 | 496 |
| 498 bool Object::IsCatchContext() { | 497 bool Object::IsCatchContext() { |
| 499 return Object::IsHeapObject() | 498 return Object::IsHeapObject() |
| 500 && HeapObject::cast(this)->map() == Heap::catch_context_map(); | 499 && HeapObject::cast(this)->map() == Heap::catch_context_map(); |
| 501 } | 500 } |
| 502 | 501 |
| 503 | 502 |
| 504 bool Object::IsGlobalContext() { | 503 bool Object::IsGlobalContext() { |
| 505 return Object::IsHeapObject() | 504 return Object::IsHeapObject() |
| 506 && HeapObject::cast(this)->map() == Heap::global_context_map(); | 505 && HeapObject::cast(this)->map() == Heap::global_context_map(); |
| 507 } | 506 } |
| 508 | 507 |
| 509 | 508 |
| 510 bool Object::IsJSFunction() { | 509 bool Object::IsJSFunction() { |
| 511 return Object::IsHeapObject() | 510 return Object::IsHeapObject() |
| 512 && HeapObject::cast(this)->map()->instance_type() == JS_FUNCTION_TYPE; | 511 && HeapObject::cast(this)->map()->instance_type() == JS_FUNCTION_TYPE; |
| 513 } | 512 } |
| 514 | 513 |
| 515 | 514 |
| 516 template <> inline bool Is<JSFunction>(Object* obj) { | 515 template <> inline bool Is<JSFunction>(Object* obj) { |
| 517 return obj->IsJSFunction(); | 516 return obj->IsJSFunction(); |
| 518 } | 517 } |
| 519 | 518 |
| 520 | 519 |
| 521 bool Object::IsCode() { | 520 bool Object::IsCode() { |
| 522 return Object::IsHeapObject() | 521 return Object::IsHeapObject() |
| 523 && HeapObject::cast(this)->map()->instance_type() == CODE_TYPE; | 522 && HeapObject::cast(this)->map()->instance_type() == CODE_TYPE; |
| 524 } | 523 } |
| 525 | 524 |
| 526 | 525 |
| 527 bool Object::IsOddball() { | 526 bool Object::IsOddball() { |
| 528 return Object::IsHeapObject() | 527 return Object::IsHeapObject() |
| 529 && HeapObject::cast(this)->map()->instance_type() == ODDBALL_TYPE; | 528 && HeapObject::cast(this)->map()->instance_type() == ODDBALL_TYPE; |
| 530 } | 529 } |
| 531 | 530 |
| 532 | 531 |
| 533 bool Object::IsJSGlobalPropertyCell() { | 532 bool Object::IsJSGlobalPropertyCell() { |
| 534 return Object::IsHeapObject() | 533 return Object::IsHeapObject() |
| 535 && HeapObject::cast(this)->map()->instance_type() | 534 && HeapObject::cast(this)->map()->instance_type() |
| 536 == JS_GLOBAL_PROPERTY_CELL_TYPE; | 535 == JS_GLOBAL_PROPERTY_CELL_TYPE; |
| 537 } | 536 } |
| 538 | 537 |
| 539 | 538 |
| 540 bool Object::IsSharedFunctionInfo() { | 539 bool Object::IsSharedFunctionInfo() { |
| 541 return Object::IsHeapObject() && | 540 return Object::IsHeapObject() && |
| 542 (HeapObject::cast(this)->map()->instance_type() == | 541 (HeapObject::cast(this)->map()->instance_type() == |
| 543 SHARED_FUNCTION_INFO_TYPE); | 542 SHARED_FUNCTION_INFO_TYPE); |
| 544 } | 543 } |
| 545 | 544 |
| 546 | 545 |
| 547 bool Object::IsJSValue() { | 546 bool Object::IsJSValue() { |
| 548 return Object::IsHeapObject() | 547 return Object::IsHeapObject() |
| 549 && HeapObject::cast(this)->map()->instance_type() == JS_VALUE_TYPE; | 548 && HeapObject::cast(this)->map()->instance_type() == JS_VALUE_TYPE; |
| 549 } |
| 550 |
| 551 |
| 552 bool Object::IsJSMessageObject() { |
| 553 return Object::IsHeapObject() |
| 554 && (HeapObject::cast(this)->map()->instance_type() == |
| 555 JS_MESSAGE_OBJECT_TYPE); |
| 550 } | 556 } |
| 551 | 557 |
| 552 | 558 |
| 553 bool Object::IsStringWrapper() { | 559 bool Object::IsStringWrapper() { |
| 554 return IsJSValue() && JSValue::cast(this)->value()->IsString(); | 560 return IsJSValue() && JSValue::cast(this)->value()->IsString(); |
| 555 } | 561 } |
| 556 | 562 |
| 557 | 563 |
| 558 bool Object::IsProxy() { | 564 bool Object::IsProxy() { |
| 559 return Object::IsHeapObject() | 565 return Object::IsHeapObject() |
| 560 && HeapObject::cast(this)->map()->instance_type() == PROXY_TYPE; | 566 && HeapObject::cast(this)->map()->instance_type() == PROXY_TYPE; |
| 561 } | 567 } |
| 562 | 568 |
| 563 | 569 |
| 564 bool Object::IsBoolean() { | 570 bool Object::IsBoolean() { |
| 565 return IsTrue() || IsFalse(); | 571 return IsTrue() || IsFalse(); |
| 566 } | 572 } |
| 567 | 573 |
| 568 | 574 |
| 569 bool Object::IsJSArray() { | 575 bool Object::IsJSArray() { |
| 570 return Object::IsHeapObject() | 576 return Object::IsHeapObject() |
| 571 && HeapObject::cast(this)->map()->instance_type() == JS_ARRAY_TYPE; | 577 && HeapObject::cast(this)->map()->instance_type() == JS_ARRAY_TYPE; |
| 572 } | 578 } |
| 573 | 579 |
| 574 | 580 |
| 575 bool Object::IsJSRegExp() { | 581 bool Object::IsJSRegExp() { |
| 576 return Object::IsHeapObject() | 582 return Object::IsHeapObject() |
| 577 && HeapObject::cast(this)->map()->instance_type() == JS_REGEXP_TYPE; | 583 && HeapObject::cast(this)->map()->instance_type() == JS_REGEXP_TYPE; |
| 578 } | 584 } |
| 579 | 585 |
| 580 | 586 |
| 581 template <> inline bool Is<JSArray>(Object* obj) { | 587 template <> inline bool Is<JSArray>(Object* obj) { |
| 582 return obj->IsJSArray(); | 588 return obj->IsJSArray(); |
| 583 } | 589 } |
| 584 | 590 |
| 585 | 591 |
| 586 bool Object::IsHashTable() { | 592 bool Object::IsHashTable() { |
| 587 return Object::IsHeapObject() | 593 return Object::IsHeapObject() |
| 588 && HeapObject::cast(this)->map() == Heap::hash_table_map(); | 594 && HeapObject::cast(this)->map() == Heap::hash_table_map(); |
| 589 } | 595 } |
| 590 | 596 |
| 591 | 597 |
| 592 bool Object::IsDictionary() { | 598 bool Object::IsDictionary() { |
| 593 return IsHashTable() && this != Heap::symbol_table(); | 599 return IsHashTable() && this != Heap::symbol_table(); |
| 594 } | 600 } |
| 595 | 601 |
| 596 | 602 |
| 597 bool Object::IsSymbolTable() { | 603 bool Object::IsSymbolTable() { |
| 598 return IsHashTable() && this == Heap::raw_unchecked_symbol_table(); | 604 return IsHashTable() && this == Heap::raw_unchecked_symbol_table(); |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 724 bool Object::IsTrue() { | 730 bool Object::IsTrue() { |
| 725 return this == Heap::true_value(); | 731 return this == Heap::true_value(); |
| 726 } | 732 } |
| 727 | 733 |
| 728 | 734 |
| 729 bool Object::IsFalse() { | 735 bool Object::IsFalse() { |
| 730 return this == Heap::false_value(); | 736 return this == Heap::false_value(); |
| 731 } | 737 } |
| 732 | 738 |
| 733 | 739 |
| 740 bool Object::IsArgumentsMarker() { |
| 741 return this == Heap::arguments_marker(); |
| 742 } |
| 743 |
| 744 |
| 734 double Object::Number() { | 745 double Object::Number() { |
| 735 ASSERT(IsNumber()); | 746 ASSERT(IsNumber()); |
| 736 return IsSmi() | 747 return IsSmi() |
| 737 ? static_cast<double>(reinterpret_cast<Smi*>(this)->value()) | 748 ? static_cast<double>(reinterpret_cast<Smi*>(this)->value()) |
| 738 : reinterpret_cast<HeapNumber*>(this)->value(); | 749 : reinterpret_cast<HeapNumber*>(this)->value(); |
| 739 } | 750 } |
| 740 | 751 |
| 741 | 752 |
| 742 | 753 |
| 743 MaybeObject* Object::ToSmi() { | 754 MaybeObject* Object::ToSmi() { |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1148 case JS_FUNCTION_TYPE: | 1159 case JS_FUNCTION_TYPE: |
| 1149 return JSFunction::kSize; | 1160 return JSFunction::kSize; |
| 1150 case JS_VALUE_TYPE: | 1161 case JS_VALUE_TYPE: |
| 1151 return JSValue::kSize; | 1162 return JSValue::kSize; |
| 1152 case JS_ARRAY_TYPE: | 1163 case JS_ARRAY_TYPE: |
| 1153 return JSValue::kSize; | 1164 return JSValue::kSize; |
| 1154 case JS_REGEXP_TYPE: | 1165 case JS_REGEXP_TYPE: |
| 1155 return JSValue::kSize; | 1166 return JSValue::kSize; |
| 1156 case JS_CONTEXT_EXTENSION_OBJECT_TYPE: | 1167 case JS_CONTEXT_EXTENSION_OBJECT_TYPE: |
| 1157 return JSObject::kHeaderSize; | 1168 return JSObject::kHeaderSize; |
| 1169 case JS_MESSAGE_OBJECT_TYPE: |
| 1170 return JSMessageObject::kSize; |
| 1158 default: | 1171 default: |
| 1159 UNREACHABLE(); | 1172 UNREACHABLE(); |
| 1160 return 0; | 1173 return 0; |
| 1161 } | 1174 } |
| 1162 } | 1175 } |
| 1163 | 1176 |
| 1164 | 1177 |
| 1165 int JSObject::GetInternalFieldCount() { | 1178 int JSObject::GetInternalFieldCount() { |
| 1166 ASSERT(1 << kPointerSizeLog2 == kPointerSize); | 1179 ASSERT(1 << kPointerSizeLog2 == kPointerSize); |
| 1167 // Make sure to adjust for the number of in-object properties. These | 1180 // Make sure to adjust for the number of in-object properties. These |
| (...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1840 } | 1853 } |
| 1841 | 1854 |
| 1842 | 1855 |
| 1843 void ExternalTwoByteString::set_resource( | 1856 void ExternalTwoByteString::set_resource( |
| 1844 ExternalTwoByteString::Resource* resource) { | 1857 ExternalTwoByteString::Resource* resource) { |
| 1845 *reinterpret_cast<Resource**>(FIELD_ADDR(this, kResourceOffset)) = resource; | 1858 *reinterpret_cast<Resource**>(FIELD_ADDR(this, kResourceOffset)) = resource; |
| 1846 } | 1859 } |
| 1847 | 1860 |
| 1848 | 1861 |
| 1849 void JSFunctionResultCache::MakeZeroSize() { | 1862 void JSFunctionResultCache::MakeZeroSize() { |
| 1850 set(kFingerIndex, Smi::FromInt(kEntriesIndex)); | 1863 set_finger_index(kEntriesIndex); |
| 1851 set(kCacheSizeIndex, Smi::FromInt(kEntriesIndex)); | 1864 set_size(kEntriesIndex); |
| 1852 } | 1865 } |
| 1853 | 1866 |
| 1854 | 1867 |
| 1855 void JSFunctionResultCache::Clear() { | 1868 void JSFunctionResultCache::Clear() { |
| 1856 int cache_size = Smi::cast(get(kCacheSizeIndex))->value(); | 1869 int cache_size = size(); |
| 1857 Object** entries_start = RawField(this, OffsetOfElementAt(kEntriesIndex)); | 1870 Object** entries_start = RawField(this, OffsetOfElementAt(kEntriesIndex)); |
| 1858 MemsetPointer(entries_start, | 1871 MemsetPointer(entries_start, |
| 1859 Heap::the_hole_value(), | 1872 Heap::the_hole_value(), |
| 1860 cache_size - kEntriesIndex); | 1873 cache_size - kEntriesIndex); |
| 1861 MakeZeroSize(); | 1874 MakeZeroSize(); |
| 1862 } | 1875 } |
| 1863 | 1876 |
| 1864 | 1877 |
| 1878 int JSFunctionResultCache::size() { |
| 1879 return Smi::cast(get(kCacheSizeIndex))->value(); |
| 1880 } |
| 1881 |
| 1882 |
| 1883 void JSFunctionResultCache::set_size(int size) { |
| 1884 set(kCacheSizeIndex, Smi::FromInt(size)); |
| 1885 } |
| 1886 |
| 1887 |
| 1888 int JSFunctionResultCache::finger_index() { |
| 1889 return Smi::cast(get(kFingerIndex))->value(); |
| 1890 } |
| 1891 |
| 1892 |
| 1893 void JSFunctionResultCache::set_finger_index(int finger_index) { |
| 1894 set(kFingerIndex, Smi::FromInt(finger_index)); |
| 1895 } |
| 1896 |
| 1897 |
| 1865 byte ByteArray::get(int index) { | 1898 byte ByteArray::get(int index) { |
| 1866 ASSERT(index >= 0 && index < this->length()); | 1899 ASSERT(index >= 0 && index < this->length()); |
| 1867 return READ_BYTE_FIELD(this, kHeaderSize + index * kCharSize); | 1900 return READ_BYTE_FIELD(this, kHeaderSize + index * kCharSize); |
| 1868 } | 1901 } |
| 1869 | 1902 |
| 1870 | 1903 |
| 1871 void ByteArray::set(int index, byte value) { | 1904 void ByteArray::set(int index, byte value) { |
| 1872 ASSERT(index >= 0 && index < this->length()); | 1905 ASSERT(index >= 0 && index < this->length()); |
| 1873 WRITE_BYTE_FIELD(this, kHeaderSize + index * kCharSize, value); | 1906 WRITE_BYTE_FIELD(this, kHeaderSize + index * kCharSize, value); |
| 1874 } | 1907 } |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2100 static_cast<byte>(value)); | 2133 static_cast<byte>(value)); |
| 2101 } | 2134 } |
| 2102 | 2135 |
| 2103 | 2136 |
| 2104 InstanceType Map::instance_type() { | 2137 InstanceType Map::instance_type() { |
| 2105 return static_cast<InstanceType>(READ_BYTE_FIELD(this, kInstanceTypeOffset)); | 2138 return static_cast<InstanceType>(READ_BYTE_FIELD(this, kInstanceTypeOffset)); |
| 2106 } | 2139 } |
| 2107 | 2140 |
| 2108 | 2141 |
| 2109 void Map::set_instance_type(InstanceType value) { | 2142 void Map::set_instance_type(InstanceType value) { |
| 2110 ASSERT(0 <= value && value < 256); | |
| 2111 WRITE_BYTE_FIELD(this, kInstanceTypeOffset, value); | 2143 WRITE_BYTE_FIELD(this, kInstanceTypeOffset, value); |
| 2112 } | 2144 } |
| 2113 | 2145 |
| 2114 | 2146 |
| 2115 int Map::unused_property_fields() { | 2147 int Map::unused_property_fields() { |
| 2116 return READ_BYTE_FIELD(this, kUnusedPropertyFieldsOffset); | 2148 return READ_BYTE_FIELD(this, kUnusedPropertyFieldsOffset); |
| 2117 } | 2149 } |
| 2118 | 2150 |
| 2119 | 2151 |
| 2120 void Map::set_unused_property_fields(int value) { | 2152 void Map::set_unused_property_fields(int value) { |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2259 // objects. This is used in the debugger to determine whether or not | 2291 // objects. This is used in the debugger to determine whether or not |
| 2260 // a call to code object has been replaced with a debug break call. | 2292 // a call to code object has been replaced with a debug break call. |
| 2261 ASSERT(is_inline_cache_stub() || | 2293 ASSERT(is_inline_cache_stub() || |
| 2262 result == UNINITIALIZED || | 2294 result == UNINITIALIZED || |
| 2263 result == DEBUG_BREAK || | 2295 result == DEBUG_BREAK || |
| 2264 result == DEBUG_PREPARE_STEP_IN); | 2296 result == DEBUG_PREPARE_STEP_IN); |
| 2265 return result; | 2297 return result; |
| 2266 } | 2298 } |
| 2267 | 2299 |
| 2268 | 2300 |
| 2301 Code::ExtraICState Code::extra_ic_state() { |
| 2302 ASSERT(is_inline_cache_stub()); |
| 2303 return ExtractExtraICStateFromFlags(flags()); |
| 2304 } |
| 2305 |
| 2306 |
| 2269 PropertyType Code::type() { | 2307 PropertyType Code::type() { |
| 2270 ASSERT(ic_state() == MONOMORPHIC); | 2308 ASSERT(ic_state() == MONOMORPHIC); |
| 2271 return ExtractTypeFromFlags(flags()); | 2309 return ExtractTypeFromFlags(flags()); |
| 2272 } | 2310 } |
| 2273 | 2311 |
| 2274 | 2312 |
| 2275 int Code::arguments_count() { | 2313 int Code::arguments_count() { |
| 2276 ASSERT(is_call_stub() || is_keyed_call_stub() || kind() == STUB); | 2314 ASSERT(is_call_stub() || is_keyed_call_stub() || kind() == STUB); |
| 2277 return ExtractArgumentsCountFromFlags(flags()); | 2315 return ExtractArgumentsCountFromFlags(flags()); |
| 2278 } | 2316 } |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2339 return READ_UINT32_FIELD(this, kStackSlotsOffset); | 2377 return READ_UINT32_FIELD(this, kStackSlotsOffset); |
| 2340 } | 2378 } |
| 2341 | 2379 |
| 2342 | 2380 |
| 2343 void Code::set_stack_slots(unsigned slots) { | 2381 void Code::set_stack_slots(unsigned slots) { |
| 2344 ASSERT(kind() == OPTIMIZED_FUNCTION); | 2382 ASSERT(kind() == OPTIMIZED_FUNCTION); |
| 2345 WRITE_UINT32_FIELD(this, kStackSlotsOffset, slots); | 2383 WRITE_UINT32_FIELD(this, kStackSlotsOffset, slots); |
| 2346 } | 2384 } |
| 2347 | 2385 |
| 2348 | 2386 |
| 2349 unsigned Code::safepoint_table_start() { | 2387 unsigned Code::safepoint_table_offset() { |
| 2350 ASSERT(kind() == OPTIMIZED_FUNCTION); | 2388 ASSERT(kind() == OPTIMIZED_FUNCTION); |
| 2351 return READ_UINT32_FIELD(this, kSafepointTableStartOffset); | 2389 return READ_UINT32_FIELD(this, kSafepointTableOffsetOffset); |
| 2352 } | 2390 } |
| 2353 | 2391 |
| 2354 | 2392 |
| 2355 void Code::set_safepoint_table_start(unsigned offset) { | 2393 void Code::set_safepoint_table_offset(unsigned offset) { |
| 2356 ASSERT(kind() == OPTIMIZED_FUNCTION); | 2394 ASSERT(kind() == OPTIMIZED_FUNCTION); |
| 2357 ASSERT(IsAligned(offset, static_cast<unsigned>(kIntSize))); | 2395 ASSERT(IsAligned(offset, static_cast<unsigned>(kIntSize))); |
| 2358 WRITE_UINT32_FIELD(this, kSafepointTableStartOffset, offset); | 2396 WRITE_UINT32_FIELD(this, kSafepointTableOffsetOffset, offset); |
| 2359 } | 2397 } |
| 2360 | 2398 |
| 2361 | 2399 |
| 2362 unsigned Code::stack_check_table_start() { | 2400 unsigned Code::stack_check_table_offset() { |
| 2363 ASSERT(kind() == FUNCTION); | 2401 ASSERT(kind() == FUNCTION); |
| 2364 return READ_UINT32_FIELD(this, kStackCheckTableStartOffset); | 2402 return READ_UINT32_FIELD(this, kStackCheckTableOffsetOffset); |
| 2365 } | 2403 } |
| 2366 | 2404 |
| 2367 | 2405 |
| 2368 void Code::set_stack_check_table_start(unsigned offset) { | 2406 void Code::set_stack_check_table_offset(unsigned offset) { |
| 2369 ASSERT(kind() == FUNCTION); | 2407 ASSERT(kind() == FUNCTION); |
| 2370 ASSERT(IsAligned(offset, static_cast<unsigned>(kIntSize))); | 2408 ASSERT(IsAligned(offset, static_cast<unsigned>(kIntSize))); |
| 2371 WRITE_UINT32_FIELD(this, kStackCheckTableStartOffset, offset); | 2409 WRITE_UINT32_FIELD(this, kStackCheckTableOffsetOffset, offset); |
| 2372 } | 2410 } |
| 2373 | 2411 |
| 2374 | 2412 |
| 2375 CheckType Code::check_type() { | 2413 CheckType Code::check_type() { |
| 2376 ASSERT(is_call_stub() || is_keyed_call_stub()); | 2414 ASSERT(is_call_stub() || is_keyed_call_stub()); |
| 2377 byte type = READ_BYTE_FIELD(this, kCheckTypeOffset); | 2415 byte type = READ_BYTE_FIELD(this, kCheckTypeOffset); |
| 2378 return static_cast<CheckType>(type); | 2416 return static_cast<CheckType>(type); |
| 2379 } | 2417 } |
| 2380 | 2418 |
| 2381 | 2419 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2435 | 2473 |
| 2436 bool Code::is_inline_cache_stub() { | 2474 bool Code::is_inline_cache_stub() { |
| 2437 Kind kind = this->kind(); | 2475 Kind kind = this->kind(); |
| 2438 return kind >= FIRST_IC_KIND && kind <= LAST_IC_KIND; | 2476 return kind >= FIRST_IC_KIND && kind <= LAST_IC_KIND; |
| 2439 } | 2477 } |
| 2440 | 2478 |
| 2441 | 2479 |
| 2442 Code::Flags Code::ComputeFlags(Kind kind, | 2480 Code::Flags Code::ComputeFlags(Kind kind, |
| 2443 InLoopFlag in_loop, | 2481 InLoopFlag in_loop, |
| 2444 InlineCacheState ic_state, | 2482 InlineCacheState ic_state, |
| 2483 ExtraICState extra_ic_state, |
| 2445 PropertyType type, | 2484 PropertyType type, |
| 2446 int argc, | 2485 int argc, |
| 2447 InlineCacheHolderFlag holder) { | 2486 InlineCacheHolderFlag holder) { |
| 2487 // Extra IC state is only allowed for monomorphic call IC stubs |
| 2488 // or for store IC stubs. |
| 2489 ASSERT(extra_ic_state == kNoExtraICState || |
| 2490 (kind == CALL_IC && (ic_state == MONOMORPHIC || |
| 2491 ic_state == MONOMORPHIC_PROTOTYPE_FAILURE)) || |
| 2492 (kind == STORE_IC)); |
| 2448 // Compute the bit mask. | 2493 // Compute the bit mask. |
| 2449 int bits = kind << kFlagsKindShift; | 2494 int bits = kind << kFlagsKindShift; |
| 2450 if (in_loop) bits |= kFlagsICInLoopMask; | 2495 if (in_loop) bits |= kFlagsICInLoopMask; |
| 2451 bits |= ic_state << kFlagsICStateShift; | 2496 bits |= ic_state << kFlagsICStateShift; |
| 2452 bits |= type << kFlagsTypeShift; | 2497 bits |= type << kFlagsTypeShift; |
| 2498 bits |= extra_ic_state << kFlagsExtraICStateShift; |
| 2453 bits |= argc << kFlagsArgumentsCountShift; | 2499 bits |= argc << kFlagsArgumentsCountShift; |
| 2454 if (holder == PROTOTYPE_MAP) bits |= kFlagsCacheInPrototypeMapMask; | 2500 if (holder == PROTOTYPE_MAP) bits |= kFlagsCacheInPrototypeMapMask; |
| 2455 // Cast to flags and validate result before returning it. | 2501 // Cast to flags and validate result before returning it. |
| 2456 Flags result = static_cast<Flags>(bits); | 2502 Flags result = static_cast<Flags>(bits); |
| 2457 ASSERT(ExtractKindFromFlags(result) == kind); | 2503 ASSERT(ExtractKindFromFlags(result) == kind); |
| 2458 ASSERT(ExtractICStateFromFlags(result) == ic_state); | 2504 ASSERT(ExtractICStateFromFlags(result) == ic_state); |
| 2459 ASSERT(ExtractICInLoopFromFlags(result) == in_loop); | 2505 ASSERT(ExtractICInLoopFromFlags(result) == in_loop); |
| 2460 ASSERT(ExtractTypeFromFlags(result) == type); | 2506 ASSERT(ExtractTypeFromFlags(result) == type); |
| 2507 ASSERT(ExtractExtraICStateFromFlags(result) == extra_ic_state); |
| 2461 ASSERT(ExtractArgumentsCountFromFlags(result) == argc); | 2508 ASSERT(ExtractArgumentsCountFromFlags(result) == argc); |
| 2462 return result; | 2509 return result; |
| 2463 } | 2510 } |
| 2464 | 2511 |
| 2465 | 2512 |
| 2466 Code::Flags Code::ComputeMonomorphicFlags(Kind kind, | 2513 Code::Flags Code::ComputeMonomorphicFlags(Kind kind, |
| 2467 PropertyType type, | 2514 PropertyType type, |
| 2515 ExtraICState extra_ic_state, |
| 2468 InlineCacheHolderFlag holder, | 2516 InlineCacheHolderFlag holder, |
| 2469 InLoopFlag in_loop, | 2517 InLoopFlag in_loop, |
| 2470 int argc) { | 2518 int argc) { |
| 2471 return ComputeFlags(kind, in_loop, MONOMORPHIC, type, argc, holder); | 2519 return ComputeFlags( |
| 2520 kind, in_loop, MONOMORPHIC, extra_ic_state, type, argc, holder); |
| 2472 } | 2521 } |
| 2473 | 2522 |
| 2474 | 2523 |
| 2475 Code::Kind Code::ExtractKindFromFlags(Flags flags) { | 2524 Code::Kind Code::ExtractKindFromFlags(Flags flags) { |
| 2476 int bits = (flags & kFlagsKindMask) >> kFlagsKindShift; | 2525 int bits = (flags & kFlagsKindMask) >> kFlagsKindShift; |
| 2477 return static_cast<Kind>(bits); | 2526 return static_cast<Kind>(bits); |
| 2478 } | 2527 } |
| 2479 | 2528 |
| 2480 | 2529 |
| 2481 InlineCacheState Code::ExtractICStateFromFlags(Flags flags) { | 2530 InlineCacheState Code::ExtractICStateFromFlags(Flags flags) { |
| 2482 int bits = (flags & kFlagsICStateMask) >> kFlagsICStateShift; | 2531 int bits = (flags & kFlagsICStateMask) >> kFlagsICStateShift; |
| 2483 return static_cast<InlineCacheState>(bits); | 2532 return static_cast<InlineCacheState>(bits); |
| 2484 } | 2533 } |
| 2485 | 2534 |
| 2486 | 2535 |
| 2536 Code::ExtraICState Code::ExtractExtraICStateFromFlags(Flags flags) { |
| 2537 int bits = (flags & kFlagsExtraICStateMask) >> kFlagsExtraICStateShift; |
| 2538 return static_cast<ExtraICState>(bits); |
| 2539 } |
| 2540 |
| 2541 |
| 2487 InLoopFlag Code::ExtractICInLoopFromFlags(Flags flags) { | 2542 InLoopFlag Code::ExtractICInLoopFromFlags(Flags flags) { |
| 2488 int bits = (flags & kFlagsICInLoopMask); | 2543 int bits = (flags & kFlagsICInLoopMask); |
| 2489 return bits != 0 ? IN_LOOP : NOT_IN_LOOP; | 2544 return bits != 0 ? IN_LOOP : NOT_IN_LOOP; |
| 2490 } | 2545 } |
| 2491 | 2546 |
| 2492 | 2547 |
| 2493 PropertyType Code::ExtractTypeFromFlags(Flags flags) { | 2548 PropertyType Code::ExtractTypeFromFlags(Flags flags) { |
| 2494 int bits = (flags & kFlagsTypeMask) >> kFlagsTypeShift; | 2549 int bits = (flags & kFlagsTypeMask) >> kFlagsTypeShift; |
| 2495 return static_cast<PropertyType>(bits); | 2550 return static_cast<PropertyType>(bits); |
| 2496 } | 2551 } |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2561 { MaybeObject* maybe_obj = CopyDropTransitions(); | 2616 { MaybeObject* maybe_obj = CopyDropTransitions(); |
| 2562 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 2617 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
| 2563 } | 2618 } |
| 2564 Map* new_map = Map::cast(obj); | 2619 Map* new_map = Map::cast(obj); |
| 2565 new_map->set_has_fast_elements(false); | 2620 new_map->set_has_fast_elements(false); |
| 2566 Counters::map_fast_to_slow_elements.Increment(); | 2621 Counters::map_fast_to_slow_elements.Increment(); |
| 2567 return new_map; | 2622 return new_map; |
| 2568 } | 2623 } |
| 2569 | 2624 |
| 2570 | 2625 |
| 2626 MaybeObject* Map::GetPixelArrayElementsMap() { |
| 2627 if (has_pixel_array_elements()) return this; |
| 2628 // TODO(danno): Special case empty object map (or most common case) |
| 2629 // to return a pre-canned pixel array map. |
| 2630 Object* obj; |
| 2631 { MaybeObject* maybe_obj = CopyDropTransitions(); |
| 2632 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
| 2633 } |
| 2634 Map* new_map = Map::cast(obj); |
| 2635 new_map->set_has_fast_elements(false); |
| 2636 new_map->set_has_pixel_array_elements(true); |
| 2637 Counters::map_to_pixel_array_elements.Increment(); |
| 2638 return new_map; |
| 2639 } |
| 2640 |
| 2641 |
| 2571 ACCESSORS(Map, instance_descriptors, DescriptorArray, | 2642 ACCESSORS(Map, instance_descriptors, DescriptorArray, |
| 2572 kInstanceDescriptorsOffset) | 2643 kInstanceDescriptorsOffset) |
| 2573 ACCESSORS(Map, code_cache, Object, kCodeCacheOffset) | 2644 ACCESSORS(Map, code_cache, Object, kCodeCacheOffset) |
| 2574 ACCESSORS(Map, constructor, Object, kConstructorOffset) | 2645 ACCESSORS(Map, constructor, Object, kConstructorOffset) |
| 2575 | 2646 |
| 2576 ACCESSORS(JSFunction, shared, SharedFunctionInfo, kSharedFunctionInfoOffset) | 2647 ACCESSORS(JSFunction, shared, SharedFunctionInfo, kSharedFunctionInfoOffset) |
| 2577 ACCESSORS(JSFunction, literals, FixedArray, kLiteralsOffset) | 2648 ACCESSORS(JSFunction, literals, FixedArray, kLiteralsOffset) |
| 2578 ACCESSORS(JSFunction, next_function_link, Object, kNextFunctionLinkOffset) | 2649 ACCESSORS(JSFunction, next_function_link, Object, kNextFunctionLinkOffset) |
| 2579 | 2650 |
| 2580 ACCESSORS(GlobalObject, builtins, JSBuiltinsObject, kBuiltinsOffset) | 2651 ACCESSORS(GlobalObject, builtins, JSBuiltinsObject, kBuiltinsOffset) |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2807 kOptimizationDisabled, | 2878 kOptimizationDisabled, |
| 2808 disable)); | 2879 disable)); |
| 2809 // If disabling optimizations we reflect that in the code object so | 2880 // If disabling optimizations we reflect that in the code object so |
| 2810 // it will not be counted as optimizable code. | 2881 // it will not be counted as optimizable code. |
| 2811 if ((code()->kind() == Code::FUNCTION) && disable) { | 2882 if ((code()->kind() == Code::FUNCTION) && disable) { |
| 2812 code()->set_optimizable(false); | 2883 code()->set_optimizable(false); |
| 2813 } | 2884 } |
| 2814 } | 2885 } |
| 2815 | 2886 |
| 2816 | 2887 |
| 2888 bool SharedFunctionInfo::strict_mode() { |
| 2889 return BooleanBit::get(compiler_hints(), kStrictModeFunction); |
| 2890 } |
| 2891 |
| 2892 |
| 2893 void SharedFunctionInfo::set_strict_mode(bool value) { |
| 2894 set_compiler_hints(BooleanBit::set(compiler_hints(), |
| 2895 kStrictModeFunction, |
| 2896 value)); |
| 2897 } |
| 2898 |
| 2899 |
| 2817 ACCESSORS(CodeCache, default_cache, FixedArray, kDefaultCacheOffset) | 2900 ACCESSORS(CodeCache, default_cache, FixedArray, kDefaultCacheOffset) |
| 2818 ACCESSORS(CodeCache, normal_type_cache, Object, kNormalTypeCacheOffset) | 2901 ACCESSORS(CodeCache, normal_type_cache, Object, kNormalTypeCacheOffset) |
| 2819 | 2902 |
| 2820 bool Script::HasValidSource() { | 2903 bool Script::HasValidSource() { |
| 2821 Object* src = this->source(); | 2904 Object* src = this->source(); |
| 2822 if (!src->IsString()) return true; | 2905 if (!src->IsString()) return true; |
| 2823 String* src_str = String::cast(src); | 2906 String* src_str = String::cast(src); |
| 2824 if (!StringShape(src_str).IsExternal()) return true; | 2907 if (!StringShape(src_str).IsExternal()) return true; |
| 2825 if (src_str->IsAsciiRepresentation()) { | 2908 if (src_str->IsAsciiRepresentation()) { |
| 2826 return ExternalAsciiString::cast(src)->resource() != NULL; | 2909 return ExternalAsciiString::cast(src)->resource() != NULL; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2852 return Code::cast(READ_FIELD(this, kCodeOffset)); | 2935 return Code::cast(READ_FIELD(this, kCodeOffset)); |
| 2853 } | 2936 } |
| 2854 | 2937 |
| 2855 | 2938 |
| 2856 Code* SharedFunctionInfo::unchecked_code() { | 2939 Code* SharedFunctionInfo::unchecked_code() { |
| 2857 return reinterpret_cast<Code*>(READ_FIELD(this, kCodeOffset)); | 2940 return reinterpret_cast<Code*>(READ_FIELD(this, kCodeOffset)); |
| 2858 } | 2941 } |
| 2859 | 2942 |
| 2860 | 2943 |
| 2861 void SharedFunctionInfo::set_code(Code* value, WriteBarrierMode mode) { | 2944 void SharedFunctionInfo::set_code(Code* value, WriteBarrierMode mode) { |
| 2862 // If optimization has been disabled for the shared function info, | |
| 2863 // reflect that in the code object so it will not be counted as | |
| 2864 // optimizable code. | |
| 2865 ASSERT(value->kind() != Code::FUNCTION || | |
| 2866 !value->optimizable() || | |
| 2867 this->code() == Builtins::builtin(Builtins::Illegal) || | |
| 2868 this->allows_lazy_compilation()); | |
| 2869 WRITE_FIELD(this, kCodeOffset, value); | 2945 WRITE_FIELD(this, kCodeOffset, value); |
| 2870 CONDITIONAL_WRITE_BARRIER(this, kCodeOffset, mode); | 2946 CONDITIONAL_WRITE_BARRIER(this, kCodeOffset, mode); |
| 2871 } | 2947 } |
| 2872 | 2948 |
| 2873 | 2949 |
| 2874 SerializedScopeInfo* SharedFunctionInfo::scope_info() { | 2950 SerializedScopeInfo* SharedFunctionInfo::scope_info() { |
| 2875 return reinterpret_cast<SerializedScopeInfo*>( | 2951 return reinterpret_cast<SerializedScopeInfo*>( |
| 2876 READ_FIELD(this, kScopeInfoOffset)); | 2952 READ_FIELD(this, kScopeInfoOffset)); |
| 2877 } | 2953 } |
| 2878 | 2954 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 2908 ASSERT(IsApiFunction()); | 2984 ASSERT(IsApiFunction()); |
| 2909 return FunctionTemplateInfo::cast(function_data()); | 2985 return FunctionTemplateInfo::cast(function_data()); |
| 2910 } | 2986 } |
| 2911 | 2987 |
| 2912 | 2988 |
| 2913 bool SharedFunctionInfo::HasBuiltinFunctionId() { | 2989 bool SharedFunctionInfo::HasBuiltinFunctionId() { |
| 2914 return function_data()->IsSmi(); | 2990 return function_data()->IsSmi(); |
| 2915 } | 2991 } |
| 2916 | 2992 |
| 2917 | 2993 |
| 2918 bool SharedFunctionInfo::IsBuiltinMathFunction() { | |
| 2919 return HasBuiltinFunctionId() && | |
| 2920 builtin_function_id() >= kFirstMathFunctionId; | |
| 2921 } | |
| 2922 | |
| 2923 | |
| 2924 BuiltinFunctionId SharedFunctionInfo::builtin_function_id() { | 2994 BuiltinFunctionId SharedFunctionInfo::builtin_function_id() { |
| 2925 ASSERT(HasBuiltinFunctionId()); | 2995 ASSERT(HasBuiltinFunctionId()); |
| 2926 return static_cast<BuiltinFunctionId>(Smi::cast(function_data())->value()); | 2996 return static_cast<BuiltinFunctionId>(Smi::cast(function_data())->value()); |
| 2927 } | 2997 } |
| 2928 | 2998 |
| 2929 | 2999 |
| 2930 int SharedFunctionInfo::code_age() { | 3000 int SharedFunctionInfo::code_age() { |
| 2931 return (compiler_hints() >> kCodeAgeShift) & kCodeAgeMask; | 3001 return (compiler_hints() >> kCodeAgeShift) & kCodeAgeMask; |
| 2932 } | 3002 } |
| 2933 | 3003 |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3078 return code() != Builtins::builtin(Builtins::LazyCompile); | 3148 return code() != Builtins::builtin(Builtins::LazyCompile); |
| 3079 } | 3149 } |
| 3080 | 3150 |
| 3081 | 3151 |
| 3082 int JSFunction::NumberOfLiterals() { | 3152 int JSFunction::NumberOfLiterals() { |
| 3083 return literals()->length(); | 3153 return literals()->length(); |
| 3084 } | 3154 } |
| 3085 | 3155 |
| 3086 | 3156 |
| 3087 Object* JSBuiltinsObject::javascript_builtin(Builtins::JavaScript id) { | 3157 Object* JSBuiltinsObject::javascript_builtin(Builtins::JavaScript id) { |
| 3088 ASSERT(0 <= id && id < kJSBuiltinsCount); | 3158 ASSERT(id < kJSBuiltinsCount); // id is unsigned. |
| 3089 return READ_FIELD(this, OffsetOfFunctionWithId(id)); | 3159 return READ_FIELD(this, OffsetOfFunctionWithId(id)); |
| 3090 } | 3160 } |
| 3091 | 3161 |
| 3092 | 3162 |
| 3093 void JSBuiltinsObject::set_javascript_builtin(Builtins::JavaScript id, | 3163 void JSBuiltinsObject::set_javascript_builtin(Builtins::JavaScript id, |
| 3094 Object* value) { | 3164 Object* value) { |
| 3095 ASSERT(0 <= id && id < kJSBuiltinsCount); | 3165 ASSERT(id < kJSBuiltinsCount); // id is unsigned. |
| 3096 WRITE_FIELD(this, OffsetOfFunctionWithId(id), value); | 3166 WRITE_FIELD(this, OffsetOfFunctionWithId(id), value); |
| 3097 WRITE_BARRIER(this, OffsetOfFunctionWithId(id)); | 3167 WRITE_BARRIER(this, OffsetOfFunctionWithId(id)); |
| 3098 } | 3168 } |
| 3099 | 3169 |
| 3100 | 3170 |
| 3101 Code* JSBuiltinsObject::javascript_builtin_code(Builtins::JavaScript id) { | 3171 Code* JSBuiltinsObject::javascript_builtin_code(Builtins::JavaScript id) { |
| 3102 ASSERT(0 <= id && id < kJSBuiltinsCount); | 3172 ASSERT(id < kJSBuiltinsCount); // id is unsigned. |
| 3103 return Code::cast(READ_FIELD(this, OffsetOfCodeWithId(id))); | 3173 return Code::cast(READ_FIELD(this, OffsetOfCodeWithId(id))); |
| 3104 } | 3174 } |
| 3105 | 3175 |
| 3106 | 3176 |
| 3107 void JSBuiltinsObject::set_javascript_builtin_code(Builtins::JavaScript id, | 3177 void JSBuiltinsObject::set_javascript_builtin_code(Builtins::JavaScript id, |
| 3108 Code* value) { | 3178 Code* value) { |
| 3109 ASSERT(0 <= id && id < kJSBuiltinsCount); | 3179 ASSERT(id < kJSBuiltinsCount); // id is unsigned. |
| 3110 WRITE_FIELD(this, OffsetOfCodeWithId(id), value); | 3180 WRITE_FIELD(this, OffsetOfCodeWithId(id), value); |
| 3111 ASSERT(!Heap::InNewSpace(value)); | 3181 ASSERT(!Heap::InNewSpace(value)); |
| 3112 } | 3182 } |
| 3113 | 3183 |
| 3114 | 3184 |
| 3115 Address Proxy::proxy() { | 3185 Address Proxy::proxy() { |
| 3116 return AddressFrom<Address>(READ_INTPTR_FIELD(this, kProxyOffset)); | 3186 return AddressFrom<Address>(READ_INTPTR_FIELD(this, kProxyOffset)); |
| 3117 } | 3187 } |
| 3118 | 3188 |
| 3119 | 3189 |
| 3120 void Proxy::set_proxy(Address value) { | 3190 void Proxy::set_proxy(Address value) { |
| 3121 WRITE_INTPTR_FIELD(this, kProxyOffset, OffsetFrom(value)); | 3191 WRITE_INTPTR_FIELD(this, kProxyOffset, OffsetFrom(value)); |
| 3122 } | 3192 } |
| 3123 | 3193 |
| 3124 | 3194 |
| 3125 ACCESSORS(JSValue, value, Object, kValueOffset) | 3195 ACCESSORS(JSValue, value, Object, kValueOffset) |
| 3126 | 3196 |
| 3127 | 3197 |
| 3128 JSValue* JSValue::cast(Object* obj) { | 3198 JSValue* JSValue::cast(Object* obj) { |
| 3129 ASSERT(obj->IsJSValue()); | 3199 ASSERT(obj->IsJSValue()); |
| 3130 ASSERT(HeapObject::cast(obj)->Size() == JSValue::kSize); | 3200 ASSERT(HeapObject::cast(obj)->Size() == JSValue::kSize); |
| 3131 return reinterpret_cast<JSValue*>(obj); | 3201 return reinterpret_cast<JSValue*>(obj); |
| 3132 } | 3202 } |
| 3133 | 3203 |
| 3134 | 3204 |
| 3205 ACCESSORS(JSMessageObject, type, String, kTypeOffset) |
| 3206 ACCESSORS(JSMessageObject, arguments, JSArray, kArgumentsOffset) |
| 3207 ACCESSORS(JSMessageObject, script, Object, kScriptOffset) |
| 3208 ACCESSORS(JSMessageObject, stack_trace, Object, kStackTraceOffset) |
| 3209 ACCESSORS(JSMessageObject, stack_frames, Object, kStackFramesOffset) |
| 3210 SMI_ACCESSORS(JSMessageObject, start_position, kStartPositionOffset) |
| 3211 SMI_ACCESSORS(JSMessageObject, end_position, kEndPositionOffset) |
| 3212 |
| 3213 |
| 3214 JSMessageObject* JSMessageObject::cast(Object* obj) { |
| 3215 ASSERT(obj->IsJSMessageObject()); |
| 3216 ASSERT(HeapObject::cast(obj)->Size() == JSMessageObject::kSize); |
| 3217 return reinterpret_cast<JSMessageObject*>(obj); |
| 3218 } |
| 3219 |
| 3220 |
| 3135 INT_ACCESSORS(Code, instruction_size, kInstructionSizeOffset) | 3221 INT_ACCESSORS(Code, instruction_size, kInstructionSizeOffset) |
| 3136 ACCESSORS(Code, relocation_info, ByteArray, kRelocationInfoOffset) | 3222 ACCESSORS(Code, relocation_info, ByteArray, kRelocationInfoOffset) |
| 3137 ACCESSORS(Code, deoptimization_data, FixedArray, kDeoptimizationDataOffset) | 3223 ACCESSORS(Code, deoptimization_data, FixedArray, kDeoptimizationDataOffset) |
| 3138 | 3224 |
| 3139 | 3225 |
| 3140 byte* Code::instruction_start() { | 3226 byte* Code::instruction_start() { |
| 3141 return FIELD_ADDR(this, kHeaderSize); | 3227 return FIELD_ADDR(this, kHeaderSize); |
| 3142 } | 3228 } |
| 3143 | 3229 |
| 3144 | 3230 |
| (...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3719 #undef WRITE_INT_FIELD | 3805 #undef WRITE_INT_FIELD |
| 3720 #undef READ_SHORT_FIELD | 3806 #undef READ_SHORT_FIELD |
| 3721 #undef WRITE_SHORT_FIELD | 3807 #undef WRITE_SHORT_FIELD |
| 3722 #undef READ_BYTE_FIELD | 3808 #undef READ_BYTE_FIELD |
| 3723 #undef WRITE_BYTE_FIELD | 3809 #undef WRITE_BYTE_FIELD |
| 3724 | 3810 |
| 3725 | 3811 |
| 3726 } } // namespace v8::internal | 3812 } } // namespace v8::internal |
| 3727 | 3813 |
| 3728 #endif // V8_OBJECTS_INL_H_ | 3814 #endif // V8_OBJECTS_INL_H_ |
| OLD | NEW |