Lines Matching defs:clause
178 // typename C is the clause enumeration.
202 const PC *clause{nullptr};
222 void SetContextClause(const PC &clause) {
223 GetContext().clauseSource = clause.source;
224 GetContext().clause = &clause;
263 GetContext().clauseInfo.emplace(type, GetContext().clause);
276 // Check if the given clause is present in the current context
279 // Check if the given clause is present in the given context
288 // Check if the given clause is present in the parent context
357 void CheckOnlyAllowedAfter(C clause, common::EnumSet<C, ClauseEnumSize> set);
361 // Check if a clause is allowed on a directive. Returns true if is and
363 bool CheckAllowed(C clause, bool warnInsteadOfError = false);
365 // Check that the clause appears only once. The counter is reset when the
366 // separator clause appears.
367 void CheckAllowedOncePerGroup(C clause, C separator);
370 C clause, C separator, common::EnumSet<C, ClauseEnumSize> set);
375 C clause, common::EnumSet<C, ClauseEnumSize> set);
380 const C &clause, const parser::ScalarIntConstantExpr &i);
382 void RequiresPositiveParameter(const C &clause,
386 const C &clause, const std::optional<parser::ScalarIntConstantExpr> &o);
388 virtual llvm::StringRef getClauseName(C clause) { return ""; };
410 // clause.
413 C clause, common::EnumSet<C, ClauseEnumSize> set) {
416 if (cl == clause) {
422 "Clause %s is not allowed after clause %s on the %s "
425 parser::ToUpperCaseLetters(getClauseName(clause).str()),
431 // Check that at least one clause is attached to the directive.
437 "At least one clause is required on the %s directive"_err_en_US,
455 // Check that at least one clause in the required set is present on the
468 // No clause matched in the actual clauses list
472 "At least one of %s clause should appear on the %s directive"_port_en_US,
477 "At least one of %s clause must appear on the %s directive"_err_en_US,
493 C clause, bool warnInsteadOfError) {
494 if (!GetContext().allowedClauses.test(clause) &&
495 !GetContext().allowedOnceClauses.test(clause) &&
496 !GetContext().allowedExclusiveClauses.test(clause) &&
497 !GetContext().requiredClauses.test(clause)) {
501 "%s clause is not allowed on the %s directive and will be ignored"_port_en_US,
502 parser::ToUpperCaseLetters(getClauseName(clause).str()),
506 "%s clause is not allowed on the %s directive"_err_en_US,
507 parser::ToUpperCaseLetters(getClauseName(clause).str()),
512 if ((GetContext().allowedOnceClauses.test(clause) ||
513 GetContext().allowedExclusiveClauses.test(clause)) &&
514 FindClause(clause)) {
516 "At most one %s clause can appear on the %s directive"_err_en_US,
517 parser::ToUpperCaseLetters(getClauseName(clause).str()),
521 if (GetContext().allowedExclusiveClauses.test(clause)) {
532 parser::ToUpperCaseLetters(getClauseName(clause).str()),
540 SetContextClauseInfo(clause);
541 AddClauseToCrtContext(clause);
542 AddClauseToCrtGroupInContext(clause);
547 // given clause appears.
550 ClauseEnumSize>::CheckNotAllowedIfClause(C clause,
552 if (!llvm::is_contained(GetContext().actualClauses, clause)) {
559 "Clause %s is not allowed if clause %s appears on the %s directive"_err_en_US,
561 parser::ToUpperCaseLetters(getClauseName(clause).str()),
569 ClauseEnumSize>::CheckAllowedOncePerGroup(C clause, C separator) {
572 if (cl == clause) {
575 "At most one %s clause can appear on the %s directive or in group separated by the %s clause"_err_en_US,
576 parser::ToUpperCaseLetters(getClauseName(clause).str()),
590 ClauseEnumSize>::CheckMutuallyExclusivePerGroup(C clause, C separator,
600 "Clause %s is not allowed if clause %s appears on the %s directive"_err_en_US,
601 parser::ToUpperCaseLetters(getClauseName(clause).str()),
611 "Clause %s is not allowed if clause %s appears on the %s directive"_err_en_US,
612 parser::ToUpperCaseLetters(getClauseName(clause).str()),
619 // Check the value of the clause is a constant positive integer.
622 ClauseEnumSize>::RequiresConstantPositiveParameter(const C &clause,
627 "The parameter of the %s clause must be "
629 parser::ToUpperCaseLetters(getClauseName(clause).str()));
634 // Check the value of the clause is a constant positive parameter.
637 ClauseEnumSize>::OptionalConstantPositiveParameter(const C &clause,
640 RequiresConstantPositiveParameter(clause, o.value());
653 // Check the value of the clause is a positive parameter.
656 ClauseEnumSize>::RequiresPositiveParameter(const C &clause,
661 "The %s of the %s clause must be "
664 parser::ToUpperCaseLetters(getClauseName(clause).str()));