123456789101112131415161718192021222324252627282930313233343536373839404142 |
- // Copyright 2015 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "CheckDispatchVisitor.h"
- #include "Config.h"
- #include "RecordInfo.h"
- using namespace clang;
- CheckDispatchVisitor::CheckDispatchVisitor(RecordInfo* receiver)
- : receiver_(receiver),
- dispatched_to_receiver_(false) {
- }
- bool CheckDispatchVisitor::dispatched_to_receiver() {
- return dispatched_to_receiver_;
- }
- bool CheckDispatchVisitor::VisitMemberExpr(MemberExpr* member) {
- if (CXXMethodDecl* fn = dyn_cast<CXXMethodDecl>(member->getMemberDecl())) {
- if (fn->getParent() == receiver_->record())
- dispatched_to_receiver_ = true;
- }
- return true;
- }
- bool CheckDispatchVisitor::VisitUnresolvedMemberExpr(
- UnresolvedMemberExpr* member) {
- for (Decl* decl : member->decls()) {
- if (CXXMethodDecl* method = dyn_cast<CXXMethodDecl>(decl)) {
- if (method->getParent() == receiver_->record() &&
- Config::GetTraceMethodType(method) ==
- Config::TRACE_AFTER_DISPATCH_METHOD) {
- dispatched_to_receiver_ = true;
- return true;
- }
- }
- }
- return true;
- }
|