Commit 2f76132a authored by vegorov@chromium.org's avatar vegorov@chromium.org

Fix two-phase lookup problem in FlexibleBodyVisitor and FixedBodyVisitor.

In FlexibleBodyVisitor and FixedBodyVisitor, the calls to IteratePointers, which lives in the base class BodyVisitorBase<StaticVisitor>, needs to be qualified with the dependent base class to be able to be bound during two-phase lookup.

Review URL: http://codereview.chromium.org/3119026


git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5303 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 40788b57
...@@ -199,14 +199,16 @@ class FlexibleBodyVisitor : public BodyVisitorBase<StaticVisitor> { ...@@ -199,14 +199,16 @@ class FlexibleBodyVisitor : public BodyVisitorBase<StaticVisitor> {
public: public:
static inline ReturnType Visit(Map* map, HeapObject* object) { static inline ReturnType Visit(Map* map, HeapObject* object) {
int object_size = BodyDescriptor::SizeOf(map, object); int object_size = BodyDescriptor::SizeOf(map, object);
IteratePointers(object, BodyDescriptor::kStartOffset, object_size); BodyVisitorBase<StaticVisitor>::IteratePointers(
object, BodyDescriptor::kStartOffset, object_size);
return static_cast<ReturnType>(object_size); return static_cast<ReturnType>(object_size);
} }
template<int object_size> template<int object_size>
static inline ReturnType VisitSpecialized(Map* map, HeapObject* object) { static inline ReturnType VisitSpecialized(Map* map, HeapObject* object) {
ASSERT(BodyDescriptor::SizeOf(map, object) == object_size); ASSERT(BodyDescriptor::SizeOf(map, object) == object_size);
IteratePointers(object, BodyDescriptor::kStartOffset, object_size); BodyVisitorBase<StaticVisitor>::IteratePointers(
object, BodyDescriptor::kStartOffset, object_size);
return static_cast<ReturnType>(object_size); return static_cast<ReturnType>(object_size);
} }
}; };
...@@ -216,9 +218,8 @@ template<typename StaticVisitor, typename BodyDescriptor, typename ReturnType> ...@@ -216,9 +218,8 @@ template<typename StaticVisitor, typename BodyDescriptor, typename ReturnType>
class FixedBodyVisitor : public BodyVisitorBase<StaticVisitor> { class FixedBodyVisitor : public BodyVisitorBase<StaticVisitor> {
public: public:
static inline ReturnType Visit(Map* map, HeapObject* object) { static inline ReturnType Visit(Map* map, HeapObject* object) {
IteratePointers(object, BodyVisitorBase<StaticVisitor>::IteratePointers(
BodyDescriptor::kStartOffset, object, BodyDescriptor::kStartOffset, BodyDescriptor::kEndOffset);
BodyDescriptor::kEndOffset);
return static_cast<ReturnType>(BodyDescriptor::kSize); return static_cast<ReturnType>(BodyDescriptor::kSize);
} }
}; };
......
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