Chromium Code Reviews| Index: tools/clang/blink_gc_plugin/RecordInfo.cpp |
| diff --git a/tools/clang/blink_gc_plugin/RecordInfo.cpp b/tools/clang/blink_gc_plugin/RecordInfo.cpp |
| index 1bf954e5c5f7bcd37fe110de69c6a23b1d531c99..824fb4ac124a865b829bff6c118c275f0589521f 100644 |
| --- a/tools/clang/blink_gc_plugin/RecordInfo.cpp |
| +++ b/tools/clang/blink_gc_plugin/RecordInfo.cpp |
| @@ -426,39 +426,45 @@ void RecordInfo::DetermineTracingMethods() { |
| determined_trace_methods_ = true; |
| if (Config::IsGCBase(name_)) |
| return; |
| - CXXMethodDecl* trace = 0; |
| - CXXMethodDecl* traceAfterDispatch = 0; |
| - bool isTraceAfterDispatch; |
| - bool hasAdjustAndMark = false; |
| - bool hasIsHeapObjectAlive = false; |
| + CXXMethodDecl* trace = nullptr; |
| + CXXMethodDecl* trace_after_dispatch = nullptr; |
| + bool has_adjust_and_mark = false; |
| + bool has_is_heap_object_alive = false; |
| for (CXXRecordDecl::method_iterator it = record_->method_begin(); |
| it != record_->method_end(); |
| ++it) { |
| - if (Config::IsTraceMethod(*it, &isTraceAfterDispatch)) { |
| - if (isTraceAfterDispatch) { |
| - traceAfterDispatch = *it; |
| - } else { |
| + switch (Config::GetTraceMethodType(*it)) { |
| + case Config::NOT_TRACE_METHOD: |
| + if (it->getNameAsString() == kFinalizeName) { |
|
kouhei (in TOK)
2015/02/20 08:07:21
Should we also identify those in Config::GetTraceM
Yuta Kitamura
2015/02/20 09:40:27
I somewhat agree that it's silly to sprinkle direc
|
| + finalize_dispatch_method_ = *it; |
| + } else if (it->getNameAsString() == kAdjustAndMarkName) { |
| + has_adjust_and_mark = true; |
| + } else if (it->getNameAsString() == kIsHeapObjectAliveName) { |
| + has_is_heap_object_alive = true; |
| + } |
| + break; |
| + case Config::TRACE_METHOD: |
| trace = *it; |
| - } |
| - } else if (it->getNameAsString() == kFinalizeName) { |
| - finalize_dispatch_method_ = *it; |
| - } else if (it->getNameAsString() == kAdjustAndMarkName) { |
| - hasAdjustAndMark = true; |
| - } else if (it->getNameAsString() == kIsHeapObjectAliveName) { |
| - hasIsHeapObjectAlive = true; |
| + break; |
| + case Config::TRACE_AFTER_DISPATCH_METHOD: |
| + trace_after_dispatch = *it; |
| + break; |
| + case Config::TRACE_IMPL_METHOD: |
| + case Config::TRACE_AFTER_DISPATCH_IMPL_METHOD: |
| + break; |
| } |
| } |
| // Record if class defines the two GCMixin methods. |
| has_gc_mixin_methods_ = |
| - hasAdjustAndMark && hasIsHeapObjectAlive ? kTrue : kFalse; |
| - if (traceAfterDispatch) { |
| - trace_method_ = traceAfterDispatch; |
| + has_adjust_and_mark && has_is_heap_object_alive ? kTrue : kFalse; |
| + if (trace_after_dispatch) { |
| + trace_method_ = trace_after_dispatch; |
| trace_dispatch_method_ = trace; |
| } else { |
| // TODO: Can we never have a dispatch method called trace without the same |
| // class defining a traceAfterDispatch method? |
| trace_method_ = trace; |
| - trace_dispatch_method_ = 0; |
| + trace_dispatch_method_ = nullptr; |
| } |
| if (trace_dispatch_method_ && finalize_dispatch_method_) |
| return; |