void ClassScope::applyTraitRules(TMIData& tmid) { ClassStatementPtr classStmt = dynamic_pointer_cast<ClassStatement>(getStmt()); assert(classStmt); StatementListPtr stmts = classStmt->getStmts(); if (!stmts) return; for (int s = 0; s < stmts->getCount(); s++) { StatementPtr stmt = (*stmts)[s]; UseTraitStatementPtr useStmt = dynamic_pointer_cast<UseTraitStatement>(stmt); if (!useStmt) continue; StatementListPtr rules = useStmt->getStmts(); for (int r = 0; r < rules->getCount(); r++) { StatementPtr rule = (*rules)[r]; TraitPrecStatementPtr precStmt = dynamic_pointer_cast<TraitPrecStatement>(rule); if (precStmt) { tmid.applyPrecRule(precStmt); } else { TraitAliasStatementPtr aliasStmt = dynamic_pointer_cast<TraitAliasStatement>(rule); assert(aliasStmt); tmid.applyAliasRule(aliasStmt, this); } } } }
void ClassScope::applyTraitRules(AnalysisResultPtr ar) { assert(Option::WholeProgram); ClassStatementPtr classStmt = dynamic_pointer_cast<ClassStatement>(getStmt()); assert(classStmt); StatementListPtr stmts = classStmt->getStmts(); if (!stmts) return; for (int s = 0; s < stmts->getCount(); s++) { StatementPtr stmt = (*stmts)[s]; UseTraitStatementPtr useStmt = dynamic_pointer_cast<UseTraitStatement>(stmt); if (!useStmt) continue; StatementListPtr rules = useStmt->getStmts(); for (int r = 0; r < rules->getCount(); r++) { StatementPtr rule = (*rules)[r]; TraitPrecStatementPtr precStmt = dynamic_pointer_cast<TraitPrecStatement>(rule); if (precStmt) { applyTraitPrecRule(precStmt); } else { TraitAliasStatementPtr aliasStmt = dynamic_pointer_cast<TraitAliasStatement>(rule); assert(aliasStmt); applyTraitAliasRule(ar, aliasStmt); } } } }