Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 20dc9b7e47ddae9219744d22f4b461e641fa4b51..e5727c887174086ae23135047d0a5bc8c5d8183e 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -67,30 +67,30 @@ PropertyDetails PropertyDetails::AsDeleted() const { |
} |
-#define INT_ACCESSORS(holder, name, offset) \ |
- int holder::name() { return READ_INT_FIELD(this, offset); } \ |
+#define INT_ACCESSORS(holder, name, offset) \ |
+ int holder::name() const { return READ_INT_FIELD(this, offset); } \ |
void holder::set_##name(int value) { WRITE_INT_FIELD(this, offset, value); } |
-#define ACCESSORS(holder, name, type, offset) \ |
- type* holder::name() { return type::cast(READ_FIELD(this, offset)); } \ |
- void holder::set_##name(type* value, WriteBarrierMode mode) { \ |
- WRITE_FIELD(this, offset, value); \ |
- CONDITIONAL_WRITE_BARRIER(GetHeap(), this, offset, value, mode); \ |
+#define ACCESSORS(holder, name, type, offset) \ |
+ type* holder::name() const { return type::cast(READ_FIELD(this, offset)); } \ |
+ void holder::set_##name(type* value, WriteBarrierMode mode) { \ |
+ WRITE_FIELD(this, offset, value); \ |
+ CONDITIONAL_WRITE_BARRIER(GetHeap(), this, offset, value, mode); \ |
} |
// Getter that returns a tagged Smi and setter that writes a tagged Smi. |
-#define ACCESSORS_TO_SMI(holder, name, offset) \ |
- Smi* holder::name() { return Smi::cast(READ_FIELD(this, offset)); } \ |
- void holder::set_##name(Smi* value, WriteBarrierMode mode) { \ |
- WRITE_FIELD(this, offset, value); \ |
+#define ACCESSORS_TO_SMI(holder, name, offset) \ |
+ Smi* holder::name() const { return Smi::cast(READ_FIELD(this, offset)); } \ |
+ void holder::set_##name(Smi* value, WriteBarrierMode mode) { \ |
+ WRITE_FIELD(this, offset, value); \ |
} |
// Getter that returns a Smi as an int and writes an int as a Smi. |
#define SMI_ACCESSORS(holder, name, offset) \ |
- int holder::name() { \ |
+ int holder::name() const { \ |
Object* value = READ_FIELD(this, offset); \ |
return Smi::cast(value)->value(); \ |
} \ |
@@ -99,7 +99,7 @@ PropertyDetails PropertyDetails::AsDeleted() const { |
} |
#define SYNCHRONIZED_SMI_ACCESSORS(holder, name, offset) \ |
- int holder::synchronized_##name() { \ |
+ int holder::synchronized_##name() const { \ |
Object* value = ACQUIRE_READ_FIELD(this, offset); \ |
return Smi::cast(value)->value(); \ |
} \ |
@@ -108,7 +108,7 @@ PropertyDetails PropertyDetails::AsDeleted() const { |
} |
#define NOBARRIER_SMI_ACCESSORS(holder, name, offset) \ |
- int holder::nobarrier_##name() { \ |
+ int holder::nobarrier_##name() const { \ |
Object* value = NOBARRIER_READ_FIELD(this, offset); \ |
return Smi::cast(value)->value(); \ |
} \ |
@@ -117,13 +117,13 @@ PropertyDetails PropertyDetails::AsDeleted() const { |
} |
#define BOOL_GETTER(holder, field, name, offset) \ |
- bool holder::name() { \ |
+ bool holder::name() const { \ |
return BooleanBit::get(field(), offset); \ |
} \ |
#define BOOL_ACCESSORS(holder, field, name, offset) \ |
- bool holder::name() { \ |
+ bool holder::name() const { \ |
return BooleanBit::get(field(), offset); \ |
} \ |
void holder::set_##name(bool value) { \ |
@@ -1121,16 +1121,19 @@ bool JSProxy::HasElementWithHandler(Handle<JSProxy> proxy, uint32_t index) { |
#define FIELD_ADDR(p, offset) \ |
(reinterpret_cast<byte*>(p) + offset - kHeapObjectTag) |
+#define FIELD_ADDR_CONST(p, offset) \ |
+ (reinterpret_cast<const byte*>(p) + offset - kHeapObjectTag) |
+ |
#define READ_FIELD(p, offset) \ |
- (*reinterpret_cast<Object**>(FIELD_ADDR(p, offset))) |
+ (*reinterpret_cast<Object* const*>(FIELD_ADDR_CONST(p, offset))) |
#define ACQUIRE_READ_FIELD(p, offset) \ |
reinterpret_cast<Object*>(base::Acquire_Load( \ |
- reinterpret_cast<base::AtomicWord*>(FIELD_ADDR(p, offset)))) |
+ reinterpret_cast<const base::AtomicWord*>(FIELD_ADDR_CONST(p, offset)))) |
#define NOBARRIER_READ_FIELD(p, offset) \ |
reinterpret_cast<Object*>(base::NoBarrier_Load( \ |
- reinterpret_cast<base::AtomicWord*>(FIELD_ADDR(p, offset)))) |
+ reinterpret_cast<const base::AtomicWord*>(FIELD_ADDR_CONST(p, offset)))) |
#define WRITE_FIELD(p, offset, value) \ |
(*reinterpret_cast<Object**>(FIELD_ADDR(p, offset)) = value) |
@@ -1163,17 +1166,17 @@ bool JSProxy::HasElementWithHandler(Handle<JSProxy> proxy, uint32_t index) { |
#ifndef V8_TARGET_ARCH_MIPS |
#define READ_DOUBLE_FIELD(p, offset) \ |
- (*reinterpret_cast<double*>(FIELD_ADDR(p, offset))) |
+ (*reinterpret_cast<const double*>(FIELD_ADDR_CONST(p, offset))) |
#else // V8_TARGET_ARCH_MIPS |
// Prevent gcc from using load-double (mips ldc1) on (possibly) |
// non-64-bit aligned HeapNumber::value. |
- static inline double read_double_field(void* p, int offset) { |
+ static inline double read_double_field(const void* p, int offset) { |
union conversion { |
double d; |
uint32_t u[2]; |
} c; |
- c.u[0] = (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset))); |
- c.u[1] = (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset + 4))); |
+ c.u[0] = (*reinterpret_cast<uint32_t*>(FIELD_ADDR_CONST(p, offset))); |
+ c.u[1] = (*reinterpret_cast<uint32_t*>(FIELD_ADDR_CONST(p, offset + 4))); |
return c.d; |
} |
#define READ_DOUBLE_FIELD(p, offset) read_double_field(p, offset) |
@@ -1201,43 +1204,43 @@ bool JSProxy::HasElementWithHandler(Handle<JSProxy> proxy, uint32_t index) { |
#define READ_INT_FIELD(p, offset) \ |
- (*reinterpret_cast<int*>(FIELD_ADDR(p, offset))) |
+ (*reinterpret_cast<const int*>(FIELD_ADDR_CONST(p, offset))) |
#define WRITE_INT_FIELD(p, offset, value) \ |
(*reinterpret_cast<int*>(FIELD_ADDR(p, offset)) = value) |
#define READ_INTPTR_FIELD(p, offset) \ |
- (*reinterpret_cast<intptr_t*>(FIELD_ADDR(p, offset))) |
+ (*reinterpret_cast<const intptr_t*>(FIELD_ADDR_CONST(p, offset))) |
#define WRITE_INTPTR_FIELD(p, offset, value) \ |
(*reinterpret_cast<intptr_t*>(FIELD_ADDR(p, offset)) = value) |
#define READ_UINT32_FIELD(p, offset) \ |
- (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset))) |
+ (*reinterpret_cast<const uint32_t*>(FIELD_ADDR_CONST(p, offset))) |
#define WRITE_UINT32_FIELD(p, offset, value) \ |
(*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset)) = value) |
#define READ_INT32_FIELD(p, offset) \ |
- (*reinterpret_cast<int32_t*>(FIELD_ADDR(p, offset))) |
+ (*reinterpret_cast<const int32_t*>(FIELD_ADDR_CONST(p, offset))) |
#define WRITE_INT32_FIELD(p, offset, value) \ |
(*reinterpret_cast<int32_t*>(FIELD_ADDR(p, offset)) = value) |
#define READ_INT64_FIELD(p, offset) \ |
- (*reinterpret_cast<int64_t*>(FIELD_ADDR(p, offset))) |
+ (*reinterpret_cast<const int64_t*>(FIELD_ADDR_CONST(p, offset))) |
#define WRITE_INT64_FIELD(p, offset, value) \ |
(*reinterpret_cast<int64_t*>(FIELD_ADDR(p, offset)) = value) |
#define READ_SHORT_FIELD(p, offset) \ |
- (*reinterpret_cast<uint16_t*>(FIELD_ADDR(p, offset))) |
+ (*reinterpret_cast<const uint16_t*>(FIELD_ADDR_CONST(p, offset))) |
#define WRITE_SHORT_FIELD(p, offset, value) \ |
(*reinterpret_cast<uint16_t*>(FIELD_ADDR(p, offset)) = value) |
#define READ_BYTE_FIELD(p, offset) \ |
- (*reinterpret_cast<byte*>(FIELD_ADDR(p, offset))) |
+ (*reinterpret_cast<const byte*>(FIELD_ADDR_CONST(p, offset))) |
#define NOBARRIER_READ_BYTE_FIELD(p, offset) \ |
static_cast<byte>(base::NoBarrier_Load( \ |
@@ -1252,11 +1255,11 @@ bool JSProxy::HasElementWithHandler(Handle<JSProxy> proxy, uint32_t index) { |
static_cast<base::Atomic8>(value)); |
Object** HeapObject::RawField(HeapObject* obj, int byte_offset) { |
- return &READ_FIELD(obj, byte_offset); |
+ return reinterpret_cast<Object**>(FIELD_ADDR(obj, byte_offset)); |
} |
-int Smi::value() { |
+int Smi::value() const { |
return Internals::SmiValue(this); |
} |
@@ -1281,7 +1284,7 @@ bool Smi::IsValid(intptr_t value) { |
} |
-MapWord MapWord::FromMap(Map* map) { |
+MapWord MapWord::FromMap(const Map* map) { |
return MapWord(reinterpret_cast<uintptr_t>(map)); |
} |
@@ -1319,9 +1322,9 @@ void HeapObject::VerifySmiField(int offset) { |
#endif |
-Heap* HeapObject::GetHeap() { |
+Heap* HeapObject::GetHeap() const { |
Heap* heap = |
- MemoryChunk::FromAddress(reinterpret_cast<Address>(this))->heap(); |
+ MemoryChunk::FromAddress(reinterpret_cast<const byte*>(this))->heap(); |
SLOW_ASSERT(heap != NULL); |
return heap; |
} |
@@ -1332,7 +1335,7 @@ Isolate* HeapObject::GetIsolate() { |
} |
-Map* HeapObject::map() { |
+Map* HeapObject::map() const { |
#ifdef DEBUG |
// Clear mark potentially added by PathTracer. |
uintptr_t raw_value = |
@@ -1380,7 +1383,7 @@ void HeapObject::set_map_no_write_barrier(Map* value) { |
} |
-MapWord HeapObject::map_word() { |
+MapWord HeapObject::map_word() const { |
return MapWord( |
reinterpret_cast<uintptr_t>(NOBARRIER_READ_FIELD(this, kMapOffset))); |
} |
@@ -1392,7 +1395,7 @@ void HeapObject::set_map_word(MapWord map_word) { |
} |
-MapWord HeapObject::synchronized_map_word() { |
+MapWord HeapObject::synchronized_map_word() const { |
return MapWord( |
reinterpret_cast<uintptr_t>(ACQUIRE_READ_FIELD(this, kMapOffset))); |
} |
@@ -1476,7 +1479,7 @@ bool FixedArray::ContainsOnlySmisOrHoles() { |
} |
-FixedArrayBase* JSObject::elements() { |
+FixedArrayBase* JSObject::elements() const { |
Object* array = READ_FIELD(this, kElementsOffset); |
return static_cast<FixedArrayBase*>(array); |
} |
@@ -1817,7 +1820,7 @@ void Oddball::set_kind(byte value) { |
} |
-Object* Cell::value() { |
+Object* Cell::value() const { |
return READ_FIELD(this, kValueOffset); |
} |
@@ -1830,7 +1833,7 @@ void Cell::set_value(Object* val, WriteBarrierMode ignored) { |
ACCESSORS(PropertyCell, dependent_code, DependentCode, kDependentCodeOffset) |
-Object* PropertyCell::type_raw() { |
+Object* PropertyCell::type_raw() const { |
return READ_FIELD(this, kTypeOffset); |
} |
@@ -3645,7 +3648,7 @@ void ExternalUint8ClampedArray::set(int index, uint8_t value) { |
} |
-void* ExternalArray::external_pointer() { |
+void* ExternalArray::external_pointer() const { |
intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset); |
return reinterpret_cast<void*>(ptr); |
} |
@@ -4885,7 +4888,7 @@ bool Code::IsWeakObjectInIC(Object* object) { |
} |
-Object* Map::prototype() { |
+Object* Map::prototype() const { |
return READ_FIELD(this, kPrototypeOffset); |
} |
@@ -4961,7 +4964,7 @@ bool Map::HasElementsTransition() { |
} |
-bool Map::HasTransitionArray() { |
+bool Map::HasTransitionArray() const { |
Object* object = READ_FIELD(this, kTransitionsOrBackPointerOffset); |
return object->IsTransitionArray(); |
} |
@@ -5021,7 +5024,7 @@ bool Map::HasPrototypeTransitions() { |
} |
-TransitionArray* Map::transitions() { |
+TransitionArray* Map::transitions() const { |
ASSERT(HasTransitionArray()); |
Object* object = READ_FIELD(this, kTransitionsOrBackPointerOffset); |
return TransitionArray::cast(object); |
@@ -5286,7 +5289,7 @@ SMI_ACCESSORS(SharedFunctionInfo, profiler_ticks, kProfilerTicksOffset) |
#define PSEUDO_SMI_ACCESSORS_LO(holder, name, offset) \ |
STATIC_ASSERT(holder::offset % kPointerSize == 0); \ |
- int holder::name() { \ |
+ int holder::name() const { \ |
int value = READ_INT_FIELD(this, offset); \ |
ASSERT(kHeapObjectTag == 1); \ |
ASSERT((value & kHeapObjectTag) == 0); \ |
@@ -5428,7 +5431,7 @@ void SharedFunctionInfo::set_start_position(int start_position) { |
} |
-Code* SharedFunctionInfo::code() { |
+Code* SharedFunctionInfo::code() const { |
return Code::cast(READ_FIELD(this, kCodeOffset)); |
} |
@@ -5454,7 +5457,7 @@ void SharedFunctionInfo::ReplaceCode(Code* value) { |
} |
-ScopeInfo* SharedFunctionInfo::scope_info() { |
+ScopeInfo* SharedFunctionInfo::scope_info() const { |
return reinterpret_cast<ScopeInfo*>(READ_FIELD(this, kScopeInfoOffset)); |
} |
@@ -5826,7 +5829,7 @@ ACCESSORS(JSMap, table, Object, kTableOffset) |
#define ORDERED_HASH_TABLE_ITERATOR_ACCESSORS(name, type, offset) \ |
template<class Derived, class TableType> \ |
- type* OrderedHashTableIterator<Derived, TableType>::name() { \ |
+ type* OrderedHashTableIterator<Derived, TableType>::name() const { \ |
return type::cast(READ_FIELD(this, offset)); \ |
} \ |
template<class Derived, class TableType> \ |
@@ -6042,7 +6045,7 @@ bool Code::contains(byte* inner_pointer) { |
ACCESSORS(JSArray, length, Object, kLengthOffset) |
-void* JSArrayBuffer::backing_store() { |
+void* JSArrayBuffer::backing_store() const { |
intptr_t ptr = READ_INTPTR_FIELD(this, kBackingStoreOffset); |
return reinterpret_cast<void*>(ptr); |
} |
@@ -6972,6 +6975,7 @@ void FlexibleBodyDescriptor<start_offset>::IterateBody(HeapObject* obj, |
#undef BOOL_GETTER |
#undef BOOL_ACCESSORS |
#undef FIELD_ADDR |
+#undef FIELD_ADDR_CONST |
#undef READ_FIELD |
#undef NOBARRIER_READ_FIELD |
#undef WRITE_FIELD |