void ClassScope::importClassRequirements(AnalysisResultPtr ar, ClassScopePtr trait) { /* Defer enforcement of requirements until the creation of the class * happens at runtime. */ for (auto const& req : trait->getClassRequiredExtends()) { addClassRequirement(req, true); } for (auto const& req : trait->getClassRequiredImplements()) { addClassRequirement(req, false); } }
void ClassScope::importClassRequirements(AnalysisResultPtr ar, ClassScopePtr trait) { auto addRequires = [&] ( const boost::container::flat_set<std::string>& reqs, bool isExtends) { for (auto const& req : reqs) { if (!addClassRequirement(req, isExtends)) { getStmt()->analysisTimeFatal( Compiler::InvalidTraitStatement, "Conflicting requirements for '%s'", req.c_str()); } } }; addRequires(trait->getClassRequiredExtends(), true); addRequires(trait->getClassRequiredImplements(), false); }