| 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 |