Commit 4d45ed45 authored by mlippautz's avatar mlippautz Committed by Commit bot

[heap] Simplify marking of JSFunction and SFI

BUG=chromium:651828

Review-Url: https://codereview.chromium.org/2389183002
Cr-Commit-Position: refs/heads/master@{#39975}
parent 50c458a3
...@@ -449,11 +449,11 @@ void StaticMarkingVisitor<StaticVisitor>::VisitSharedFunctionInfo( ...@@ -449,11 +449,11 @@ void StaticMarkingVisitor<StaticVisitor>::VisitSharedFunctionInfo(
// optimized code. // optimized code.
collector->code_flusher()->AddCandidate(shared); collector->code_flusher()->AddCandidate(shared);
// Treat the reference to the code object weakly. // Treat the reference to the code object weakly.
VisitSharedFunctionInfoWeakCode(heap, object); VisitSharedFunctionInfoWeakCode(map, object);
return; return;
} }
} }
VisitSharedFunctionInfoStrongCode(heap, object); VisitSharedFunctionInfoStrongCode(map, object);
} }
...@@ -621,39 +621,23 @@ bool StaticMarkingVisitor<StaticVisitor>::IsFlushable( ...@@ -621,39 +621,23 @@ bool StaticMarkingVisitor<StaticVisitor>::IsFlushable(
return true; return true;
} }
template <typename StaticVisitor> template <typename StaticVisitor>
void StaticMarkingVisitor<StaticVisitor>::VisitSharedFunctionInfoStrongCode( void StaticMarkingVisitor<StaticVisitor>::VisitSharedFunctionInfoStrongCode(
Heap* heap, HeapObject* object) { Map* map, HeapObject* object) {
Object** start_slot = HeapObject::RawField( FixedBodyVisitor<StaticVisitor, SharedFunctionInfo::BodyDescriptor,
object, SharedFunctionInfo::BodyDescriptor::kStartOffset); void>::Visit(map, object);
Object** end_slot = HeapObject::RawField(
object, SharedFunctionInfo::BodyDescriptor::kEndOffset);
StaticVisitor::VisitPointers(heap, object, start_slot, end_slot);
} }
template <typename StaticVisitor> template <typename StaticVisitor>
void StaticMarkingVisitor<StaticVisitor>::VisitSharedFunctionInfoWeakCode( void StaticMarkingVisitor<StaticVisitor>::VisitSharedFunctionInfoWeakCode(
Heap* heap, HeapObject* object) { Map* map, HeapObject* object) {
Object** name_slot =
HeapObject::RawField(object, SharedFunctionInfo::kNameOffset);
StaticVisitor::VisitPointer(heap, object, name_slot);
// Skip visiting kCodeOffset as it is treated weakly here. // Skip visiting kCodeOffset as it is treated weakly here.
STATIC_ASSERT(SharedFunctionInfo::kNameOffset + kPointerSize == STATIC_ASSERT(SharedFunctionInfo::kCodeOffset <
SharedFunctionInfo::kCodeOffset); SharedFunctionInfo::BodyDescriptorWeakCode::kStartOffset);
STATIC_ASSERT(SharedFunctionInfo::kCodeOffset + kPointerSize == FixedBodyVisitor<StaticVisitor, SharedFunctionInfo::BodyDescriptorWeakCode,
SharedFunctionInfo::kOptimizedCodeMapOffset); void>::Visit(map, object);
Object** start_slot =
HeapObject::RawField(object, SharedFunctionInfo::kOptimizedCodeMapOffset);
Object** end_slot = HeapObject::RawField(
object, SharedFunctionInfo::BodyDescriptor::kEndOffset);
StaticVisitor::VisitPointers(heap, object, start_slot, end_slot);
} }
template <typename StaticVisitor> template <typename StaticVisitor>
void StaticMarkingVisitor<StaticVisitor>::VisitJSFunctionStrongCode( void StaticMarkingVisitor<StaticVisitor>::VisitJSFunctionStrongCode(
Map* map, HeapObject* object) { Map* map, HeapObject* object) {
......
...@@ -386,8 +386,8 @@ class StaticMarkingVisitor : public StaticVisitorBase { ...@@ -386,8 +386,8 @@ class StaticMarkingVisitor : public StaticVisitorBase {
// Helpers used by code flushing support that visit pointer fields and treat // Helpers used by code flushing support that visit pointer fields and treat
// references to code objects either strongly or weakly. // references to code objects either strongly or weakly.
static void VisitSharedFunctionInfoStrongCode(Heap* heap, HeapObject* object); static void VisitSharedFunctionInfoStrongCode(Map* map, HeapObject* object);
static void VisitSharedFunctionInfoWeakCode(Heap* heap, HeapObject* object); static void VisitSharedFunctionInfoWeakCode(Map* map, HeapObject* object);
static void VisitJSFunctionStrongCode(Map* map, HeapObject* object); static void VisitJSFunctionStrongCode(Map* map, HeapObject* object);
static void VisitJSFunctionWeakCode(Map* map, HeapObject* object); static void VisitJSFunctionWeakCode(Map* map, HeapObject* object);
......
...@@ -7543,9 +7543,9 @@ class SharedFunctionInfo: public HeapObject { ...@@ -7543,9 +7543,9 @@ class SharedFunctionInfo: public HeapObject {
// Layout description. // Layout description.
// Pointer fields. // Pointer fields.
static const int kNameOffset = HeapObject::kHeaderSize; static const int kCodeOffset = HeapObject::kHeaderSize;
static const int kCodeOffset = kNameOffset + kPointerSize; static const int kNameOffset = kCodeOffset + kPointerSize;
static const int kOptimizedCodeMapOffset = kCodeOffset + kPointerSize; static const int kOptimizedCodeMapOffset = kNameOffset + kPointerSize;
static const int kScopeInfoOffset = kOptimizedCodeMapOffset + kPointerSize; static const int kScopeInfoOffset = kOptimizedCodeMapOffset + kPointerSize;
static const int kOuterScopeInfoOffset = kScopeInfoOffset + kPointerSize; static const int kOuterScopeInfoOffset = kScopeInfoOffset + kPointerSize;
static const int kConstructStubOffset = kOuterScopeInfoOffset + kPointerSize; static const int kConstructStubOffset = kOuterScopeInfoOffset + kPointerSize;
...@@ -7670,9 +7670,12 @@ class SharedFunctionInfo: public HeapObject { ...@@ -7670,9 +7670,12 @@ class SharedFunctionInfo: public HeapObject {
static const int kAlignedSize = POINTER_SIZE_ALIGN(kSize); static const int kAlignedSize = POINTER_SIZE_ALIGN(kSize);
typedef FixedBodyDescriptor<kCodeOffset,
kLastPointerFieldOffset + kPointerSize, kSize>
BodyDescriptor;
typedef FixedBodyDescriptor<kNameOffset, typedef FixedBodyDescriptor<kNameOffset,
kLastPointerFieldOffset + kPointerSize, kLastPointerFieldOffset + kPointerSize, kSize>
kSize> BodyDescriptor; BodyDescriptorWeakCode;
// Bit positions in start_position_and_type. // Bit positions in start_position_and_type.
// The source code start position is in the 30 most significant bits of // The source code start position is in the 30 most significant bits of
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment