| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 bool Object::IsSpecFunction() { | 214 bool Object::IsSpecFunction() { |
| 215 if (!Object::IsHeapObject()) return false; | 215 if (!Object::IsHeapObject()) return false; |
| 216 InstanceType type = HeapObject::cast(this)->map()->instance_type(); | 216 InstanceType type = HeapObject::cast(this)->map()->instance_type(); |
| 217 return type == JS_FUNCTION_TYPE || type == JS_FUNCTION_PROXY_TYPE; | 217 return type == JS_FUNCTION_TYPE || type == JS_FUNCTION_PROXY_TYPE; |
| 218 } | 218 } |
| 219 | 219 |
| 220 | 220 |
| 221 bool Object::IsInternalizedString() { | 221 bool Object::IsInternalizedString() { |
| 222 if (!this->IsHeapObject()) return false; | 222 if (!this->IsHeapObject()) return false; |
| 223 uint32_t type = HeapObject::cast(this)->map()->instance_type(); | 223 uint32_t type = HeapObject::cast(this)->map()->instance_type(); |
| 224 // Because the internalized tag is non-zero and no non-string types have the | |
| 225 // internalized bit set we can test for internalized strings with a very | |
| 226 // simple test operation. | |
| 227 STATIC_ASSERT(kInternalizedTag != 0); | 224 STATIC_ASSERT(kInternalizedTag != 0); |
| 228 ASSERT(kNotStringTag + kIsInternalizedMask > LAST_TYPE); | 225 return (type & (kIsNotStringMask | kIsInternalizedMask)) == |
| 229 return (type & kIsInternalizedMask) != 0; | 226 (kInternalizedTag | kStringTag); |
| 230 } | 227 } |
| 231 | 228 |
| 232 | 229 |
| 233 bool Object::IsConsString() { | 230 bool Object::IsConsString() { |
| 234 if (!IsString()) return false; | 231 if (!IsString()) return false; |
| 235 return StringShape(String::cast(this)).IsCons(); | 232 return StringShape(String::cast(this)).IsCons(); |
| 236 } | 233 } |
| 237 | 234 |
| 238 | 235 |
| 239 bool Object::IsSlicedString() { | 236 bool Object::IsSlicedString() { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 StringShape::StringShape(InstanceType t) | 313 StringShape::StringShape(InstanceType t) |
| 317 : type_(static_cast<uint32_t>(t)) { | 314 : type_(static_cast<uint32_t>(t)) { |
| 318 set_valid(); | 315 set_valid(); |
| 319 ASSERT((type_ & kIsNotStringMask) == kStringTag); | 316 ASSERT((type_ & kIsNotStringMask) == kStringTag); |
| 320 } | 317 } |
| 321 | 318 |
| 322 | 319 |
| 323 bool StringShape::IsInternalized() { | 320 bool StringShape::IsInternalized() { |
| 324 ASSERT(valid()); | 321 ASSERT(valid()); |
| 325 STATIC_ASSERT(kInternalizedTag != 0); | 322 STATIC_ASSERT(kInternalizedTag != 0); |
| 326 return (type_ & kIsInternalizedMask) != 0; | 323 return (type_ & (kIsNotStringMask | kIsInternalizedMask)) == |
| 324 (kInternalizedTag | kStringTag); |
| 327 } | 325 } |
| 328 | 326 |
| 329 | 327 |
| 330 bool String::IsOneByteRepresentation() { | 328 bool String::IsOneByteRepresentation() { |
| 331 uint32_t type = map()->instance_type(); | 329 uint32_t type = map()->instance_type(); |
| 332 return (type & kStringEncodingMask) == kOneByteStringTag; | 330 return (type & kStringEncodingMask) == kOneByteStringTag; |
| 333 } | 331 } |
| 334 | 332 |
| 335 | 333 |
| 336 bool String::IsTwoByteRepresentation() { | 334 bool String::IsTwoByteRepresentation() { |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 688 | 686 |
| 689 bool Object::IsBoolean() { | 687 bool Object::IsBoolean() { |
| 690 return IsOddball() && | 688 return IsOddball() && |
| 691 ((Oddball::cast(this)->kind() & Oddball::kNotBooleanMask) == 0); | 689 ((Oddball::cast(this)->kind() & Oddball::kNotBooleanMask) == 0); |
| 692 } | 690 } |
| 693 | 691 |
| 694 | 692 |
| 695 TYPE_CHECKER(JSArray, JS_ARRAY_TYPE) | 693 TYPE_CHECKER(JSArray, JS_ARRAY_TYPE) |
| 696 TYPE_CHECKER(JSArrayBuffer, JS_ARRAY_BUFFER_TYPE) | 694 TYPE_CHECKER(JSArrayBuffer, JS_ARRAY_BUFFER_TYPE) |
| 697 TYPE_CHECKER(JSTypedArray, JS_TYPED_ARRAY_TYPE) | 695 TYPE_CHECKER(JSTypedArray, JS_TYPED_ARRAY_TYPE) |
| 696 TYPE_CHECKER(JSDataView, JS_DATA_VIEW_TYPE) |
| 697 |
| 698 |
| 699 bool Object::IsJSArrayBufferView() { |
| 700 return IsJSDataView() || IsJSTypedArray(); |
| 701 } |
| 702 |
| 703 |
| 698 TYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE) | 704 TYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE) |
| 699 | 705 |
| 700 | 706 |
| 701 template <> inline bool Is<JSArray>(Object* obj) { | 707 template <> inline bool Is<JSArray>(Object* obj) { |
| 702 return obj->IsJSArray(); | 708 return obj->IsJSArray(); |
| 703 } | 709 } |
| 704 | 710 |
| 705 | 711 |
| 706 bool Object::IsHashTable() { | 712 bool Object::IsHashTable() { |
| 707 return Object::IsHeapObject() && | 713 return Object::IsHeapObject() && |
| (...skipping 918 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1626 return READ_FIELD(this, kValueOffset); | 1632 return READ_FIELD(this, kValueOffset); |
| 1627 } | 1633 } |
| 1628 | 1634 |
| 1629 | 1635 |
| 1630 void Cell::set_value(Object* val, WriteBarrierMode ignored) { | 1636 void Cell::set_value(Object* val, WriteBarrierMode ignored) { |
| 1631 // The write barrier is not used for global property cells. | 1637 // The write barrier is not used for global property cells. |
| 1632 ASSERT(!val->IsPropertyCell() && !val->IsCell()); | 1638 ASSERT(!val->IsPropertyCell() && !val->IsCell()); |
| 1633 WRITE_FIELD(this, kValueOffset, val); | 1639 WRITE_FIELD(this, kValueOffset, val); |
| 1634 } | 1640 } |
| 1635 | 1641 |
| 1642 ACCESSORS(PropertyCell, dependent_code, DependentCode, kDependentCodeOffset) |
| 1636 | 1643 |
| 1637 Object* PropertyCell::type_raw() { | 1644 Object* PropertyCell::type_raw() { |
| 1638 return READ_FIELD(this, kTypeOffset); | 1645 return READ_FIELD(this, kTypeOffset); |
| 1639 } | 1646 } |
| 1640 | 1647 |
| 1641 | 1648 |
| 1642 void PropertyCell::set_type_raw(Object* val, WriteBarrierMode ignored) { | 1649 void PropertyCell::set_type_raw(Object* val, WriteBarrierMode ignored) { |
| 1643 WRITE_FIELD(this, kTypeOffset, val); | 1650 WRITE_FIELD(this, kTypeOffset, val); |
| 1644 } | 1651 } |
| 1645 | 1652 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1666 case JS_VALUE_TYPE: | 1673 case JS_VALUE_TYPE: |
| 1667 return JSValue::kSize; | 1674 return JSValue::kSize; |
| 1668 case JS_DATE_TYPE: | 1675 case JS_DATE_TYPE: |
| 1669 return JSDate::kSize; | 1676 return JSDate::kSize; |
| 1670 case JS_ARRAY_TYPE: | 1677 case JS_ARRAY_TYPE: |
| 1671 return JSArray::kSize; | 1678 return JSArray::kSize; |
| 1672 case JS_ARRAY_BUFFER_TYPE: | 1679 case JS_ARRAY_BUFFER_TYPE: |
| 1673 return JSArrayBuffer::kSize; | 1680 return JSArrayBuffer::kSize; |
| 1674 case JS_TYPED_ARRAY_TYPE: | 1681 case JS_TYPED_ARRAY_TYPE: |
| 1675 return JSTypedArray::kSize; | 1682 return JSTypedArray::kSize; |
| 1683 case JS_DATA_VIEW_TYPE: |
| 1684 return JSDataView::kSize; |
| 1676 case JS_SET_TYPE: | 1685 case JS_SET_TYPE: |
| 1677 return JSSet::kSize; | 1686 return JSSet::kSize; |
| 1678 case JS_MAP_TYPE: | 1687 case JS_MAP_TYPE: |
| 1679 return JSMap::kSize; | 1688 return JSMap::kSize; |
| 1680 case JS_WEAK_MAP_TYPE: | 1689 case JS_WEAK_MAP_TYPE: |
| 1681 return JSWeakMap::kSize; | 1690 return JSWeakMap::kSize; |
| 1682 case JS_REGEXP_TYPE: | 1691 case JS_REGEXP_TYPE: |
| 1683 return JSRegExp::kSize; | 1692 return JSRegExp::kSize; |
| 1684 case JS_CONTEXT_EXTENSION_OBJECT_TYPE: | 1693 case JS_CONTEXT_EXTENSION_OBJECT_TYPE: |
| 1685 return JSObject::kHeaderSize; | 1694 return JSObject::kHeaderSize; |
| (...skipping 858 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2544 CAST_ACCESSOR(SharedFunctionInfo) | 2553 CAST_ACCESSOR(SharedFunctionInfo) |
| 2545 CAST_ACCESSOR(Map) | 2554 CAST_ACCESSOR(Map) |
| 2546 CAST_ACCESSOR(JSFunction) | 2555 CAST_ACCESSOR(JSFunction) |
| 2547 CAST_ACCESSOR(GlobalObject) | 2556 CAST_ACCESSOR(GlobalObject) |
| 2548 CAST_ACCESSOR(JSGlobalProxy) | 2557 CAST_ACCESSOR(JSGlobalProxy) |
| 2549 CAST_ACCESSOR(JSGlobalObject) | 2558 CAST_ACCESSOR(JSGlobalObject) |
| 2550 CAST_ACCESSOR(JSBuiltinsObject) | 2559 CAST_ACCESSOR(JSBuiltinsObject) |
| 2551 CAST_ACCESSOR(Code) | 2560 CAST_ACCESSOR(Code) |
| 2552 CAST_ACCESSOR(JSArray) | 2561 CAST_ACCESSOR(JSArray) |
| 2553 CAST_ACCESSOR(JSArrayBuffer) | 2562 CAST_ACCESSOR(JSArrayBuffer) |
| 2563 CAST_ACCESSOR(JSArrayBufferView) |
| 2554 CAST_ACCESSOR(JSTypedArray) | 2564 CAST_ACCESSOR(JSTypedArray) |
| 2565 CAST_ACCESSOR(JSDataView) |
| 2555 CAST_ACCESSOR(JSRegExp) | 2566 CAST_ACCESSOR(JSRegExp) |
| 2556 CAST_ACCESSOR(JSProxy) | 2567 CAST_ACCESSOR(JSProxy) |
| 2557 CAST_ACCESSOR(JSFunctionProxy) | 2568 CAST_ACCESSOR(JSFunctionProxy) |
| 2558 CAST_ACCESSOR(JSSet) | 2569 CAST_ACCESSOR(JSSet) |
| 2559 CAST_ACCESSOR(JSMap) | 2570 CAST_ACCESSOR(JSMap) |
| 2560 CAST_ACCESSOR(JSWeakMap) | 2571 CAST_ACCESSOR(JSWeakMap) |
| 2561 CAST_ACCESSOR(Foreign) | 2572 CAST_ACCESSOR(Foreign) |
| 2562 CAST_ACCESSOR(ByteArray) | 2573 CAST_ACCESSOR(ByteArray) |
| 2563 CAST_ACCESSOR(FreeSpace) | 2574 CAST_ACCESSOR(FreeSpace) |
| 2564 CAST_ACCESSOR(ExternalArray) | 2575 CAST_ACCESSOR(ExternalArray) |
| (...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3369 | 3380 |
| 3370 | 3381 |
| 3371 int Map::pre_allocated_property_fields() { | 3382 int Map::pre_allocated_property_fields() { |
| 3372 return READ_BYTE_FIELD(this, kPreAllocatedPropertyFieldsOffset); | 3383 return READ_BYTE_FIELD(this, kPreAllocatedPropertyFieldsOffset); |
| 3373 } | 3384 } |
| 3374 | 3385 |
| 3375 | 3386 |
| 3376 int HeapObject::SizeFromMap(Map* map) { | 3387 int HeapObject::SizeFromMap(Map* map) { |
| 3377 int instance_size = map->instance_size(); | 3388 int instance_size = map->instance_size(); |
| 3378 if (instance_size != kVariableSizeSentinel) return instance_size; | 3389 if (instance_size != kVariableSizeSentinel) return instance_size; |
| 3379 // We can ignore the "internalized" bit because it is only set for strings | |
| 3380 // and thus implies a string type. | |
| 3381 int instance_type = | |
| 3382 static_cast<int>(map->instance_type()) & ~kIsInternalizedMask; | |
| 3383 // Only inline the most frequent cases. | 3390 // Only inline the most frequent cases. |
| 3391 int instance_type = static_cast<int>(map->instance_type()); |
| 3384 if (instance_type == FIXED_ARRAY_TYPE) { | 3392 if (instance_type == FIXED_ARRAY_TYPE) { |
| 3385 return FixedArray::BodyDescriptor::SizeOf(map, this); | 3393 return FixedArray::BodyDescriptor::SizeOf(map, this); |
| 3386 } | 3394 } |
| 3387 if (instance_type == ASCII_STRING_TYPE) { | 3395 if (instance_type == ASCII_STRING_TYPE || |
| 3396 instance_type == ASCII_INTERNALIZED_STRING_TYPE) { |
| 3388 return SeqOneByteString::SizeFor( | 3397 return SeqOneByteString::SizeFor( |
| 3389 reinterpret_cast<SeqOneByteString*>(this)->length()); | 3398 reinterpret_cast<SeqOneByteString*>(this)->length()); |
| 3390 } | 3399 } |
| 3391 if (instance_type == BYTE_ARRAY_TYPE) { | 3400 if (instance_type == BYTE_ARRAY_TYPE) { |
| 3392 return reinterpret_cast<ByteArray*>(this)->ByteArraySize(); | 3401 return reinterpret_cast<ByteArray*>(this)->ByteArraySize(); |
| 3393 } | 3402 } |
| 3394 if (instance_type == FREE_SPACE_TYPE) { | 3403 if (instance_type == FREE_SPACE_TYPE) { |
| 3395 return reinterpret_cast<FreeSpace*>(this)->size(); | 3404 return reinterpret_cast<FreeSpace*>(this)->size(); |
| 3396 } | 3405 } |
| 3397 if (instance_type == STRING_TYPE) { | 3406 if (instance_type == STRING_TYPE || |
| 3407 instance_type == INTERNALIZED_STRING_TYPE) { |
| 3398 return SeqTwoByteString::SizeFor( | 3408 return SeqTwoByteString::SizeFor( |
| 3399 reinterpret_cast<SeqTwoByteString*>(this)->length()); | 3409 reinterpret_cast<SeqTwoByteString*>(this)->length()); |
| 3400 } | 3410 } |
| 3401 if (instance_type == FIXED_DOUBLE_ARRAY_TYPE) { | 3411 if (instance_type == FIXED_DOUBLE_ARRAY_TYPE) { |
| 3402 return FixedDoubleArray::SizeFor( | 3412 return FixedDoubleArray::SizeFor( |
| 3403 reinterpret_cast<FixedDoubleArray*>(this)->length()); | 3413 reinterpret_cast<FixedDoubleArray*>(this)->length()); |
| 3404 } | 3414 } |
| 3405 ASSERT(instance_type == CODE_TYPE); | 3415 ASSERT(instance_type == CODE_TYPE); |
| 3406 return reinterpret_cast<Code*>(this)->CodeSize(); | 3416 return reinterpret_cast<Code*>(this)->CodeSize(); |
| 3407 } | 3417 } |
| (...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4022 void Code::set_marked_for_deoptimization(bool flag) { | 4032 void Code::set_marked_for_deoptimization(bool flag) { |
| 4023 ASSERT(kind() == OPTIMIZED_FUNCTION); | 4033 ASSERT(kind() == OPTIMIZED_FUNCTION); |
| 4024 int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); | 4034 int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); |
| 4025 int updated = MarkedForDeoptimizationField::update(previous, flag); | 4035 int updated = MarkedForDeoptimizationField::update(previous, flag); |
| 4026 WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); | 4036 WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); |
| 4027 } | 4037 } |
| 4028 | 4038 |
| 4029 | 4039 |
| 4030 bool Code::is_inline_cache_stub() { | 4040 bool Code::is_inline_cache_stub() { |
| 4031 Kind kind = this->kind(); | 4041 Kind kind = this->kind(); |
| 4032 return kind >= FIRST_IC_KIND && kind <= LAST_IC_KIND; | 4042 switch (kind) { |
| 4043 #define CASE(name) case name: return true; |
| 4044 IC_KIND_LIST(CASE) |
| 4045 #undef CASE |
| 4046 default: return false; |
| 4047 } |
| 4033 } | 4048 } |
| 4034 | 4049 |
| 4035 | 4050 |
| 4036 bool Code::is_debug_break() { | 4051 bool Code::is_debug_break() { |
| 4037 return ic_state() == DEBUG_STUB && extra_ic_state() == DEBUG_BREAK; | 4052 return ic_state() == DEBUG_STUB && extra_ic_state() == DEBUG_BREAK; |
| 4038 } | 4053 } |
| 4039 | 4054 |
| 4040 | 4055 |
| 4041 Code::Flags Code::ComputeFlags(Kind kind, | 4056 Code::Flags Code::ComputeFlags(Kind kind, |
| 4042 InlineCacheState ic_state, | 4057 InlineCacheState ic_state, |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4427 | 4442 |
| 4428 ACCESSORS(SignatureInfo, receiver, Object, kReceiverOffset) | 4443 ACCESSORS(SignatureInfo, receiver, Object, kReceiverOffset) |
| 4429 ACCESSORS(SignatureInfo, args, Object, kArgsOffset) | 4444 ACCESSORS(SignatureInfo, args, Object, kArgsOffset) |
| 4430 | 4445 |
| 4431 ACCESSORS(TypeSwitchInfo, types, Object, kTypesOffset) | 4446 ACCESSORS(TypeSwitchInfo, types, Object, kTypesOffset) |
| 4432 | 4447 |
| 4433 ACCESSORS(AllocationSiteInfo, payload, Object, kPayloadOffset) | 4448 ACCESSORS(AllocationSiteInfo, payload, Object, kPayloadOffset) |
| 4434 | 4449 |
| 4435 ACCESSORS(Script, source, Object, kSourceOffset) | 4450 ACCESSORS(Script, source, Object, kSourceOffset) |
| 4436 ACCESSORS(Script, name, Object, kNameOffset) | 4451 ACCESSORS(Script, name, Object, kNameOffset) |
| 4437 ACCESSORS(Script, id, Object, kIdOffset) | 4452 ACCESSORS(Script, id, Smi, kIdOffset) |
| 4438 ACCESSORS_TO_SMI(Script, line_offset, kLineOffsetOffset) | 4453 ACCESSORS_TO_SMI(Script, line_offset, kLineOffsetOffset) |
| 4439 ACCESSORS_TO_SMI(Script, column_offset, kColumnOffsetOffset) | 4454 ACCESSORS_TO_SMI(Script, column_offset, kColumnOffsetOffset) |
| 4440 ACCESSORS(Script, data, Object, kDataOffset) | 4455 ACCESSORS(Script, data, Object, kDataOffset) |
| 4441 ACCESSORS(Script, context_data, Object, kContextOffset) | 4456 ACCESSORS(Script, context_data, Object, kContextOffset) |
| 4442 ACCESSORS(Script, wrapper, Foreign, kWrapperOffset) | 4457 ACCESSORS(Script, wrapper, Foreign, kWrapperOffset) |
| 4443 ACCESSORS_TO_SMI(Script, type, kTypeOffset) | 4458 ACCESSORS_TO_SMI(Script, type, kTypeOffset) |
| 4444 ACCESSORS_TO_SMI(Script, compilation_type, kCompilationTypeOffset) | 4459 ACCESSORS_TO_SMI(Script, compilation_type, kCompilationTypeOffset) |
| 4445 ACCESSORS_TO_SMI(Script, compilation_state, kCompilationStateOffset) | 4460 ACCESSORS_TO_SMI(Script, compilation_state, kCompilationStateOffset) |
| 4446 ACCESSORS(Script, line_ends, Object, kLineEndsOffset) | 4461 ACCESSORS(Script, line_ends, Object, kLineEndsOffset) |
| 4447 ACCESSORS(Script, eval_from_shared, Object, kEvalFromSharedOffset) | 4462 ACCESSORS(Script, eval_from_shared, Object, kEvalFromSharedOffset) |
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4774 return function_data()->IsSmi(); | 4789 return function_data()->IsSmi(); |
| 4775 } | 4790 } |
| 4776 | 4791 |
| 4777 | 4792 |
| 4778 BuiltinFunctionId SharedFunctionInfo::builtin_function_id() { | 4793 BuiltinFunctionId SharedFunctionInfo::builtin_function_id() { |
| 4779 ASSERT(HasBuiltinFunctionId()); | 4794 ASSERT(HasBuiltinFunctionId()); |
| 4780 return static_cast<BuiltinFunctionId>(Smi::cast(function_data())->value()); | 4795 return static_cast<BuiltinFunctionId>(Smi::cast(function_data())->value()); |
| 4781 } | 4796 } |
| 4782 | 4797 |
| 4783 | 4798 |
| 4784 int SharedFunctionInfo::code_age() { | |
| 4785 return (compiler_hints() >> kCodeAgeShift) & kCodeAgeMask; | |
| 4786 } | |
| 4787 | |
| 4788 | |
| 4789 void SharedFunctionInfo::set_code_age(int code_age) { | |
| 4790 int hints = compiler_hints() & ~(kCodeAgeMask << kCodeAgeShift); | |
| 4791 set_compiler_hints(hints | ((code_age & kCodeAgeMask) << kCodeAgeShift)); | |
| 4792 } | |
| 4793 | |
| 4794 | |
| 4795 int SharedFunctionInfo::ic_age() { | 4799 int SharedFunctionInfo::ic_age() { |
| 4796 return ICAgeBits::decode(counters()); | 4800 return ICAgeBits::decode(counters()); |
| 4797 } | 4801 } |
| 4798 | 4802 |
| 4799 | 4803 |
| 4800 void SharedFunctionInfo::set_ic_age(int ic_age) { | 4804 void SharedFunctionInfo::set_ic_age(int ic_age) { |
| 4801 set_counters(ICAgeBits::update(counters(), ic_age)); | 4805 set_counters(ICAgeBits::update(counters(), ic_age)); |
| 4802 } | 4806 } |
| 4803 | 4807 |
| 4804 | 4808 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4888 } | 4892 } |
| 4889 | 4893 |
| 4890 | 4894 |
| 4891 bool JSFunction::IsInRecompileQueue() { | 4895 bool JSFunction::IsInRecompileQueue() { |
| 4892 return code() == GetIsolate()->builtins()->builtin( | 4896 return code() == GetIsolate()->builtins()->builtin( |
| 4893 Builtins::kInRecompileQueue); | 4897 Builtins::kInRecompileQueue); |
| 4894 } | 4898 } |
| 4895 | 4899 |
| 4896 | 4900 |
| 4897 Code* JSFunction::code() { | 4901 Code* JSFunction::code() { |
| 4898 return Code::cast(unchecked_code()); | 4902 return Code::cast( |
| 4899 } | |
| 4900 | |
| 4901 | |
| 4902 Code* JSFunction::unchecked_code() { | |
| 4903 return reinterpret_cast<Code*>( | |
| 4904 Code::GetObjectFromEntryAddress(FIELD_ADDR(this, kCodeEntryOffset))); | 4903 Code::GetObjectFromEntryAddress(FIELD_ADDR(this, kCodeEntryOffset))); |
| 4905 } | 4904 } |
| 4906 | 4905 |
| 4907 | 4906 |
| 4908 void JSFunction::set_code(Code* value) { | 4907 void JSFunction::set_code(Code* value) { |
| 4909 ASSERT(!HEAP->InNewSpace(value)); | 4908 ASSERT(!HEAP->InNewSpace(value)); |
| 4910 Address entry = value->entry(); | 4909 Address entry = value->entry(); |
| 4911 WRITE_INTPTR_FIELD(this, kCodeEntryOffset, reinterpret_cast<intptr_t>(entry)); | 4910 WRITE_INTPTR_FIELD(this, kCodeEntryOffset, reinterpret_cast<intptr_t>(entry)); |
| 4912 GetHeap()->incremental_marking()->RecordWriteOfCodeEntry( | 4911 GetHeap()->incremental_marking()->RecordWriteOfCodeEntry( |
| 4913 this, | 4912 this, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 4938 context()->native_context()->RemoveOptimizedFunction(this); | 4937 context()->native_context()->RemoveOptimizedFunction(this); |
| 4939 } | 4938 } |
| 4940 } | 4939 } |
| 4941 | 4940 |
| 4942 | 4941 |
| 4943 Context* JSFunction::context() { | 4942 Context* JSFunction::context() { |
| 4944 return Context::cast(READ_FIELD(this, kContextOffset)); | 4943 return Context::cast(READ_FIELD(this, kContextOffset)); |
| 4945 } | 4944 } |
| 4946 | 4945 |
| 4947 | 4946 |
| 4948 Object* JSFunction::unchecked_context() { | |
| 4949 return READ_FIELD(this, kContextOffset); | |
| 4950 } | |
| 4951 | |
| 4952 | |
| 4953 void JSFunction::set_context(Object* value) { | 4947 void JSFunction::set_context(Object* value) { |
| 4954 ASSERT(value->IsUndefined() || value->IsContext()); | 4948 ASSERT(value->IsUndefined() || value->IsContext()); |
| 4955 WRITE_FIELD(this, kContextOffset, value); | 4949 WRITE_FIELD(this, kContextOffset, value); |
| 4956 WRITE_BARRIER(GetHeap(), this, kContextOffset, value); | 4950 WRITE_BARRIER(GetHeap(), this, kContextOffset, value); |
| 4957 } | 4951 } |
| 4958 | 4952 |
| 4959 ACCESSORS(JSFunction, prototype_or_initial_map, Object, | 4953 ACCESSORS(JSFunction, prototype_or_initial_map, Object, |
| 4960 kPrototypeOrInitialMapOffset) | 4954 kPrototypeOrInitialMapOffset) |
| 4961 | 4955 |
| 4962 | 4956 |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5302 return BooleanBit::get(flag(), kIsExternalBit); | 5296 return BooleanBit::get(flag(), kIsExternalBit); |
| 5303 } | 5297 } |
| 5304 | 5298 |
| 5305 | 5299 |
| 5306 void JSArrayBuffer::set_is_external(bool value) { | 5300 void JSArrayBuffer::set_is_external(bool value) { |
| 5307 set_flag(BooleanBit::set(flag(), kIsExternalBit, value)); | 5301 set_flag(BooleanBit::set(flag(), kIsExternalBit, value)); |
| 5308 } | 5302 } |
| 5309 | 5303 |
| 5310 | 5304 |
| 5311 ACCESSORS(JSArrayBuffer, weak_next, Object, kWeakNextOffset) | 5305 ACCESSORS(JSArrayBuffer, weak_next, Object, kWeakNextOffset) |
| 5312 ACCESSORS(JSArrayBuffer, weak_first_array, Object, kWeakFirstArrayOffset) | 5306 ACCESSORS(JSArrayBuffer, weak_first_view, Object, kWeakFirstViewOffset) |
| 5313 | 5307 |
| 5314 | 5308 |
| 5315 ACCESSORS(JSTypedArray, buffer, Object, kBufferOffset) | 5309 ACCESSORS(JSArrayBufferView, buffer, Object, kBufferOffset) |
| 5316 ACCESSORS(JSTypedArray, byte_offset, Object, kByteOffsetOffset) | 5310 ACCESSORS(JSArrayBufferView, byte_offset, Object, kByteOffsetOffset) |
| 5317 ACCESSORS(JSTypedArray, byte_length, Object, kByteLengthOffset) | 5311 ACCESSORS(JSArrayBufferView, byte_length, Object, kByteLengthOffset) |
| 5312 ACCESSORS(JSArrayBufferView, weak_next, Object, kWeakNextOffset) |
| 5318 ACCESSORS(JSTypedArray, length, Object, kLengthOffset) | 5313 ACCESSORS(JSTypedArray, length, Object, kLengthOffset) |
| 5319 ACCESSORS(JSTypedArray, weak_next, Object, kWeakNextOffset) | |
| 5320 | 5314 |
| 5321 ACCESSORS(JSRegExp, data, Object, kDataOffset) | 5315 ACCESSORS(JSRegExp, data, Object, kDataOffset) |
| 5322 | 5316 |
| 5323 | 5317 |
| 5324 JSRegExp::Type JSRegExp::TypeTag() { | 5318 JSRegExp::Type JSRegExp::TypeTag() { |
| 5325 Object* data = this->data(); | 5319 Object* data = this->data(); |
| 5326 if (data->IsUndefined()) return JSRegExp::NOT_COMPILED; | 5320 if (data->IsUndefined()) return JSRegExp::NOT_COMPILED; |
| 5327 Smi* smi = Smi::cast(FixedArray::cast(data)->get(kTagIndex)); | 5321 Smi* smi = Smi::cast(FixedArray::cast(data)->get(kTagIndex)); |
| 5328 return static_cast<JSRegExp::Type>(smi->value()); | 5322 return static_cast<JSRegExp::Type>(smi->value()); |
| 5329 } | 5323 } |
| (...skipping 854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6184 #undef WRITE_UINT32_FIELD | 6178 #undef WRITE_UINT32_FIELD |
| 6185 #undef READ_SHORT_FIELD | 6179 #undef READ_SHORT_FIELD |
| 6186 #undef WRITE_SHORT_FIELD | 6180 #undef WRITE_SHORT_FIELD |
| 6187 #undef READ_BYTE_FIELD | 6181 #undef READ_BYTE_FIELD |
| 6188 #undef WRITE_BYTE_FIELD | 6182 #undef WRITE_BYTE_FIELD |
| 6189 | 6183 |
| 6190 | 6184 |
| 6191 } } // namespace v8::internal | 6185 } } // namespace v8::internal |
| 6192 | 6186 |
| 6193 #endif // V8_OBJECTS_INL_H_ | 6187 #endif // V8_OBJECTS_INL_H_ |
| OLD | NEW |