Exemplo n.º 1
0
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);
  }
}
Exemplo n.º 2
0
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);
}