bool IncludeExpression::analyzeInclude(AnalysisResultConstPtr ar, const std::string &include) { ConstructPtr self = shared_from_this(); FileScopePtr file = ar->findFileScope(include); if (!file) { Compiler::Error(Compiler::PHPIncludeFileNotFound, self); return false; } FunctionScopePtr func = getFunctionScope(); if (func && file->getPseudoMain()) { file->getPseudoMain()->addUse(func, BlockScope::UseKindInclude); } return true; }
ExpressionPtr IncludeExpression::postOptimize(AnalysisResultConstPtr ar) { if (!m_include.empty()) { if (!m_depsSet) { analyzeInclude(ar, m_include); m_depsSet = true; } FileScopePtr fs = ar->findFileScope(m_include); if (fs && fs->getPseudoMain()) { if (!Option::KeepStatementsWithNoEffect) { if (ExpressionPtr rep = fs->getEffectiveImpl(ar)) { recomputeEffects(); return replaceValue(rep->clone()); } } } else { m_include = ""; } } return ExpressionPtr(); }
FileScopeRawPtr IncludeExpression::getIncludedFile( AnalysisResultConstPtr ar) const { if (m_include.empty()) return FileScopeRawPtr(); return ar->findFileScope(m_include); }