Lines Matching defs:Walk
47 // overrides the parse tree walker's default Walk() over the descendents.
51 return false; // Walk() does not visit descendents
62 return true; // there's no Unparse() defined here, Walk() the descendents
82 Walk(x.label, " ");
91 Walk("", x.v, "\n"); // put blank lines between ProgramUnits
142 Word("TYPE("), Walk(x.derived), Put(')');
145 Word("CLASS("), Walk(x.derived), Put(')');
150 Word("RECORD/"), Walk(x.v), Put('/');
180 Put('('), Word("KIND="), Walk(y), Put(')');
182 [&](const KindSelector::StarSize &y) { Put('*'), Walk(y.v); },
188 Walk("_", std::get<std::optional<KindParam>>(x.t));
192 Walk("_", std::get<std::optional<KindParam>>(x.t));
198 Put(x.real.source.ToString()), Walk("_", x.kind);
201 Put('('), Walk(x.t, ","), Put(')');
204 Put('('), Word("KIND="), Walk(x.kind);
205 Walk(", LEN=", x.length), Put(')');
210 Put('('), Word("LEN="), Walk(y), Put(')');
212 [&](const CharLength &y) { Put('*'), Walk(y); },
219 [&](const TypeParamValue &y) { Put('('), Walk(y), Put(')'); },
220 [&](const std::int64_t &y) { Walk(y); },
227 Walk(*k), Put('_');
244 Walk("_", std::get<std::optional<KindParam>>(x.t));
247 Word("TYPE"), Walk(", ", std::get<std::list<TypeAttrSpec>>(x.t), ", ");
248 Put(" :: "), Walk(std::get<Name>(x.t));
249 Walk("(", std::get<std::list<Name>>(x.t), ", ", ")");
257 Word("EXTENDS("), Walk(x.v), Put(')');
260 Outdent(), Word("END TYPE"), Walk(" ", x.v);
266 Walk(std::get<IntegerTypeSpec>(x.t));
267 Put(", "), Walk(std::get<common::TypeParamAttr>(x.t));
268 Put(" :: "), Walk(std::get<std::list<TypeParamDecl>>(x.t), ", ");
271 Walk(std::get<Name>(x.t));
272 Walk("=", std::get<std::optional<ScalarIntConstantExpr>>(x.t));
278 Walk(dts), Walk(", ", attrs, ", ");
299 Put(' '), Walk(decls, ", ");
323 Walk(std::get<ObjectName>(x.t));
324 Walk("(", std::get<std::optional<ComponentArraySpec>>(x.t), ")");
325 Walk("[", std::get<std::optional<CoarraySpec>>(x.t), "]");
326 Walk("*", std::get<std::optional<CharLength>>(x.t));
327 Walk(std::get<std::optional<Initialization>>(x.t));
331 Walk("(", std::get<std::optional<ComponentArraySpec>>(x.t), ")");
332 Walk("*", std::get<std::optional<CharLength>>(x.t));
337 [&](const std::list<ExplicitShapeSpec> &y) { Walk(y, ","); },
338 [&](const DeferredShapeSpecList &y) { Walk(y); },
344 Walk(std::get<std::optional<ProcInterface>>(x.t)), Put(')');
345 Walk(", ", std::get<std::list<ProcComponentAttrSpec>>(x.t), ", ");
346 Put(" :: "), Walk(std::get<std::list<ProcDecl>>(x.t), ", ");
351 void Unparse(const Pass &x) { Word("PASS"), Walk("(", x.v, ")"); }
355 [&](const ConstantExpr &y) { Put(" = "), Walk(y); },
356 [&](const NullInit &y) { Put(" => "), Walk(y); },
357 [&](const InitialDataTarget &y) { Put(" => "), Walk(y); },
359 Walk("/", y, ", ", "/");
368 Word("PROCEDURE"), Walk(", ", x.attributes, ", ");
369 Put(" :: "), Walk(x.declarations, ", ");
372 Word("PROCEDURE("), Walk(x.interfaceName), Put("), ");
373 Walk(x.attributes);
374 Put(" :: "), Walk(x.bindingNames, ", ");
377 Walk(std::get<Name>(x.t));
378 Walk(" => ", std::get<std::optional<Name>>(x.t));
381 Word("GENERIC"), Walk(", ", std::get<std::optional<AccessSpec>>(x.t));
382 Put(" :: "), Walk(std::get<common::Indirection<GenericSpec>>(x.t));
383 Put(" => "), Walk(std::get<std::list<Name>>(x.t), ", ");
388 Word("FINAL :: "), Walk(x.v, ", ");
391 Walk(std::get<Name>(x.t));
392 Walk("(", std::get<std::list<TypeParamSpec>>(x.t), ",", ")");
395 Walk(std::get<std::optional<Keyword>>(x.t), "=");
396 Walk(std::get<TypeParamValue>(x.t));
399 Walk(std::get<DerivedTypeSpec>(x.t));
400 Put('('), Walk(std::get<std::list<ComponentSpec>>(x.t), ", "), Put(')');
403 Walk(std::get<std::optional<Keyword>>(x.t), "=");
404 Walk(std::get<ComponentDataSource>(x.t));
410 Word("ENUMERATOR :: "), Walk(x.v, ", ");
413 Walk(std::get<NamedConstant>(x.t));
414 Walk(" = ", std::get<std::optional<ScalarIntConstantExpr>>(x.t));
423 Walk(std::get<0>(x.t)), Put(':'), Walk(std::get<1>(x.t));
424 Walk(":", std::get<std::optional<ScalarIntExpr>>(x.t));
427 Put('['), Walk(x.v), Put(']');
430 Walk(x.type, "::"), Walk(x.values, ", ");
433 Walk(x.name), Put('='), Walk(x.lower), Put(','), Walk(x.upper);
434 Walk(",", x.step);
437 Put('('), Walk(std::get<std::list<AcValue>>(x.t), ", ");
438 Put(", "), Walk(std::get<AcImpliedDoControl>(x.t)), Put(')');
441 Walk(std::get<std::optional<IntegerTypeSpec>>(x.t), "::");
442 Walk(std::get<AcImpliedDoControl::Bounds>(x.t));
449 Walk(dts), Walk(", ", attrs, ", ");
498 Put(' '), Walk(std::get<std::list<EntityDecl>>(x.t), ", ");
517 Walk(std::get<ObjectName>(x.t));
518 Walk("(", std::get<std::optional<ArraySpec>>(x.t), ")");
519 Walk("[", std::get<std::optional<CoarraySpec>>(x.t), "]");
520 Walk("*", std::get<std::optional<CharLength>>(x.t));
521 Walk(std::get<std::optional<Initialization>>(x.t));
528 Walk(
537 [&](const DeferredCoshapeSpecList &y) { Walk(y); },
538 [&](const ExplicitCoshapeSpec &y) { Walk(y); },
551 Walk(std::get<std::list<ExplicitShapeSpec>>(x.t), ",", ",");
552 Walk(std::get<std::optional<SpecificationExpr>>(x.t), ":"), Put('*');
555 Walk(std::get<std::optional<SpecificationExpr>>(x.t), ":");
556 Walk(std::get<SpecificationExpr>(x.t));
561 [&](const std::list<ExplicitShapeSpec> &y) { Walk(y, ","); },
562 [&](const std::list<AssumedShapeSpec> &y) { Walk(y, ","); },
563 [&](const DeferredShapeSpecList &y) { Walk(y); },
564 [&](const AssumedSizeSpec &y) { Walk(y); },
565 [&](const ImpliedShapeSpec &y) { Walk(y); },
566 [&](const AssumedRankSpec &y) { Walk(y); },
580 Walk(x.v, ":");
584 Walk(std::get<std::list<ExplicitShapeSpec>>(x.t), ",", ",");
585 Walk(std::get<AssumedImpliedSpec>(x.t));
588 Walk(x.v, ",");
602 Word("INTENT("), Walk(x.v), Put(")");
605 Walk(std::get<AccessSpec>(x.t));
606 Walk(" :: ", std::get<std::list<AccessId>>(x.t), ", ");
609 Word("ALLOCATABLE :: "), Walk(x.v, ", ");
612 Walk(std::get<ObjectName>(x.t));
613 Walk("(", std::get<std::optional<ArraySpec>>(x.t), ")");
614 Walk("[", std::get<std::optional<CoarraySpec>>(x.t), "]");
617 Word("ASYNCHRONOUS :: "), Walk(x.v, ", ");
620 Walk(x.t, " :: ");
625 Put(slash), Walk(std::get<Name>(x.t)), Put(slash);
628 Word("CODIMENSION :: "), Walk(x.v, ", ");
631 Walk(std::get<Name>(x.t));
632 Put('['), Walk(std::get<CoarraySpec>(x.t)), Put(']');
635 Word("CONTIGUOUS :: "), Walk(x.v, ", ");
638 Word("DATA "), Walk(x.v, ", ");
641 Walk(std::get<std::list<DataStmtObject>>(x.t), ", ");
642 Put('/'), Walk(std::get<std::list<DataStmtValue>>(x.t), ", "), Put('/');
645 Put('('), Walk(std::get<std::list<DataIDoObject>>(x.t), ", "), Put(',');
646 Walk(std::get<std::optional<IntegerTypeSpec>>(x.t), "::");
647 Walk(std::get<DataImpliedDo::Bounds>(x.t)), Put(')');
650 Walk(std::get<std::optional<DataStmtRepeat>>(x.t), "*");
651 Walk(std::get<DataStmtConstant>(x.t));
654 Word("DIMENSION :: "), Walk(x.v, ", ");
657 Walk(std::get<Name>(x.t));
658 Put('('), Walk(std::get<ArraySpec>(x.t)), Put(')');
661 Walk(x.t, " :: ");
664 Word("OPTIONAL :: "), Walk(x.v, ", ");
667 Word("PARAMETER("), Walk(x.v, ", "), Put(')');
670 Walk(x.t, "=");
673 Word("POINTER :: "), Walk(x.v, ", ");
676 Walk(std::get<Name>(x.t));
677 Walk("(", std::get<std::optional<DeferredShapeSpecList>>(x.t), ")");
680 Word("PROTECTED :: "), Walk(x.v, ", ");
683 Word("SAVE"), Walk(" :: ", x.v, ", ");
689 Put(slash), Walk(std::get<Name>(x.t)), Put(slash);
692 Word("TARGET :: "), Walk(x.v, ", ");
695 Word("VALUE :: "), Walk(x.v, ", ");
698 Word("VOLATILE :: "), Walk(x.v, ", ");
704 [&](const std::list<ImplicitSpec> &y) { Walk(y, ", "); },
706 Word("NONE"), Walk(" (", y, ", ", ")");
712 Walk(std::get<DeclarationTypeSpec>(x.t));
713 Put('('), Walk(std::get<std::list<LetterSpec>>(x.t), ", "), Put(')');
726 Walk(" :: ", x.names, ", ");
730 Walk(x.names, ", ");
741 Word("NAMELIST"), Walk(x.v, ", ");
744 Put('/'), Walk(std::get<Name>(x.t)), Put('/');
745 Walk(std::get<std::list<Name>>(x.t), ", ");
751 Put(separator), Put('('), Walk(y), Put(')');
757 Walk(x.blocks);
760 Walk(std::get<Name>(x.t));
761 Walk("(", std::get<std::optional<ArraySpec>>(x.t), ")");
764 Word("/"), Walk(std::get<std::optional<Name>>(x.t)), Word("/");
765 Walk(std::get<std::list<CommonBlockObject>>(x.t));
769 Walk(std::get<DataRef>(x.t));
770 Put('('), Walk(std::get<SubstringRange>(x.t)), Put(')');
773 Walk(std::get<CharLiteralConstant>(x.t));
774 Put('('), Walk(std::get<SubstringRange>(x.t)), Put(')');
777 Walk(x.v);
781 Walk(x.t, ":");
784 Walk(x.name);
785 Walk("(", x.subscripts, ",", ")");
786 Walk(x.imageSelector);
789 Walk(x.base);
796 Walk(x.component);
799 Walk(x.base);
800 Put('('), Walk(x.subscripts, ","), Put(')');
803 Walk(std::get<0>(x.t)), Put(':'), Walk(std::get<1>(x.t));
804 Walk(":", std::get<2>(x.t));
807 Put('['), Walk(std::get<std::list<Cosubscript>>(x.t), ",");
808 Walk(",", std::get<std::list<ImageSelectorSpec>>(x.t), ","), Put(']');
821 Walk(std::get<std::optional<TypeSpec>>(x.t), "::");
822 Walk(std::get<std::list<Allocation>>(x.t), ", ");
823 Walk(", ", std::get<std::list<AllocOpt>>(x.t), ", "), Put(')');
836 Walk(std::get<AllocateObject>(x.t));
837 Walk("(", std::get<std::list<AllocateShapeSpec>>(x.t), ",", ")");
838 Walk("[", std::get<std::optional<AllocateCoarraySpec>>(x.t), "]");
841 Walk(std::get<std::optional<BoundExpr>>(x.t), ":");
842 Walk(std::get<BoundExpr>(x.t));
845 Walk(std::get<std::list<AllocateCoshapeSpec>>(x.t), ",", ",");
846 Walk(std::get<std::optional<BoundExpr>>(x.t), ":"), Put('*');
849 Word("NULLIFY("), Walk(x.v, ", "), Put(')');
853 Walk(std::get<std::list<AllocateObject>>(x.t), ", ");
854 Walk(", ", std::get<std::list<StatOrErrmsg>>(x.t), ", "), Put(')');
865 void Unparse(const Expr::Parentheses &x) { Put('('), Walk(x.v), Put(')'); }
870 Word("%LOC("), Walk(x.v), Put(')');
872 void Unparse(const Expr::Power &x) { Walk(x.t, "**"); }
873 void Unparse(const Expr::Multiply &x) { Walk(x.t, "*"); }
874 void Unparse(const Expr::Divide &x) { Walk(x.t, "/"); }
875 void Unparse(const Expr::Add &x) { Walk(x.t, "+"); }
876 void Unparse(const Expr::Subtract &x) { Walk(x.t, "-"); }
877 void Unparse(const Expr::Concat &x) { Walk(x.t, "//"); }
878 void Unparse(const Expr::LT &x) { Walk(x.t, "<"); }
879 void Unparse(const Expr::LE &x) { Walk(x.t, "<="); }
880 void Unparse(const Expr::EQ &x) { Walk(x.t, "=="); }
881 void Unparse(const Expr::NE &x) { Walk(x.t, "/="); }
882 void Unparse(const Expr::GE &x) { Walk(x.t, ">="); }
883 void Unparse(const Expr::GT &x) { Walk(x.t, ">"); }
884 void Unparse(const Expr::AND &x) { Walk(x.t, ".AND."); }
885 void Unparse(const Expr::OR &x) { Walk(x.t, ".OR."); }
886 void Unparse(const Expr::EQV &x) { Walk(x.t, ".EQV."); }
887 void Unparse(const Expr::NEQV &x) { Walk(x.t, ".NEQV."); }
889 Put('('), Walk(x.t, ","), Put(')');
892 Walk(std::get<1>(x.t)); // left
893 Walk(std::get<DefinedOpName>(x.t));
894 Walk(std::get<2>(x.t)); // right
897 Walk(x.v);
905 Walk(x.t, " = ");
914 Walk(std::get<DataRef>(x.t));
918 Put('('), Walk(y), Put(')');
920 [&](const std::list<BoundsSpec> &y) { Walk("(", y, ", ", ")"); },
923 Put(" => "), Walk(std::get<Expr>(x.t));
930 Walk(x.t, ":");
933 Word("WHERE ("), Walk(x.t, ") ");
936 Walk(std::get<std::optional<Name>>(x.t), ": ");
937 Word("WHERE ("), Walk(std::get<LogicalExpr>(x.t)), Put(')');
942 Word("ELSEWHERE ("), Walk(std::get<LogicalExpr>(x.t)), Put(')');
943 Walk(" ", std::get<std::optional<Name>>(x.t));
947 Outdent(), Word("ELSEWHERE"), Walk(" ", x.v), Indent();
950 Outdent(), Word("END WHERE"), Walk(" ", x.v);
953 Walk(std::get<std::optional<Name>>(x.t), ": ");
954 Word("FORALL"), Walk(std::get<common::Indirection<ConcurrentHeader>>(x.t));
958 Outdent(), Word("END FORALL"), Walk(" ", x.v);
965 Walk(std::get<std::optional<Name>>(x.t), ": ");
967 Walk(std::get<std::list<Association>>(x.t), ", "), Put(')'), Indent();
970 Walk(x.t, " => ");
973 Outdent(), Word("END ASSOCIATE"), Walk(" ", x.v);
976 Walk(x.v, ": "), Word("BLOCK"), Indent();
979 Outdent(), Word("END BLOCK"), Walk(" ", x.v);
982 Walk(std::get<std::optional<Name>>(x.t), ": ");
983 Word("CHANGE TEAM ("), Walk(std::get<TeamValue>(x.t));
984 Walk(", ", std::get<std::list<CoarrayAssociation>>(x.t), ", ");
985 Walk(", ", std::get<std::list<StatOrErrmsg>>(x.t), ", "), Put(')');
989 Walk(x.t, " => ");
993 Walk(std::get<std::list<StatOrErrmsg>>(x.t), ", ");
994 Put(')'), Walk(" ", std::get<std::optional<Name>>(x.t));
997 Walk(std::get<std::optional<Name>>(x.t), ": ");
998 Word("CRITICAL ("), Walk(std::get<std::list<StatOrErrmsg>>(x.t), ", ");
1002 Outdent(), Word("END CRITICAL"), Walk(" ", x.v);
1005 Walk(std::get<Statement<NonLabelDoStmt>>(x.t));
1006 Indent(), Walk(std::get<Block>(x.t), ""), Outdent();
1007 Walk(std::get<Statement<EndDoStmt>>(x.t));
1010 Word("DO "), Walk(std::get<Label>(x.t));
1011 Walk(" ", std::get<std::optional<LoopControl>>(x.t));
1014 Walk(std::get<std::optional<Name>>(x.t), ": ");
1016 Walk(std::get<std::optional<Label>>(x.t), " ");
1017 Walk(std::get<std::optional<LoopControl>>(x.t));
1022 Word("WHILE ("), Walk(y), Put(')');
1024 [&](const auto &y) { Walk(y); },
1029 Put('('), Walk(std::get<std::optional<IntegerTypeSpec>>(x.t), "::");
1030 Walk(std::get<std::list<ConcurrentControl>>(x.t), ", ");
1031 Walk(", ", std::get<std::optional<ScalarLogicalExpr>>(x.t)), Put(')');
1034 Walk(std::get<Name>(x.t)), Put('='), Walk(std::get<1>(x.t));
1035 Put(':'), Walk(std::get<2>(x.t));
1036 Walk(":", std::get<std::optional<ScalarIntExpr>>(x.t));
1042 Word("LOCAL("), Walk(x.v, ", "), Put(')');
1045 Word("LOCAL_INIT("), Walk(x.v, ", "), Put(')');
1048 Word("REDUCE("), Walk(std::get<parser::ReductionOperator>(x.t));
1049 Walk(":", std::get<std::list<parser::Name>>(x.t), ",", ")");
1052 Word("SHARED("), Walk(x.v, ", "), Put(')');
1056 Word("END DO"), Walk(" ", x.v);
1059 Word("CYCLE"), Walk(" ", x.v);
1062 Walk(std::get<std::optional<Name>>(x.t), ": ");
1063 Word("IF ("), Walk(std::get<ScalarLogicalExpr>(x.t));
1068 Walk(std::get<ScalarLogicalExpr>(x.t)), Put(") "), Word("THEN");
1069 Walk(" ", std::get<std::optional<Name>>(x.t)), Indent();
1072 Outdent(), Word("ELSE"), Walk(" ", x.v), Indent();
1075 Outdent(), Word("END IF"), Walk(" ", x.v);
1078 Word("IF ("), Walk(x.t, ") ");
1081 Walk(std::get<std::optional<Name>>(x.t), ": ");
1083 Walk(std::get<Scalar<Expr>>(x.t)), Put(')'), Indent();
1086 Outdent(), Word("CASE "), Walk(std::get<CaseSelector>(x.t));
1087 Walk(" ", std::get<std::optional<Name>>(x.t)), Indent();
1090 Outdent(), Word("END SELECT"), Walk(" ", x.v);
1095 Put('('), Walk(y), Put(')');
1102 Walk(x.lower), Put(':'), Walk(x.upper);
1105 Walk(std::get<0>(x.t), ": ");
1106 Word("SELECT RANK ("), Walk(std::get<1>(x.t), " => ");
1107 Walk(std::get<Selector>(x.t)), Put(')'), Indent();
1113 Put('('), Walk(y), Put(')');
1119 Walk(" ", std::get<std::optional<Name>>(x.t)), Indent();
1122 Walk(std::get<0>(x.t), ": ");
1123 Word("SELECT TYPE ("), Walk(std::get<1>(x.t), " => ");
1124 Walk(std::get<Selector>(x.t)), Put(')'), Indent();
1127 Outdent(), Walk(std::get<TypeGuardStmt::Guard>(x.t));
1128 Walk(" ", std::get<std::optional<Name>>(x.t)), Indent();
1133 [&](const TypeSpec &y) { Word("TYPE IS ("), Walk(y), Put(')'); },
1135 Word("CLASS IS ("), Walk(y), Put(')');
1142 Word("EXIT"), Walk(" ", x.v);
1148 Word("GO TO ("), Walk(x.t, "), ");
1157 Word("STOP"), Walk(" ", std::get<std::optional<StopCode>>(x.t));
1158 Walk(", QUIET=", std::get<std::optional<ScalarLogicalExpr>>(x.t));
1164 Word("NOTIFY WAIT ("), Walk(std::get<Scalar<Variable>>(x.t));
1165 Walk(", ", std::get<std::list<EventWaitSpec>>(x.t), ", ");
1169 Word("SYNC ALL ("), Walk(x.v, ", "), Put(')');
1173 Walk(std::get<SyncImagesStmt::ImageSet>(x.t));
1174 Walk(", ", std::get<std::list<StatOrErrmsg>>(x.t), ", "), Put(')');
1177 Word("SYNC MEMORY ("), Walk(x.v, ", "), Put(')');
1180 Word("SYNC TEAM ("), Walk(std::get<TeamValue>(x.t));
1181 Walk(", ", std::get<std::list<StatOrErrmsg>>(x.t), ", "), Put(')');
1184 Word("EVENT POST ("), Walk(std::get<EventVariable>(x.t));
1185 Walk(", ", std::get<std::list<StatOrErrmsg>>(x.t), ", "), Put(')');
1195 Word("EVENT WAIT ("), Walk(std::get<EventVariable>(x.t));
1196 Walk(", ", std::get<std::list<EventWaitSpec>>(x.t), ", ");
1200 Word("FORM TEAM ("), Walk(std::get<ScalarIntExpr>(x.t));
1201 Put(','), Walk(std::get<TeamVariable>(x.t));
1202 Walk(", ", std::get<std::list<FormTeamStmt::FormTeamSpec>>(x.t), ", ");
1213 Word("LOCK ("), Walk(std::get<LockVariable>(x.t));
1214 Walk(", ", std::get<std::list<LockStmt::LockStat>>(x.t), ", ");
1226 Word("UNLOCK ("), Walk(std::get<LockVariable>(x.t));
1227 Walk(", ", std::get<std::list<StatOrErrmsg>>(x.t), ", ");
1232 Word("OPEN ("), Walk(x.v, ", "), Put(')');
1245 Walk(y.t, "=");
1276 Word("CLOSE ("), Walk(x.v, ", "), Put(')');
1291 Put('('), Walk(x.iounit);
1293 Put(", "), Walk(x.format);
1295 Walk(", ", x.controls, ", ");
1298 Walk(x.format);
1303 Put('('), Walk(x.controls, ", "), Put(')');
1305 Walk(" ", x.items, ", ");
1310 Walk(x.iounit);
1312 Put(", "), Walk(x.format);
1314 Walk(", ", x.controls, ", ");
1316 Walk(x.controls, ", ");
1318 Put(')'), Walk(" ", x.items, ", ");
1321 Word("PRINT "), Walk(std::get<Format>(x.t));
1322 Walk(", ", std::get<std::list<OutputItem>>(x.t), ", ");
1339 Walk(y.t, "=");
1386 Put('('), Walk(std::get<std::list<InputItem>>(x.t), ", "), Put(", ");
1387 Walk(std::get<IoImpliedDoControl>(x.t)), Put(')');
1390 Put('('), Walk(std::get<std::list<OutputItem>>(x.t), ", "), Put(", ");
1391 Walk(std::get<IoImpliedDoControl>(x.t)), Put(')');
1394 Word("WAIT ("), Walk(x.v, ", "), Put(')');
1409 Word("BACKSPACE ("), Walk(x.v, ", "), Put(')');
1412 Word("ENDFILE ("), Walk(x.v, ", "), Put(')');
1415 Word("REWIND ("), Walk(x.v, ", "), Put(')');
1427 Word("FLUSH ("), Walk(x.v, ", "), Put(')');
1434 Word("IOLENGTH="), Walk(y.t, ") ");
1436 [&](const std::list<InquireSpec> &y) { Walk(y, ", "), Put(')'); },
1451 Walk(y.t, "=");
1455 Walk(y.t, "=");
1459 Walk(y.t, "=");
1478 Put('('), Walk("", x.items, ",", x.unlimitedItems.empty() ? "" : ",");
1479 Walk("*(", x.unlimitedItems, ",", ")"), Put(')');
1483 Walk(*x.repeatCount);
1488 Walk("(", y, ",", ")");
1490 [&](const auto &y) { Walk(y); },
1516 Walk(x.width), Walk(".", x.digits), Walk("E", x.exponentWidth);
1523 Walk("(", x.parameters, ",", ")");
1529 Walk(x.count);
1533 Walk(x.count);
1537 Walk(x.count);
1541 Walk(x.count);
1547 Walk(x.count);
1555 Walk(x.count);
1603 Word("USE"), Walk(", ", x.nature), Put(" :: "), Walk(x.moduleName);
1606 [&](const std::list<Rename> &y) { Walk(", ", y, ", "); },
1607 [&](const std::list<Only> &y) { Walk(", ONLY: ", y, ", "); },
1613 [&](const Rename::Names &y) { Walk(y.t, " => "); },
1615 Word("OPERATOR("), Walk(y.t, ") => OPERATOR("),
1625 Walk(std::get<Name>(x.t)), Walk(":", std::get<std::optional<Name>>(x.t));
1631 Word("BLOCK DATA"), Walk(" ", x.v), Indent();
1640 Word("INTERFACE"), Walk(" ", y);
1648 Outdent(), Word("END INTERFACE"), Walk(" ", x.v);
1656 Walk(std::get<std::list<Name>>(x.t), ", ");
1687 Word("GENERIC"), Walk(", ", std::get<std::optional<AccessSpec>>(x.t));
1688 Put(" :: "), Walk(std::get<GenericSpec>(x.t)), Put(" => ");
1689 Walk(std::get<std::list<Name>>(x.t), ", ");
1692 Word("EXTERNAL :: "), Walk(x.v, ", ");
1695 Word("PROCEDURE("), Walk(std::get<std::optional<ProcInterface>>(x.t));
1696 Put(')'), Walk(", ", std::get<std::list<ProcAttrSpec>>(x.t), ", ");
1697 Put(" :: "), Walk(std::get<std::list<ProcDecl>>(x.t), ", ");
1700 Walk(std::get<Name>(x.t));
1701 Walk(" => ", std::get<std::optional<ProcPointerInit>>(x.t));
1704 Word("INTRINSIC :: "), Walk(x.v, ", ");
1708 Walk(*x.v);
1714 Walk(std::get<0>(x.t)); // grid
1715 Word(","), Walk(std::get<1>(x.t)); // block
1716 Walk(",", std::get<2>(x.t)); // bytes
1717 Walk(",", std::get<3>(x.t)); // stream
1720 Walk(std::get<ProcedureDesignator>(x.v.t));
1721 Put('('), Walk(std::get<std::list<ActualArgSpec>>(x.v.t), ", "), Put(')');
1730 Word("CALL "), Walk(pd);
1731 Walk("<<<", x.chevrons, ">>>");
1738 Walk("(", args, ", ", ")");
1743 Walk(std::get<std::optional<Keyword>>(x.t), "=");
1744 Walk(std::get<ActualArg>(x.t));
1747 Word("%REF("), Walk(x.v), Put(')');
1750 Word("%VAL("), Walk(x.v), Put(')');
1762 Word("ATTRIBUTES("), Walk(x.v), Word(")");
1765 Word("LAUNCH_BOUNDS("), Walk(x.v), Word(")");
1768 Word("CLUSTER_DIMS("), Walk(x.v), Word(")");
1771 Walk("", std::get<std::list<PrefixSpec>>(x.t), " ", " ");
1772 Word("FUNCTION "), Walk(std::get<Name>(x.t)), Put("(");
1773 Walk(std::get<std::list<Name>>(x.t), ", "), Put(')');
1774 Walk(" ", std::get<std::optional<Suffix>>(x.t)), Indent();
1778 Word("RESULT("), Walk(x.resultName), Put(')');
1779 Walk(" ", x.binding);
1781 Walk(x.binding);
1788 Walk("", std::get<std::list<PrefixSpec>>(x.t), " ", " ");
1789 Word("SUBROUTINE "), Walk(std::get<Name>(x.t));
1793 Walk(" () ", bind);
1795 Walk(" (", args, ", ", ")");
1796 Walk(" ", bind);
1810 Word("ENTRY "), Walk(std::get<Name>(x.t)), Put("(");
1811 Walk(std::get<std::list<DummyArg>>(x.t), ", "), Put(")");
1812 Walk(" ", std::get<std::optional<Suffix>>(x.t));
1815 Word("RETURN"), Walk(" ", x.v);
1823 Walk(std::get<Name>(x.t)), Put('(');
1824 Walk(std::get<std::list<Name>>(x.t), ", "), Put(") = ");
1825 Walk(std::get<Scalar<Expr>>(x.t));
1834 Walk(" ", tkr, ", ");
1837 Walk("!DIR$ LOOP COUNT (", lcount.v, ", ", ")");
1842 Walk(" ", assumeAligned, ", ");
1848 Walk("!DIR$ ", names, " ");
1852 Walk(" ", unroll.v);
1871 Walk(std::get<Name>(x.t));
1874 Walk(std::get<Name>(x.t));
1875 Walk("=", std::get<std::optional<std::uint64_t>>(x.t));
1878 Walk(std::get<common::Indirection<Designator>>(x.t));
1880 Walk(std::get<uint64_t>(x.t));
1889 Walk(std::get<AccAtomicCapture::Stmt1>(x.t));
1891 Walk(std::get<AccAtomicCapture::Stmt2>(x.t));
1901 Walk(std::get<Statement<AssignmentStmt>>(x.t));
1903 Walk(std::get<std::optional<AccEndAtomic>>(x.t), "!$ACC END ATOMIC\n");
1911 Walk(std::get<Statement<AssignmentStmt>>(x.t));
1913 Walk(std::get<std::optional<AccEndAtomic>>(x.t), "!$ACC END ATOMIC\n");
1921 Walk(std::get<Statement<AssignmentStmt>>(x.t));
1923 Walk(std::get<std::optional<AccEndAtomic>>(x.t), "!$ACC END ATOMIC\n");
1932 Walk(std::get<std::optional<AccDataModifier>>(x.t), ":");
1933 Walk(std::get<AccObjectList>(x.t));
1937 [&](const Name &y) { Walk(y); },
1938 [&](const ScalarDefaultCharExpr &y) { Walk(y); },
1952 void Unparse(const AccClauseList &x) { Walk(" ", x.v, " "); }
1953 void Unparse(const AccGangArgList &x) { Walk(x.v, ","); }
1973 Walk(collapseValue);
1978 Walk(std::get<AccBeginBlockDirective>(x.t));
1981 Walk(std::get<Block>(x.t), "");
1984 Walk(std::get<AccEndBlockDirective>(x.t));
1991 Walk(std::get<AccBeginLoopDirective>(x.t));
1994 Walk(std::get<std::optional<DoConstruct>>(x.t));
1997 Walk(std::get<AccLoopDirective>(x.t));
1998 Walk(std::get<AccClauseList>(x.t));
2003 Walk(std::get<AccStandaloneDirective>(x.t));
2004 Walk(std::get<AccClauseList>(x.t));
2011 Walk(std::get<AccDeclarativeDirective>(x.t));
2012 Walk(std::get<AccClauseList>(x.t));
2019 Walk(std::get<AccBeginCombinedDirective>(x.t));
2022 Walk(std::get<std::optional<DoConstruct>>(x.t));
2024 Walk("!$ACC END ", std::get<std::optional<AccEndCombinedDirective>>(x.t),
2031 Walk("(", std::get<std::optional<Name>>(x.t), ")");
2032 Walk(std::get<AccClauseList>(x.t));
2038 [&](const Designator &y) { Walk(y); },
2039 [&](const Name &y) { Put("/"), Walk(y), Put("/"); },
2043 void Unparse(const AccObjectList &x) { Walk(x.v, ","); }
2045 Walk(std::get<ReductionOperator>(x.t));
2047 Walk(std::get<AccObjectList>(x.t));
2053 Walk(std::get<AccObjectListWithModifier>(x.t));
2059 Walk("DEVNUM:", std::get<std::optional<ScalarIntExpr>>(x.t), ":");
2060 Walk(std::get<std::list<ScalarIntExpr>>(x.t), ",");
2066 Walk(std::get<std::optional<AccWaitArgument>>(x.t));
2067 Walk(std::get<AccClauseList>(x.t));
2078 Walk(std::get<llvm::omp::Directive>(x.t));
2079 Walk(std::get<std::optional<common::Indirection<OmpClauseList>>>(x.t));
2083 Walk(x.v);
2088 Walk(std::get<OmpTraitPropertyName>(x.t));
2090 Walk(std::get<PropList>(x.t), ",");
2094 Walk(std::get<OmpTraitSelectorName>(x.t));
2095 Walk(std::get<std::optional<OmpTraitSelector::Properties>>(x.t));
2099 Walk(std::get<std::optional<OmpTraitScore>>(x.t), ": ");
2100 Walk(std::get<std::list<OmpTraitProperty>>(x.t));
2104 Walk(std::get<OmpTraitSetSelectorName>(x.t));
2106 Walk(std::get<std::list<OmpTraitSelector>>(x.t));
2109 void Unparse(const OmpContextSelectorSpecification &x) { Walk(x.v, ", "); }
2113 [&](const Designator &y) { Walk(y); },
2114 [&](const Name &y) { Put("/"), Walk(y), Put("/"); },
2122 Walk(std::get<TypeDeclarationStmt>(x.t));
2124 Walk(std::get<SubscriptTriplet>(x.t));
2128 Walk(x.v);
2133 Walk(x.v);
2138 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2139 Walk(std::get<OmpObjectList>(x.t));
2143 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2144 Walk(std::get<OmpObjectList>(x.t));
2148 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ":");
2149 Walk(std::get<OmpScheduleClause::Kind>(x.t));
2150 Walk(",", std::get<std::optional<ScalarIntExpr>>(x.t));
2154 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2155 Walk(std::get<ScalarIntExpr>(x.t));
2159 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2160 Walk(std::get<OmpObjectList>(x.t));
2164 Walk(std::get<OmpObjectList>(x.t));
2165 Walk(": ", std::get<std::optional<std::list<Modifier>>>(x.t));
2169 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2170 Walk(std::get<OmpObjectList>(x.t));
2174 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2175 Walk(std::get<ScalarLogicalExpr>(x.t));
2177 void Unparse(const OmpStepSimpleModifier &x) { Walk(x.v); }
2180 Walk(x.v);
2187 Walk(std::get<OmpObjectList>(x.t));
2188 Walk(": ", modifiers);
2202 Walk(*lmod);
2215 Walk(std::get<OmpObjectList>(x.t));
2228 common::visit([&](auto &&s) { Walk(s); }, m.u);
2237 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2238 Walk(std::get<OmpObjectList>(x.t));
2240 void Unparse(const OmpDetachClause &x) { Walk(x.v); }
2243 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2244 Walk(std::get<OmpObjectList>(x.t));
2248 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2249 Walk(std::get<OmpObjectList>(x.t));
2253 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2254 Walk(std::get<OmpObjectList>(x.t));
2258 Walk(x.v);
2261 void Unparse(const OmpAllocatorSimpleModifier &x) { Walk(x.v); }
2264 Walk(x.v);
2269 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ":");
2270 Walk(std::get<OmpOrderClause::Ordering>(x.t));
2274 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2275 Walk(std::get<ScalarIntExpr>(x.t));
2279 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2280 Walk(std::get<ScalarIntExpr>(x.t));
2284 Walk(x.v.v);
2289 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2290 Walk(std::get<OmpObjectList>(x.t));
2294 Walk(std::get<OmpDefaultmapClause::ImplicitBehavior>(x.t));
2295 Walk(":", std::get<std::optional<std::list<Modifier>>>(x.t));
2299 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2300 Walk(std::get<OmpObjectList>(x.t));
2304 Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
2305 Walk(std::get<std::optional<OmpDirectiveSpecification>>(x.t));
2423 void Unparse(const OmpObjectList &x) { Walk(x.v, ","); }
2518 void Unparse(const OmpAtomicClauseList &x) { Walk(" ", x.v, " "); }
2523 Walk(std::get<OmpAtomicClauseList>(x.t));
2526 Walk(std::get<Statement<AssignmentStmt>>(x.t));
2528 Walk(std::get<std::optional<OmpEndAtomic>>(x.t), "!$OMP END ATOMIC\n");
2534 Walk(std::get<0>(x.t));
2536 Walk(std::get<2>(x.t));
2539 Walk(std::get<OmpAtomicCapture::Stmt1>(x.t));
2541 Walk(std::get<OmpAtomicCapture::Stmt2>(x.t));
2549 Walk(std::get<0>(x.t));
2551 Walk(std::get<2>(x.t));
2554 Walk(std::get<OmpAtomicCompareIfStmt>(x.t));
2559 Walk(std::get<0>(x.t));
2561 Walk(std::get<2>(x.t));
2564 Walk(std::get<Statement<AssignmentStmt>>(x.t));
2566 Walk(std::get<std::optional<OmpEndAtomic>>(x.t), "!$OMP END ATOMIC\n");
2572 Walk(std::get<0>(x.t));
2574 Walk(std::get<2>(x.t));
2577 Walk(std::get<Statement<AssignmentStmt>>(x.t));
2579 Walk(std::get<std::optional<OmpEndAtomic>>(x.t), "!$OMP END ATOMIC\n");
2585 Walk(std::get<0>(x.t));
2587 Walk(std::get<2>(x.t));
2590 Walk(std::get<Statement<AssignmentStmt>>(x.t));
2592 Walk(std::get<std::optional<OmpEndAtomic>>(x.t), "!$OMP END ATOMIC\n");
2601 Walk(decl);
2606 Walk(" (", std::get<std::optional<OmpObjectList>>(x.t), ")");
2607 Walk(std::get<OmpClauseList>(x.t));
2610 Walk(std::get<Statement<AllocateStmt>>(x.t));
2616 Walk(std::get<OmpObjectList>(x.t));
2618 Walk(std::get<OmpClauseList>(x.t));
2631 Walk(std::get<OmpClauseList>(x.t));
2634 Walk(std::get<Statement<AllocateStmt>>(x.t));
2636 Walk(*end);
2642 Walk(" (", std::get<std::optional<Name>>(x.t), ")");
2643 Walk(std::get<OmpClauseList>(x.t));
2650 Walk(" (", std::get<std::optional<Name>>(x.t), ")");
2655 Walk(std::get<OmpCriticalDirective>(x.t));
2656 Walk(std::get<Block>(x.t), "");
2657 Walk(std::get<OmpEndCriticalDirective>(x.t));
2660 Put("("), Walk(x.v), Put(")");
2664 Walk(x.v);
2670 Walk(pd);
2676 Walk("(", args, ", ", ")");
2683 Walk(std::get<OmpReductionIdentifier>(x.t)), Put(" : ");
2684 Walk(std::get<std::list<DeclarationTypeSpec>>(x.t), ","), Put(" : ");
2685 Walk(std::get<OmpReductionCombiner>(x.t));
2687 Walk(std::get<std::optional<OmpReductionInitializerClause>>(x.t));
2696 Walk(mapname);
2699 Walk(std::get<TypeSpec>(spec.t));
2701 Walk(std::get<Name>(spec.t));
2704 Walk(std::get<OmpClauseList>(z.t));
2711 Walk("(", std::get<std::optional<Name>>(y.t), ")");
2712 Walk(std::get<OmpClauseList>(y.t));
2719 Walk(std::get<parser::OmpDeclareTargetSpecifier>(x.t));
2726 Walk(std::get<OmpClauseList>(y.t));
2733 Walk(std::get<parser::OmpObjectList>(x.t));
2739 Walk(x.v);
2744 Walk(x.t);
2753 Walk(x.t);
2780 Walk(std::get<OpenMPSectionConstruct>(y.u).v, "");
2786 Walk(std::get<OmpBeginSectionsDirective>(x.t));
2789 Walk(std::get<OmpSectionBlocks>(x.t));
2792 Walk(std::get<OmpEndSectionsDirective>(x.t));
2799 Walk(std::get<OmpCancelType>(x.t));
2806 Walk(std::get<OmpCancelType>(x.t));
2807 Walk(std::get<std::optional<OpenMPCancelConstruct::If>>(x.t));
2813 Walk(x.v);
2816 void Unparse(const OmpMemoryOrderClause &x) { Walk(x.v); }
2819 [&](const OmpMemoryOrderClause &y) { Walk(y); },
2820 [&](const OmpFailClause &y) { Walk(y); },
2821 [&](const OmpClause &z) { Walk(z); },
2828 Walk(std::get<OmpClauseList>(x.t));
2836 Walk(std::get<OmpObject>(x.t));
2838 Walk(std::get<OmpClause>(x.t));
2845 Walk(std::get<std::optional<std::list<OmpMemoryOrderClause>>>(x.t));
2846 Walk(" (", std::get<std::optional<OmpObjectList>>(x.t), ")");
2853 Walk(std::get<OmpLoopDirective>(x.t));
2854 Walk(std::get<OmpClauseList>(x.t));
2858 void Unparse(const OmpClauseList &x) { Walk(" ", x.v, " "); }
2862 Walk(std::get<OmpSimpleStandaloneDirective>(x.t));
2863 Walk(std::get<OmpClauseList>(x.t));
2870 Walk(std::get<OmpBeginBlockDirective>(x.t));
2873 Walk(std::get<Block>(x.t), "");
2876 Walk(std::get<OmpEndBlockDirective>(x.t));
2883 Walk(std::get<OmpBeginLoopDirective>(x.t));
2886 Walk(std::get<std::optional<DoConstruct>>(x.t));
2887 Walk(std::get<std::optional<OmpEndLoopDirective>>(x.t));
2890 Put('('), Walk(std::get<0>(x.t)), Put(","), Walk(std::get<1>(x.t));
2891 Walk("(", std::get<std::optional<ArraySpec>>(x.t), ")"), Put(')');
2893 void Unparse(const BasedPointerStmt &x) { Walk("POINTER ", x.v, ","); }
2895 Word("ATTRIBUTES("), Walk(std::get<common::CUDADataAttr>(x.t));
2896 Word(") "), Walk(std::get<std::list<Name>>(x.t), ", ");
2911 Walk(std::get<std::optional<Name>>(x.t));
2912 Walk(" ", std::get<std::list<EntityDecl>>(x.t), ", ");
2923 Word("PARAMETER "), Walk(x.v, ", ");
2926 Word("IF ("), Walk(std::get<Expr>(x.t)), Put(") ");
2927 Walk(std::get<1>(x.t)), Put(", ");
2928 Walk(std::get<2>(x.t)), Put(", ");
2929 Walk(std::get<3>(x.t));
2932 Word("ASSIGN "), Walk(std::get<Label>(x.t));
2933 Word(" TO "), Walk(std::get<Name>(x.t));
2936 Word("GO TO "), Walk(std::get<Name>(x.t));
2937 Walk(", (", std::get<std::list<Label>>(x.t), ", ", ")");
2939 void Unparse(const PauseStmt &x) { Word("PAUSE"), Walk(" ", x.v); }
3013 Walk(*x.v);
3024 Walk(grid.front());
3026 Walk("(", grid, ",", ")");
3033 Walk(block.front());
3035 Walk("(", block, ",", ")");
3038 Word(",STREAM="), Walk(*stream);
3044 Walk(" (", std::get<std::optional<ScalarIntConstantExpr>>(x.t), ")");
3045 Walk(std::get<std::optional<CUFKernelDoConstruct::LaunchConfiguration>>(
3047 Walk(" ", std::get<std::list<CUFReduction>>(x.t), " ");
3051 Walk(std::get<CUFKernelDoConstruct::Directive>(x.t));
3052 Walk(std::get<std::optional<DoConstruct>>(x.t));
3056 Walk(std::get<CUFReduction::Operator>(x.t));
3057 Walk(":", std::get<std::list<Scalar<Variable>>>(x.t), ",", ")");
3082 template <typename T> void Walk(const T &x) {
3083 Fortran::parser::Walk(x, *this);
3089 void Walk(
3092 Word(prefix), Walk(*x), Word(suffix);
3096 void Walk(const std::optional<A> &x, const char *suffix = "") {
3097 return Walk("", x, suffix);
3103 void Walk(const char *prefix, const std::list<A> &list,
3108 Word(str), Walk(x);
3115 void Walk(const std::list<A> &list, const char *comma = ", ",
3117 return Walk("", list, comma, suffix);
3127 Walk(std::get<J>(tuple));
3132 void Walk(const std::tuple<A...> &tuple, const char *separator = "") {
3137 Outdent(), Word("END "), Word(kind), Walk(" ", name);
3239 Walk(root, visitor);