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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 const type* type::cast(const Object* object) { \ | 71 const type* type::cast(const Object* object) { \ |
72 SLOW_DCHECK(object->Is##type()); \ | 72 SLOW_DCHECK(object->Is##type()); \ |
73 return reinterpret_cast<const type*>(object); \ | 73 return reinterpret_cast<const type*>(object); \ |
74 } | 74 } |
75 | 75 |
76 | 76 |
77 #define INT_ACCESSORS(holder, name, offset) \ | 77 #define INT_ACCESSORS(holder, name, offset) \ |
78 int holder::name() const { return READ_INT_FIELD(this, offset); } \ | 78 int holder::name() const { return READ_INT_FIELD(this, offset); } \ |
79 void holder::set_##name(int value) { WRITE_INT_FIELD(this, offset, value); } | 79 void holder::set_##name(int value) { WRITE_INT_FIELD(this, offset, value); } |
80 | 80 |
81 | 81 #define ACCESSORS_CHECKED(holder, name, type, offset, condition) \ |
82 #define ACCESSORS(holder, name, type, offset) \ | 82 type* holder::name() const { \ |
83 type* holder::name() const { return type::cast(READ_FIELD(this, offset)); } \ | 83 DCHECK(condition); \ |
84 void holder::set_##name(type* value, WriteBarrierMode mode) { \ | 84 return type::cast(READ_FIELD(this, offset)); \ |
85 WRITE_FIELD(this, offset, value); \ | 85 } \ |
86 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, offset, value, mode); \ | 86 void holder::set_##name(type* value, WriteBarrierMode mode) { \ |
| 87 DCHECK(condition); \ |
| 88 WRITE_FIELD(this, offset, value); \ |
| 89 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, offset, value, mode); \ |
87 } | 90 } |
88 | 91 |
| 92 #define ACCESSORS(holder, name, type, offset) \ |
| 93 ACCESSORS_CHECKED(holder, name, type, offset, true) |
89 | 94 |
90 // Getter that returns a Smi as an int and writes an int as a Smi. | 95 // Getter that returns a Smi as an int and writes an int as a Smi. |
91 #define SMI_ACCESSORS(holder, name, offset) \ | 96 #define SMI_ACCESSORS_CHECKED(holder, name, offset, condition) \ |
92 int holder::name() const { \ | 97 int holder::name() const { \ |
93 Object* value = READ_FIELD(this, offset); \ | 98 DCHECK(condition); \ |
94 return Smi::cast(value)->value(); \ | 99 Object* value = READ_FIELD(this, offset); \ |
95 } \ | 100 return Smi::cast(value)->value(); \ |
96 void holder::set_##name(int value) { \ | 101 } \ |
97 WRITE_FIELD(this, offset, Smi::FromInt(value)); \ | 102 void holder::set_##name(int value) { \ |
| 103 DCHECK(condition); \ |
| 104 WRITE_FIELD(this, offset, Smi::FromInt(value)); \ |
98 } | 105 } |
99 | 106 |
| 107 #define SMI_ACCESSORS(holder, name, offset) \ |
| 108 SMI_ACCESSORS_CHECKED(holder, name, offset, true) |
| 109 |
100 #define SYNCHRONIZED_SMI_ACCESSORS(holder, name, offset) \ | 110 #define SYNCHRONIZED_SMI_ACCESSORS(holder, name, offset) \ |
101 int holder::synchronized_##name() const { \ | 111 int holder::synchronized_##name() const { \ |
102 Object* value = ACQUIRE_READ_FIELD(this, offset); \ | 112 Object* value = ACQUIRE_READ_FIELD(this, offset); \ |
103 return Smi::cast(value)->value(); \ | 113 return Smi::cast(value)->value(); \ |
104 } \ | 114 } \ |
105 void holder::synchronized_set_##name(int value) { \ | 115 void holder::synchronized_set_##name(int value) { \ |
106 RELEASE_WRITE_FIELD(this, offset, Smi::FromInt(value)); \ | 116 RELEASE_WRITE_FIELD(this, offset, Smi::FromInt(value)); \ |
107 } | 117 } |
108 | 118 |
109 #define NOBARRIER_SMI_ACCESSORS(holder, name, offset) \ | 119 #define NOBARRIER_SMI_ACCESSORS(holder, name, offset) \ |
(...skipping 5534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5644 | 5654 |
5645 ACCESSORS(Script, source, Object, kSourceOffset) | 5655 ACCESSORS(Script, source, Object, kSourceOffset) |
5646 ACCESSORS(Script, name, Object, kNameOffset) | 5656 ACCESSORS(Script, name, Object, kNameOffset) |
5647 SMI_ACCESSORS(Script, id, kIdOffset) | 5657 SMI_ACCESSORS(Script, id, kIdOffset) |
5648 SMI_ACCESSORS(Script, line_offset, kLineOffsetOffset) | 5658 SMI_ACCESSORS(Script, line_offset, kLineOffsetOffset) |
5649 SMI_ACCESSORS(Script, column_offset, kColumnOffsetOffset) | 5659 SMI_ACCESSORS(Script, column_offset, kColumnOffsetOffset) |
5650 ACCESSORS(Script, context_data, Object, kContextOffset) | 5660 ACCESSORS(Script, context_data, Object, kContextOffset) |
5651 ACCESSORS(Script, wrapper, HeapObject, kWrapperOffset) | 5661 ACCESSORS(Script, wrapper, HeapObject, kWrapperOffset) |
5652 SMI_ACCESSORS(Script, type, kTypeOffset) | 5662 SMI_ACCESSORS(Script, type, kTypeOffset) |
5653 ACCESSORS(Script, line_ends, Object, kLineEndsOffset) | 5663 ACCESSORS(Script, line_ends, Object, kLineEndsOffset) |
5654 ACCESSORS(Script, eval_from_shared, Object, kEvalFromSharedOffset) | 5664 ACCESSORS_CHECKED(Script, eval_from_shared, Object, kEvalFromSharedOffset, |
5655 SMI_ACCESSORS(Script, eval_from_position, kEvalFromPositionOffset) | 5665 this->type() != TYPE_WASM) |
| 5666 SMI_ACCESSORS_CHECKED(Script, eval_from_position, kEvalFromPositionOffset, |
| 5667 this->type() != TYPE_WASM) |
5656 ACCESSORS(Script, shared_function_infos, Object, kSharedFunctionInfosOffset) | 5668 ACCESSORS(Script, shared_function_infos, Object, kSharedFunctionInfosOffset) |
5657 SMI_ACCESSORS(Script, flags, kFlagsOffset) | 5669 SMI_ACCESSORS(Script, flags, kFlagsOffset) |
5658 ACCESSORS(Script, source_url, Object, kSourceUrlOffset) | 5670 ACCESSORS(Script, source_url, Object, kSourceUrlOffset) |
5659 ACCESSORS(Script, source_mapping_url, Object, kSourceMappingUrlOffset) | 5671 ACCESSORS(Script, source_mapping_url, Object, kSourceMappingUrlOffset) |
| 5672 ACCESSORS_CHECKED(Script, wasm_object, JSObject, kEvalFromSharedOffset, |
| 5673 this->type() == TYPE_WASM) |
| 5674 SMI_ACCESSORS_CHECKED(Script, wasm_function_index, kEvalFromPositionOffset, |
| 5675 this->type() == TYPE_WASM) |
5660 | 5676 |
5661 Script::CompilationType Script::compilation_type() { | 5677 Script::CompilationType Script::compilation_type() { |
5662 return BooleanBit::get(flags(), kCompilationTypeBit) ? | 5678 return BooleanBit::get(flags(), kCompilationTypeBit) ? |
5663 COMPILATION_TYPE_EVAL : COMPILATION_TYPE_HOST; | 5679 COMPILATION_TYPE_EVAL : COMPILATION_TYPE_HOST; |
5664 } | 5680 } |
5665 void Script::set_compilation_type(CompilationType type) { | 5681 void Script::set_compilation_type(CompilationType type) { |
5666 set_flags(BooleanBit::set(flags(), kCompilationTypeBit, | 5682 set_flags(BooleanBit::set(flags(), kCompilationTypeBit, |
5667 type == COMPILATION_TYPE_EVAL)); | 5683 type == COMPILATION_TYPE_EVAL)); |
5668 } | 5684 } |
5669 bool Script::hide_source() { return BooleanBit::get(flags(), kHideSourceBit); } | 5685 bool Script::hide_source() { return BooleanBit::get(flags(), kHideSourceBit); } |
(...skipping 2376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8046 #undef WRITE_INT64_FIELD | 8062 #undef WRITE_INT64_FIELD |
8047 #undef READ_BYTE_FIELD | 8063 #undef READ_BYTE_FIELD |
8048 #undef WRITE_BYTE_FIELD | 8064 #undef WRITE_BYTE_FIELD |
8049 #undef NOBARRIER_READ_BYTE_FIELD | 8065 #undef NOBARRIER_READ_BYTE_FIELD |
8050 #undef NOBARRIER_WRITE_BYTE_FIELD | 8066 #undef NOBARRIER_WRITE_BYTE_FIELD |
8051 | 8067 |
8052 } // namespace internal | 8068 } // namespace internal |
8053 } // namespace v8 | 8069 } // namespace v8 |
8054 | 8070 |
8055 #endif // V8_OBJECTS_INL_H_ | 8071 #endif // V8_OBJECTS_INL_H_ |
OLD | NEW |