diff options
Diffstat (limited to 'deps/v8/src/objects/object-macros.h')
-rw-r--r-- | deps/v8/src/objects/object-macros.h | 140 |
1 files changed, 77 insertions, 63 deletions
diff --git a/deps/v8/src/objects/object-macros.h b/deps/v8/src/objects/object-macros.h index 4bbf9e535b..9ec24a62f7 100644 --- a/deps/v8/src/objects/object-macros.h +++ b/deps/v8/src/objects/object-macros.h @@ -14,6 +14,8 @@ // for fields that can be written to and read from multiple threads at the same // time. See comments in src/base/atomicops.h for the memory ordering sematics. +#include <src/v8memory.h> + #define DECL_PRIMITIVE_ACCESSORS(name, type) \ inline type name() const; \ inline void set_##name(type value); @@ -28,6 +30,10 @@ inline uint16_t name() const; \ inline void set_##name(int value); +#define DECL_UINT8_ACCESSORS(name) \ + inline uint8_t name() const; \ + inline void set_##name(int value); + #define DECL_ACCESSORS(name, type) \ inline type* name() const; \ inline void set_##name(type* value, \ @@ -65,18 +71,25 @@ WRITE_UINT16_FIELD(this, offset, value); \ } -#define ACCESSORS_CHECKED2(holder, name, type, offset, get_condition, \ - set_condition) \ - type* holder::name() const { \ - type* value = type::cast(READ_FIELD(this, offset)); \ - DCHECK(get_condition); \ - return value; \ - } \ - void holder::set_##name(type* value, WriteBarrierMode mode) { \ - DCHECK(set_condition); \ - WRITE_FIELD(this, offset, value); \ - CONDITIONAL_WRITE_BARRIER(Heap::FromWritableHeapObject(this), this, \ - offset, value, mode); \ +#define UINT8_ACCESSORS(holder, name, offset) \ + uint8_t holder::name() const { return READ_UINT8_FIELD(this, offset); } \ + void holder::set_##name(int value) { \ + DCHECK_GE(value, 0); \ + DCHECK_LE(value, static_cast<uint8_t>(-1)); \ + WRITE_UINT8_FIELD(this, offset, value); \ + } + +#define ACCESSORS_CHECKED2(holder, name, type, offset, get_condition, \ + set_condition) \ + type* holder::name() const { \ + type* value = type::cast(READ_FIELD(this, offset)); \ + DCHECK(get_condition); \ + return value; \ + } \ + void holder::set_##name(type* value, WriteBarrierMode mode) { \ + DCHECK(set_condition); \ + WRITE_FIELD(this, offset, value); \ + CONDITIONAL_WRITE_BARRIER(this, offset, value, mode); \ } #define ACCESSORS_CHECKED(holder, name, type, offset, condition) \ ACCESSORS_CHECKED2(holder, name, type, offset, condition, condition) @@ -84,18 +97,17 @@ #define ACCESSORS(holder, name, type, offset) \ ACCESSORS_CHECKED(holder, name, type, offset, true) -#define WEAK_ACCESSORS_CHECKED2(holder, name, offset, get_condition, \ - set_condition) \ - MaybeObject* holder::name() const { \ - MaybeObject* value = READ_WEAK_FIELD(this, offset); \ - DCHECK(get_condition); \ - return value; \ - } \ - void holder::set_##name(MaybeObject* value, WriteBarrierMode mode) { \ - DCHECK(set_condition); \ - WRITE_WEAK_FIELD(this, offset, value); \ - CONDITIONAL_WEAK_WRITE_BARRIER(Heap::FromWritableHeapObject(this), this, \ - offset, value, mode); \ +#define WEAK_ACCESSORS_CHECKED2(holder, name, offset, get_condition, \ + set_condition) \ + MaybeObject* holder::name() const { \ + MaybeObject* value = READ_WEAK_FIELD(this, offset); \ + DCHECK(get_condition); \ + return value; \ + } \ + void holder::set_##name(MaybeObject* value, WriteBarrierMode mode) { \ + DCHECK(set_condition); \ + WRITE_WEAK_FIELD(this, offset, value); \ + CONDITIONAL_WEAK_WRITE_BARRIER(this, offset, value, mode); \ } #define WEAK_ACCESSORS_CHECKED(holder, name, offset, condition) \ @@ -154,9 +166,14 @@ set_##field(BitField::update(field(), value)); \ } -#define TYPE_CHECKER(type, instancetype) \ - bool HeapObject::Is##type() const { \ - return map()->instance_type() == instancetype; \ +#define INSTANCE_TYPE_CHECKER(type, forinstancetype) \ + V8_INLINE bool Is##type(InstanceType instance_type) { \ + return instance_type == forinstancetype; \ + } + +#define TYPE_CHECKER(type, ...) \ + bool HeapObject::Is##type() const { \ + return InstanceTypeChecker::Is##type(map()->instance_type()); \ } #define FIELD_ADDR(p, offset) \ @@ -206,48 +223,45 @@ reinterpret_cast<base::AtomicWord*>(FIELD_ADDR(p, offset)), \ reinterpret_cast<base::AtomicWord>(value)); -#define WRITE_BARRIER(heap, object, offset, value) \ - do { \ - Heap* __heap__ = heap; \ - __heap__->incremental_marking()->RecordWrite( \ - object, HeapObject::RawField(object, offset), value); \ - __heap__->RecordWrite(object, HeapObject::RawField(object, offset), \ - value); \ +#define WRITE_BARRIER(object, offset, value) \ + do { \ + DCHECK_NOT_NULL(Heap::FromWritableHeapObject(object)); \ + MarkingBarrier(object, HeapObject::RawField(object, offset), value); \ + GenerationalBarrier(object, HeapObject::RawField(object, offset), value); \ } while (false) -#define WEAK_WRITE_BARRIER(heap, object, offset, value) \ - do { \ - Heap* __heap__ = heap; \ - __heap__->incremental_marking()->RecordMaybeWeakWrite( \ - object, HeapObject::RawMaybeWeakField(object, offset), value); \ - __heap__->RecordWrite( \ - object, HeapObject::RawMaybeWeakField(object, offset), value); \ +#define WEAK_WRITE_BARRIER(object, offset, value) \ + do { \ + DCHECK_NOT_NULL(Heap::FromWritableHeapObject(object)); \ + MarkingBarrier(object, HeapObject::RawMaybeWeakField(object, offset), \ + value); \ + GenerationalBarrier(object, HeapObject::RawMaybeWeakField(object, offset), \ + value); \ } while (false) -#define CONDITIONAL_WRITE_BARRIER(heap, object, offset, value, mode) \ - do { \ - Heap* __heap__ = heap; \ - if (mode != SKIP_WRITE_BARRIER) { \ - if (mode == UPDATE_WRITE_BARRIER) { \ - __heap__->incremental_marking()->RecordWrite( \ - object, HeapObject::RawField(object, offset), value); \ - } \ - __heap__->RecordWrite(object, HeapObject::RawField(object, offset), \ - value); \ - } \ +#define CONDITIONAL_WRITE_BARRIER(object, offset, value, mode) \ + do { \ + DCHECK_NOT_NULL(Heap::FromWritableHeapObject(object)); \ + if (mode != SKIP_WRITE_BARRIER) { \ + if (mode == UPDATE_WRITE_BARRIER) { \ + MarkingBarrier(object, HeapObject::RawField(object, offset), value); \ + } \ + GenerationalBarrier(object, HeapObject::RawField(object, offset), \ + value); \ + } \ } while (false) -#define CONDITIONAL_WEAK_WRITE_BARRIER(heap, object, offset, value, mode) \ - do { \ - Heap* __heap__ = heap; \ - if (mode != SKIP_WRITE_BARRIER) { \ - if (mode == UPDATE_WRITE_BARRIER) { \ - __heap__->incremental_marking()->RecordMaybeWeakWrite( \ - object, HeapObject::RawMaybeWeakField(object, offset), value); \ - } \ - __heap__->RecordWrite( \ - object, HeapObject::RawMaybeWeakField(object, offset), value); \ - } \ +#define CONDITIONAL_WEAK_WRITE_BARRIER(object, offset, value, mode) \ + do { \ + DCHECK_NOT_NULL(Heap::FromWritableHeapObject(object)); \ + if (mode != SKIP_WRITE_BARRIER) { \ + if (mode == UPDATE_WRITE_BARRIER) { \ + MarkingBarrier(object, HeapObject::RawMaybeWeakField(object, offset), \ + value); \ + } \ + GenerationalBarrier( \ + object, HeapObject::RawMaybeWeakField(object, offset), value); \ + } \ } while (false) #define READ_DOUBLE_FIELD(p, offset) ReadDoubleValue(FIELD_ADDR(p, offset)) |