bool RSCheckAST::Validate() { clang::TranslationUnitDecl *TUDecl = C.getTranslationUnitDecl(); for (clang::DeclContext::decl_iterator DI = TUDecl->decls_begin(), DE = TUDecl->decls_end(); DI != DE; DI++) { // Following tests are not applicable to implicitly defined types if (DI->isImplicit()) continue; if (!Slang::IsLocInRSHeaderFile(DI->getLocStart(), mSM)) { if (clang::VarDecl *VD = llvm::dyn_cast<clang::VarDecl>(*DI)) { ValidateVarDecl(VD); } else if (clang::FunctionDecl *FD = llvm::dyn_cast<clang::FunctionDecl>(*DI)) { ValidateFunctionDecl(FD); } else if (clang::Stmt *Body = (*DI)->getBody()) { Visit(Body); } } } return mValid; }
void RSCheckAST::VisitDeclStmt(clang::DeclStmt *DS) { if (!SlangRS::IsLocInRSHeaderFile(DS->getLocStart(), mSM)) { for (clang::DeclStmt::decl_iterator I = DS->decl_begin(), E = DS->decl_end(); I != E; ++I) { if (clang::VarDecl *VD = llvm::dyn_cast<clang::VarDecl>(*I)) { ValidateVarDecl(VD); } else if (clang::FunctionDecl *FD = llvm::dyn_cast<clang::FunctionDecl>(*I)) { ValidateFunctionDecl(FD); } } } }
bool RSCheckAST::Validate() { clang::TranslationUnitDecl *TUDecl = C.getTranslationUnitDecl(); for (clang::DeclContext::decl_iterator DI = TUDecl->decls_begin(), DE = TUDecl->decls_end(); DI != DE; DI++) { if (!SlangRS::IsLocInRSHeaderFile(DI->getLocStart(), mSM)) { if (clang::VarDecl *VD = llvm::dyn_cast<clang::VarDecl>(*DI)) { ValidateVarDecl(VD); } else if (clang::FunctionDecl *FD = llvm::dyn_cast<clang::FunctionDecl>(*DI)) { ValidateFunctionDecl(FD); } else if (clang::Stmt *Body = (*DI)->getBody()) { Visit(Body); } } } return mValid; }