OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // Review notes: | 5 // Review notes: |
6 // | 6 // |
7 // - The use of macros in these inline functions may seem superfluous | 7 // - The use of macros in these inline functions may seem superfluous |
8 // but it is absolutely needed to make sure gcc generates optimal | 8 // but it is absolutely needed to make sure gcc generates optimal |
9 // code. gcc is not happy when attempting to inline too deep. | 9 // code. gcc is not happy when attempting to inline too deep. |
10 // | 10 // |
(...skipping 829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
840 TYPE_CHECKER(PropertyCell, PROPERTY_CELL_TYPE) | 840 TYPE_CHECKER(PropertyCell, PROPERTY_CELL_TYPE) |
841 TYPE_CHECKER(WeakCell, WEAK_CELL_TYPE) | 841 TYPE_CHECKER(WeakCell, WEAK_CELL_TYPE) |
842 TYPE_CHECKER(SharedFunctionInfo, SHARED_FUNCTION_INFO_TYPE) | 842 TYPE_CHECKER(SharedFunctionInfo, SHARED_FUNCTION_INFO_TYPE) |
843 TYPE_CHECKER(JSGeneratorObject, JS_GENERATOR_OBJECT_TYPE) | 843 TYPE_CHECKER(JSGeneratorObject, JS_GENERATOR_OBJECT_TYPE) |
844 TYPE_CHECKER(JSModule, JS_MODULE_TYPE) | 844 TYPE_CHECKER(JSModule, JS_MODULE_TYPE) |
845 TYPE_CHECKER(JSValue, JS_VALUE_TYPE) | 845 TYPE_CHECKER(JSValue, JS_VALUE_TYPE) |
846 TYPE_CHECKER(JSDate, JS_DATE_TYPE) | 846 TYPE_CHECKER(JSDate, JS_DATE_TYPE) |
847 TYPE_CHECKER(JSMessageObject, JS_MESSAGE_OBJECT_TYPE) | 847 TYPE_CHECKER(JSMessageObject, JS_MESSAGE_OBJECT_TYPE) |
848 | 848 |
849 | 849 |
| 850 bool Object::IsAbstractCode() const { return IsBytecodeArray() || IsCode(); } |
| 851 |
| 852 |
850 bool Object::IsStringWrapper() const { | 853 bool Object::IsStringWrapper() const { |
851 return IsJSValue() && JSValue::cast(this)->value()->IsString(); | 854 return IsJSValue() && JSValue::cast(this)->value()->IsString(); |
852 } | 855 } |
853 | 856 |
854 | 857 |
855 TYPE_CHECKER(Foreign, FOREIGN_TYPE) | 858 TYPE_CHECKER(Foreign, FOREIGN_TYPE) |
856 | 859 |
857 | 860 |
858 bool Object::IsBoolean() const { | 861 bool Object::IsBoolean() const { |
859 return IsOddball() && | 862 return IsOddball() && |
(...skipping 2311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3171 | 3174 |
3172 void SeededNumberDictionary::set_requires_slow_elements() { | 3175 void SeededNumberDictionary::set_requires_slow_elements() { |
3173 set(kMaxNumberKeyIndex, Smi::FromInt(kRequiresSlowElementsMask)); | 3176 set(kMaxNumberKeyIndex, Smi::FromInt(kRequiresSlowElementsMask)); |
3174 } | 3177 } |
3175 | 3178 |
3176 | 3179 |
3177 // ------------------------------------ | 3180 // ------------------------------------ |
3178 // Cast operations | 3181 // Cast operations |
3179 | 3182 |
3180 | 3183 |
| 3184 CAST_ACCESSOR(AbstractCode) |
3181 CAST_ACCESSOR(ArrayList) | 3185 CAST_ACCESSOR(ArrayList) |
3182 CAST_ACCESSOR(Bool16x8) | 3186 CAST_ACCESSOR(Bool16x8) |
3183 CAST_ACCESSOR(Bool32x4) | 3187 CAST_ACCESSOR(Bool32x4) |
3184 CAST_ACCESSOR(Bool8x16) | 3188 CAST_ACCESSOR(Bool8x16) |
3185 CAST_ACCESSOR(ByteArray) | 3189 CAST_ACCESSOR(ByteArray) |
3186 CAST_ACCESSOR(BytecodeArray) | 3190 CAST_ACCESSOR(BytecodeArray) |
3187 CAST_ACCESSOR(Cell) | 3191 CAST_ACCESSOR(Cell) |
3188 CAST_ACCESSOR(Code) | 3192 CAST_ACCESSOR(Code) |
3189 CAST_ACCESSOR(CodeCacheHashTable) | 3193 CAST_ACCESSOR(CodeCacheHashTable) |
3190 CAST_ACCESSOR(CompilationCacheTable) | 3194 CAST_ACCESSOR(CompilationCacheTable) |
(...skipping 2080 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5271 } | 5275 } |
5272 private: | 5276 private: |
5273 static const int kMaxCount = 4; | 5277 static const int kMaxCount = 4; |
5274 int count_; | 5278 int count_; |
5275 Handle<Map> find_[kMaxCount]; | 5279 Handle<Map> find_[kMaxCount]; |
5276 Handle<Object> replace_[kMaxCount]; | 5280 Handle<Object> replace_[kMaxCount]; |
5277 friend class Code; | 5281 friend class Code; |
5278 }; | 5282 }; |
5279 | 5283 |
5280 | 5284 |
| 5285 Code* AbstractCode::GetCode() { return Code::cast(this); } |
| 5286 BytecodeArray* AbstractCode::GetBytecodeArray() { |
| 5287 return BytecodeArray::cast(this); |
| 5288 } |
| 5289 |
| 5290 |
5281 Object* Map::prototype() const { | 5291 Object* Map::prototype() const { |
5282 return READ_FIELD(this, kPrototypeOffset); | 5292 return READ_FIELD(this, kPrototypeOffset); |
5283 } | 5293 } |
5284 | 5294 |
5285 | 5295 |
5286 void Map::set_prototype(Object* value, WriteBarrierMode mode) { | 5296 void Map::set_prototype(Object* value, WriteBarrierMode mode) { |
5287 DCHECK(value->IsNull() || value->IsJSReceiver()); | 5297 DCHECK(value->IsNull() || value->IsJSReceiver()); |
5288 WRITE_FIELD(this, kPrototypeOffset, value); | 5298 WRITE_FIELD(this, kPrototypeOffset, value); |
5289 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kPrototypeOffset, value, mode); | 5299 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kPrototypeOffset, value, mode); |
5290 } | 5300 } |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5599 DCHECK(!(origin_options.Flags() & ~((1 << kOriginOptionsSize) - 1))); | 5609 DCHECK(!(origin_options.Flags() & ~((1 << kOriginOptionsSize) - 1))); |
5600 set_flags((flags() & ~kOriginOptionsMask) | | 5610 set_flags((flags() & ~kOriginOptionsMask) | |
5601 (origin_options.Flags() << kOriginOptionsShift)); | 5611 (origin_options.Flags() << kOriginOptionsShift)); |
5602 } | 5612 } |
5603 | 5613 |
5604 | 5614 |
5605 ACCESSORS(DebugInfo, shared, SharedFunctionInfo, kSharedFunctionInfoIndex) | 5615 ACCESSORS(DebugInfo, shared, SharedFunctionInfo, kSharedFunctionInfoIndex) |
5606 ACCESSORS(DebugInfo, code, Code, kCodeIndex) | 5616 ACCESSORS(DebugInfo, code, Code, kCodeIndex) |
5607 ACCESSORS(DebugInfo, break_points, FixedArray, kBreakPointsStateIndex) | 5617 ACCESSORS(DebugInfo, break_points, FixedArray, kBreakPointsStateIndex) |
5608 | 5618 |
5609 SMI_ACCESSORS(BreakPointInfo, code_position, kCodePositionIndex) | 5619 SMI_ACCESSORS(BreakPointInfo, code_offset, kCodeOffsetIndex) |
5610 SMI_ACCESSORS(BreakPointInfo, source_position, kSourcePositionIndex) | 5620 SMI_ACCESSORS(BreakPointInfo, source_position, kSourcePositionIndex) |
5611 SMI_ACCESSORS(BreakPointInfo, statement_position, kStatementPositionIndex) | 5621 SMI_ACCESSORS(BreakPointInfo, statement_position, kStatementPositionIndex) |
5612 ACCESSORS(BreakPointInfo, break_point_objects, Object, kBreakPointObjectsIndex) | 5622 ACCESSORS(BreakPointInfo, break_point_objects, Object, kBreakPointObjectsIndex) |
5613 | 5623 |
5614 ACCESSORS(SharedFunctionInfo, name, Object, kNameOffset) | 5624 ACCESSORS(SharedFunctionInfo, name, Object, kNameOffset) |
5615 ACCESSORS(SharedFunctionInfo, optimized_code_map, FixedArray, | 5625 ACCESSORS(SharedFunctionInfo, optimized_code_map, FixedArray, |
5616 kOptimizedCodeMapOffset) | 5626 kOptimizedCodeMapOffset) |
5617 ACCESSORS(SharedFunctionInfo, construct_stub, Code, kConstructStubOffset) | 5627 ACCESSORS(SharedFunctionInfo, construct_stub, Code, kConstructStubOffset) |
5618 ACCESSORS(SharedFunctionInfo, feedback_vector, TypeFeedbackVector, | 5628 ACCESSORS(SharedFunctionInfo, feedback_vector, TypeFeedbackVector, |
5619 kFeedbackVectorOffset) | 5629 kFeedbackVectorOffset) |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5854 set_start_position_and_type((start_position << kStartPositionShift) | 5864 set_start_position_and_type((start_position << kStartPositionShift) |
5855 | (start_position_and_type() & ~kStartPositionMask)); | 5865 | (start_position_and_type() & ~kStartPositionMask)); |
5856 } | 5866 } |
5857 | 5867 |
5858 | 5868 |
5859 Code* SharedFunctionInfo::code() const { | 5869 Code* SharedFunctionInfo::code() const { |
5860 return Code::cast(READ_FIELD(this, kCodeOffset)); | 5870 return Code::cast(READ_FIELD(this, kCodeOffset)); |
5861 } | 5871 } |
5862 | 5872 |
5863 | 5873 |
| 5874 AbstractCode* SharedFunctionInfo::AbstractCode() { |
| 5875 if (HasBytecodeArray()) return AbstractCode::cast(bytecode_array()); |
| 5876 return AbstractCode::cast(code()); |
| 5877 } |
| 5878 |
| 5879 |
5864 void SharedFunctionInfo::set_code(Code* value, WriteBarrierMode mode) { | 5880 void SharedFunctionInfo::set_code(Code* value, WriteBarrierMode mode) { |
5865 DCHECK(value->kind() != Code::OPTIMIZED_FUNCTION); | 5881 DCHECK(value->kind() != Code::OPTIMIZED_FUNCTION); |
5866 WRITE_FIELD(this, kCodeOffset, value); | 5882 WRITE_FIELD(this, kCodeOffset, value); |
5867 CONDITIONAL_WRITE_BARRIER(value->GetHeap(), this, kCodeOffset, value, mode); | 5883 CONDITIONAL_WRITE_BARRIER(value->GetHeap(), this, kCodeOffset, value, mode); |
5868 } | 5884 } |
5869 | 5885 |
5870 | 5886 |
5871 void SharedFunctionInfo::ReplaceCode(Code* value) { | 5887 void SharedFunctionInfo::ReplaceCode(Code* value) { |
5872 // If the GC metadata field is already used then the function was | 5888 // If the GC metadata field is already used then the function was |
5873 // enqueued as a code flushing candidate and we remove it now. | 5889 // enqueued as a code flushing candidate and we remove it now. |
(...skipping 1938 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7812 #undef WRITE_INT64_FIELD | 7828 #undef WRITE_INT64_FIELD |
7813 #undef READ_BYTE_FIELD | 7829 #undef READ_BYTE_FIELD |
7814 #undef WRITE_BYTE_FIELD | 7830 #undef WRITE_BYTE_FIELD |
7815 #undef NOBARRIER_READ_BYTE_FIELD | 7831 #undef NOBARRIER_READ_BYTE_FIELD |
7816 #undef NOBARRIER_WRITE_BYTE_FIELD | 7832 #undef NOBARRIER_WRITE_BYTE_FIELD |
7817 | 7833 |
7818 } // namespace internal | 7834 } // namespace internal |
7819 } // namespace v8 | 7835 } // namespace v8 |
7820 | 7836 |
7821 #endif // V8_OBJECTS_INL_H_ | 7837 #endif // V8_OBJECTS_INL_H_ |
OLD | NEW |