Lines Matching refs:parser

34 using namespace parser::literals;
36 using Bounds = parser::LoopControl::Bounds;
39 static const parser::ConcurrentHeader &GetConcurrentHeader( in GetConcurrentHeader()
40 const parser::LoopControl &loopControl) { in GetConcurrentHeader()
42 std::get<parser::LoopControl::Concurrent>(loopControl.u)}; in GetConcurrentHeader()
43 return std::get<parser::ConcurrentHeader>(concurrent.t); in GetConcurrentHeader()
45 static const parser::ConcurrentHeader &GetConcurrentHeader( in GetConcurrentHeader()
46 const parser::ForallConstruct &construct) { in GetConcurrentHeader()
48 std::get<parser::Statement<parser::ForallConstructStmt>>(construct.t)}; in GetConcurrentHeader()
49 return std::get<common::Indirection<parser::ConcurrentHeader>>( in GetConcurrentHeader()
53 static const parser::ConcurrentHeader &GetConcurrentHeader( in GetConcurrentHeader()
54 const parser::ForallStmt &stmt) { in GetConcurrentHeader()
55 return std::get<common::Indirection<parser::ConcurrentHeader>>(stmt.t) in GetConcurrentHeader()
59 static const std::list<parser::ConcurrentControl> &GetControls(const T &x) { in GetControls()
60 return std::get<std::list<parser::ConcurrentControl>>( in GetControls()
64 static const Bounds &GetBounds(const parser::DoConstruct &doConstruct) { in GetBounds()
69 static const parser::Name &GetDoVariable( in GetDoVariable()
70 const parser::DoConstruct &doConstruct) { in GetDoVariable()
75 static parser::MessageFixedText GetEnclosingDoMsg() { in GetEnclosingDoMsg()
79 static void SayWithDo(SemanticsContext &context, parser::CharBlock stmtLocation, in SayWithDo()
80 parser::MessageFixedText &&message, parser::CharBlock doLocation) { in SayWithDo()
88 SemanticsContext &context, parser::CharBlock doConcurrentSourcePosition) in DoConcurrentBodyEnforce()
91 std::set<parser::Label> labels() { return labels_; } in labels()
95 template <typename T> bool Pre(const parser::Statement<T> &statement) { in Pre()
103 template <typename T> bool Pre(const parser::UnlabeledStatement<T> &stmt) { in Pre()
176 parser::CharBlock location, const Symbol &entity, const char *reason) { in SayDeallocateOfPolymorph()
188 void Post(const parser::BlockConstruct &blockConstruct) { in Post()
190 std::get<parser::Statement<parser::EndBlockStmt>>(blockConstruct.t)}; in Post()
210 void Post(const parser::AssignmentStmt &stmt) { in Post()
211 const auto &variable{std::get<parser::Variable>(stmt.t)}; in Post()
226 void Post(const parser::DeallocateStmt &stmt) { in Post()
228 std::get<std::list<parser::AllocateObject>>(stmt.t)}; in Post()
230 const parser::Name &name{GetLastName(allocateObject)}; in Post()
248 void Post(const parser::ExecutableConstruct &construct) { in Post()
250 const parser::CharBlock statementLocation{ in Post()
263 void Post(const parser::ReturnStmt &) { in Post()
274 void Post(const parser::ProcedureDesignator &procedureDesignator) { in Post()
275 if (auto *name{std::get_if<parser::Name>(&procedureDesignator.u)}) { in Post()
293 auto &component{std::get<parser::ProcComponentRef>(procedureDesignator.u) in Post()
305 void Post(const parser::IoControlSpec &ioControlSpec) { in Post()
307 std::get_if<parser::IoControlSpec::CharExpr>(&ioControlSpec.u)}) { in Post()
308 if (std::get<parser::IoControlSpec::CharExpr::Kind>(charExpr->t) == in Post()
309 parser::IoControlSpec::CharExpr::Kind::Advance) { in Post()
328 std::set<parser::Label> labels_;
329 parser::CharBlock currentStatementSourcePosition_;
331 parser::CharBlock doConcurrentSourcePosition_;
339 SemanticsContext &context, parser::CharBlock doConcurrentSourcePosition) in DoConcurrentVariableEnforce()
348 void Post(const parser::Name &name) { in Post()
365 parser::CharBlock doConcurrentSourcePosition_;
380 void DefineDoVariables(const parser::DoConstruct &doConstruct) { in DefineDoVariables()
391 void ResetDoVariables(const parser::DoConstruct &doConstruct) { in ResetDoVariables()
401 void ActivateIndexVars(const std::list<parser::ConcurrentControl> &controls) { in ActivateIndexVars()
403 context_.ActivateIndexVar(std::get<parser::Name>(control.t), kind_); in ActivateIndexVars()
407 const std::list<parser::ConcurrentControl> &controls) { in DeactivateIndexVars()
409 context_.DeactivateIndexVar(std::get<parser::Name>(control.t)); in DeactivateIndexVars()
413 void Check(const parser::DoConstruct &doConstruct) { in Check()
425 void Check(const parser::ForallStmt &stmt) { in Check()
428 void Check(const parser::ForallConstruct &construct) { in Check()
432 void Check(const parser::ForallAssignmentStmt &stmt) { in Check()
467 void SayBadDoControl(parser::CharBlock sourceLocation) { in SayBadDoControl()
471 void CheckDoControl(const parser::CharBlock &sourceLocation, bool isReal) { in CheckDoControl()
483 void CheckDoVariable(const parser::ScalarName &scalarName) { in CheckDoVariable()
484 const parser::CharBlock &sourceLocation{scalarName.thing.source}; in CheckDoVariable()
504 void CheckDoExpression(const parser::ScalarExpr &scalarExpression) { in CheckDoExpression()
508 const parser::CharBlock &loc{scalarExpression.thing.value().source}; in CheckDoExpression()
514 void CheckDoNormal(const parser::DoConstruct &doConstruct) { in CheckDoNormal()
530 void CheckDoConcurrent(const parser::DoConstruct &doConstruct) { in CheckDoConcurrent()
532 std::get<parser::Statement<parser::NonLabelDoStmt>>(doConstruct.t)}; in CheckDoConcurrent()
535 const parser::Block &block{std::get<parser::Block>(doConstruct.t)}; in CheckDoConcurrent()
537 parser::Walk(block, doConcurrentBodyEnforce); in CheckDoConcurrent()
542 parser::Walk(block, doConcurrentLabelEnforce); in CheckDoConcurrent()
554 const std::list<parser::LocalitySpec> &localitySpecs) const { in GatherLocals()
560 if (const auto *names{std::get_if<parser::LocalitySpec::Local>(&ls.u)}) { in GatherLocals()
563 for (const parser::Name &name : names->v) { in GatherLocals()
574 const parser::Expr &expression) const { in GatherSymbolsFromExpression()
585 void CheckMaskIsPure(const parser::ScalarLogicalExpr &mask) const { in CheckMaskIsPure()
590 context_.SayWithDecl(ref, parser::Unwrap<parser::Expr>(mask)->source, in CheckMaskIsPure()
599 const UnorderedSymbolSet &uses, parser::MessageFixedText &&errorMessage, in CheckNoCollisions()
600 const parser::CharBlock &refPosition) const { in CheckNoCollisions()
611 const parser::ScalarIntExpr &expr) const { in HasNoReferences()
619 void CheckMaskDoesNotReferenceLocal(const parser::ScalarLogicalExpr &mask, in CheckMaskDoesNotReferenceLocal()
630 void CheckExprDoesNotReferenceLocal(const parser::ScalarIntExpr &expr, in CheckExprDoesNotReferenceLocal()
642 const std::list<parser::LocalitySpec> &localitySpecs, in CheckDefaultNoneImpliesExplicitLocality()
643 const parser::Block &block) const { in CheckDefaultNoneImpliesExplicitLocality()
646 if (std::holds_alternative<parser::LocalitySpec::DefaultNone>(ls.u)) { in CheckDefaultNoneImpliesExplicitLocality()
659 parser::Walk(block, doConcurrentVariableEnforce); in CheckDefaultNoneImpliesExplicitLocality()
664 void CheckConcurrentHeader(const parser::ConcurrentHeader &header) const { in CheckConcurrentHeader()
666 std::get<std::optional<parser::ScalarLogicalExpr>>(header.t)}) { in CheckConcurrentHeader()
669 auto &controls{std::get<std::list<parser::ConcurrentControl>>(header.t)}; in CheckConcurrentHeader()
671 for (const parser::ConcurrentControl &control : controls) { in CheckConcurrentHeader()
672 const auto &indexName{std::get<parser::Name>(control.t)}; in CheckConcurrentHeader()
678 for (const parser::ConcurrentControl &control : controls) { in CheckConcurrentHeader()
682 std::get<std::optional<parser::ScalarIntExpr>>(control.t)}) { in CheckConcurrentHeader()
683 const parser::Expr &expr{intExpr->thing.thing.value()}; in CheckConcurrentHeader()
697 const parser::LoopControl &control, const parser::Block &block) const { in CheckLocalitySpecs()
699 std::get<parser::LoopControl::Concurrent>(control.u)}; in CheckLocalitySpecs()
700 const auto &header{std::get<parser::ConcurrentHeader>(concurrent.t)}; in CheckLocalitySpecs()
702 std::get<std::list<parser::LocalitySpec>>(concurrent.t)}; in CheckLocalitySpecs()
709 std::get<std::optional<parser::ScalarIntExpr>>(c.t)}) { in CheckLocalitySpecs()
714 std::get<std::optional<parser::ScalarLogicalExpr>>(header.t)}) { in CheckLocalitySpecs()
722 void CheckConcurrentLoopControl(const parser::LoopControl &control) const { in CheckConcurrentLoopControl()
724 std::get<parser::LoopControl::Concurrent>(control.u)}; in CheckConcurrentLoopControl()
725 CheckConcurrentHeader(std::get<parser::ConcurrentHeader>(concurrent.t)); in CheckConcurrentLoopControl()
788 parser::CharBlock currentStatementSourcePosition_;
791 void DoForallChecker::Enter(const parser::DoConstruct &doConstruct) { in Enter()
796 void DoForallChecker::Leave(const parser::DoConstruct &doConstruct) { in Leave()
802 void DoForallChecker::Enter(const parser::ForallConstruct &construct) { in Enter()
806 void DoForallChecker::Leave(const parser::ForallConstruct &construct) { in Leave()
812 void DoForallChecker::Enter(const parser::ForallStmt &stmt) { in Enter()
816 void DoForallChecker::Leave(const parser::ForallStmt &stmt) { in Leave()
821 void DoForallChecker::Leave(const parser::ForallAssignmentStmt &stmt) { in Leave()
827 static parser::CharBlock GetConstructPosition(const A &a) { in GetConstructPosition()
831 static parser::CharBlock GetNodePosition(const ConstructNode &construct) { in GetNodePosition()
844 static const parser::DoConstruct *MaybeGetDoConstruct( in MaybeGetDoConstruct()
847 std::get_if<const parser::DoConstruct *>(&construct)}) { in MaybeGetDoConstruct()
855 const parser::DoConstruct *doConstruct{MaybeGetDoConstruct(construct)}; in ConstructIsDoConcurrent()
864 [&](const parser::DoConstruct *doConstructPtr) { in CheckForBadLeave()
871 [&](const parser::CriticalConstruct *) { in CheckForBadLeave()
875 [&](const parser::ChangeTeamConstruct *) { in CheckForBadLeave()
884 static bool StmtMatchesConstruct(const parser::Name *stmtName, in StmtMatchesConstruct()
885 StmtType stmtType, const std::optional<parser::Name> &constructName, in StmtMatchesConstruct()
910 StmtType stmtType, const parser::Name *stmtName) const { in CheckNesting()
914 const std::optional<parser::Name> &constructName{ in CheckNesting()
932 void DoForallChecker::Enter(const parser::CycleStmt &cycleStmt) { in Enter()
937 void DoForallChecker::Enter(const parser::ExitStmt &exitStmt) { in Enter()
941 void DoForallChecker::Leave(const parser::AssignmentStmt &stmt) { in Leave()
942 const auto &variable{std::get<parser::Variable>(stmt.t)}; in Leave()
947 const parser::CharBlock location, SemanticsContext &context) { in CheckIfArgIsDoVar()
970 void DoForallChecker::Leave(const parser::CallStmt &callStmt) { in Leave()
973 std::get<std::list<parser::ActualArgSpec>>(callStmt.v.t)}; in Leave()
980 const auto &parsedArg{std::get<parser::ActualArg>(parsedArgIter->t)}; in Leave()
985 std::get_if<common::Indirection<parser::Expr>>(&parsedArg.u)}) { in Leave()
993 void DoForallChecker::Leave(const parser::ConnectSpec &connectSpec) { in Leave()
995 std::get_if<parser::ConnectSpec::Newunit>(&connectSpec.u)}; in Leave()
1021 void DoForallChecker::Enter(const parser::Expr &parsedExpr) { ++exprDepth_; } in Enter()
1023 void DoForallChecker::Leave(const parser::Expr &parsedExpr) { in Leave()
1035 void DoForallChecker::Leave(const parser::InquireSpec &inquireSpec) { in Leave()
1036 const auto *intVar{std::get_if<parser::InquireSpec::IntVar>(&inquireSpec.u)}; in Leave()
1038 const auto &scalar{std::get<parser::ScalarIntVariable>(intVar->t)}; in Leave()
1043 void DoForallChecker::Leave(const parser::IoControlSpec &ioControlSpec) { in Leave()
1044 const auto *size{std::get_if<parser::IoControlSpec::Size>(&ioControlSpec.u)}; in Leave()
1050 void DoForallChecker::Leave(const parser::OutputImpliedDo &outputImpliedDo) { in Leave()
1051 const auto &control{std::get<parser::IoImpliedDoControl>(outputImpliedDo.t)}; in Leave()
1052 const parser::Name &name{control.name.thing.thing}; in Leave()
1056 void DoForallChecker::Leave(const parser::StatVariable &statVariable) { in Leave()