| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index 6aee45b851fdb7c47a5d79cd6d4a1d3c3776573f..740782b707d8b8142f563003d73e71264ba598ab 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -865,12 +865,12 @@ MaybeObject* Object::GetProperty(String* key, PropertyAttributes* attributes) {
|
| #define WRITE_FIELD(p, offset, value) \
|
| (*reinterpret_cast<Object**>(FIELD_ADDR(p, offset)) = value)
|
|
|
| -#define WRITE_BARRIER(heap, object, offset, value) \
|
| - heap->incremental_marking()->RecordWrite(object, value); \
|
| - if (HEAP->InNewSpace(value)) { \
|
| - heap->RecordWrite(object->address(), offset); \
|
| +#define WRITE_BARRIER(heap, object, offset, value) \
|
| + heap->incremental_marking()->RecordWrite( \
|
| + object, HeapObject::RawField(object, offset), value); \
|
| + if (heap->InNewSpace(value)) { \
|
| + heap->RecordWrite(object->address(), offset); \
|
| }
|
| -// TODO(gc) !!!
|
|
|
| #ifndef V8_TARGET_ARCH_MIPS
|
| #define READ_DOUBLE_FIELD(p, offset) \
|
| @@ -1118,7 +1118,10 @@ Map* HeapObject::map() {
|
| void HeapObject::set_map(Map* value) {
|
| set_map_word(MapWord::FromMap(value));
|
| if (value != NULL) {
|
| - value->GetHeap()->incremental_marking()->RecordWrite(this, value);
|
| + // We are passing NULL as a slot because maps can never be on evacuation
|
| + // candidate.
|
| + // TODO(gc) Maps are compacted by a separate (non-evacuation) algorithm.
|
| + value->GetHeap()->incremental_marking()->RecordWrite(this, NULL, value);
|
| }
|
| }
|
|
|
| @@ -1252,8 +1255,8 @@ void JSGlobalPropertyCell::set_value(Object* val, WriteBarrierMode ignored) {
|
| // The write barrier is not used for global property cells.
|
| ASSERT(!val->IsJSGlobalPropertyCell());
|
| WRITE_FIELD(this, kValueOffset, val);
|
| - // TODO(gc) ISOLATES MERGE cell should heap accessor.
|
| - GetHeap()->incremental_marking()->RecordWrite(this, val);
|
| + GetHeap()->incremental_marking()->RecordWrite(
|
| + this, HeapObject::RawField(this, kValueOffset), val);
|
| }
|
|
|
|
|
| @@ -1494,7 +1497,10 @@ void FixedArray::fast_set(FixedArray* array, int index, Object* value) {
|
| ASSERT(index >= 0 && index < array->length());
|
| ASSERT(!HEAP->InNewSpace(value));
|
| WRITE_FIELD(array, kHeaderSize + index * kPointerSize, value);
|
| - array->GetHeap()->incremental_marking()->RecordWrite(array, value);
|
| + array->GetHeap()->incremental_marking()->RecordWrite(
|
| + array,
|
| + HeapObject::RawField(array, kHeaderSize + index * kPointerSize),
|
| + value);
|
| }
|
|
|
|
|
| @@ -2906,10 +2912,10 @@ ACCESSORS(Map, constructor, Object, kConstructorOffset)
|
|
|
| ACCESSORS(JSFunction, shared, SharedFunctionInfo, kSharedFunctionInfoOffset)
|
| ACCESSORS(JSFunction, literals, FixedArray, kLiteralsOffset)
|
| -ACCESSORS_GCSAFE(JSFunction,
|
| - next_function_link,
|
| - Object,
|
| - kNextFunctionLinkOffset)
|
| +ACCESSORS(JSFunction,
|
| + next_function_link,
|
| + Object,
|
| + kNextFunctionLinkOffset)
|
|
|
| ACCESSORS(GlobalObject, builtins, JSBuiltinsObject, kBuiltinsOffset)
|
| ACCESSORS(GlobalObject, global_context, Context, kGlobalContextOffset)
|
| @@ -3332,7 +3338,10 @@ void JSFunction::set_code(Code* value) {
|
| ASSERT(!HEAP->InNewSpace(value));
|
| Address entry = value->entry();
|
| WRITE_INTPTR_FIELD(this, kCodeEntryOffset, reinterpret_cast<intptr_t>(entry));
|
| - GetHeap()->incremental_marking()->RecordWrite(this, value);
|
| + GetHeap()->incremental_marking()->RecordWrite(
|
| + this,
|
| + HeapObject::RawField(this, kCodeEntryOffset),
|
| + value);
|
| }
|
|
|
|
|
|
|