void StatementList::analyzeProgramImpl(AnalysisResultPtr ar) { m_included = true; for (unsigned int i = 0; i < m_stmts.size(); i++) { StatementPtr stmt = m_stmts[i]; // effect testing if (ar->getPhase() == AnalysisResult::AnalyzeAll) { if (!stmt->hasEffect() && !stmt->is(Statement::KindOfStatementList)) { Compiler::Error(Compiler::StatementHasNoEffect, stmt); } if (stmt->is(Statement::KindOfExpStatement)) { static_pointer_cast<ExpStatement>(stmt)->analyzeShortCircuit(ar); } } bool scopeStmt = stmt->is(Statement::KindOfFunctionStatement) || stmt->is(Statement::KindOfClassStatement) || stmt->is(Statement::KindOfInterfaceStatement); if (ar->getPhase() != AnalysisResult::AnalyzeTopLevel || !scopeStmt) { /* Recurse when analyzing include/all OR when not a scope */ stmt->analyzeProgram(ar); } } }
void StatementList::analyzeProgramImpl(AnalysisResultPtr ar) { m_included = true; for (unsigned int i = 0; i < m_stmts.size(); i++) { StatementPtr stmt = m_stmts[i]; // effect testing if (ar->isFirstPass() && !stmt->hasEffect() && !stmt->is(Statement::KindOfStatementList)) { ar->getCodeError()->record(shared_from_this(), CodeError::StatementHasNoEffect, stmt); } // changing AUTOLOAD to includes if (ar->getPhase() == AnalysisResult::AnalyzeInclude && stmt->is(Statement::KindOfExpStatement)) { ExpStatementPtr expStmt = dynamic_pointer_cast<ExpStatement>(stmt); if (stmt->isFileLevel()) { expStmt->analyzeAutoload(ar); } expStmt->analyzeShortCircuit(ar); } bool scopeStmt = stmt->is(Statement::KindOfFunctionStatement) || stmt->is(Statement::KindOfClassStatement) || stmt->is(Statement::KindOfInterfaceStatement); if (ar->getPhase() != AnalysisResult::AnalyzeTopLevel || !scopeStmt) { /* Recurse when analyzing include/all OR when not a scope */ stmt->analyzeProgram(ar); } } }
void StatementList::analyzeProgram(AnalysisResultPtr ar) { m_included = true; for (unsigned int i = 0; i < m_stmts.size(); i++) { StatementPtr stmt = m_stmts[i]; // effect testing if (ar->getPhase() == AnalysisResult::AnalyzeAll) { if (!stmt->hasEffect() && !stmt->hasDecl() && !stmt->is(Statement::KindOfStatementList)) { Compiler::Error(Compiler::StatementHasNoEffect, stmt); } } stmt->analyzeProgram(ar); } }