307 template <
typename T =
void>
401 virtual bool equals(
const Node& rhs)
const = 0;
406 virtual bool operator==(
const Node& rhs)
const = 0;
412 return !(*
this == rhs);
420 virtual void visit_internal(
VisitorBase &visitor,
void *retval=
nullptr) = 0;
427 template <
typename T>
433 void dump(std::ostream &out=std::cout,
int indent=0);
439 void dump_seq(std::ostream &out=std::cout,
int indent=0);
445 virtual Add *as_add();
451 virtual const Add *as_add()
const;
463 virtual const Annotated *as_annotated()
const;
481 virtual ArithOp *as_arith_op();
487 virtual const ArithOp *as_arith_op()
const;
499 virtual const Assignment *as_assignment()
const;
511 virtual const BinaryOp *as_binary_op()
const;
523 virtual const BitwiseAnd *as_bitwise_and()
const;
535 virtual const BitwiseNot *as_bitwise_not()
const;
547 virtual const BitwiseOp *as_bitwise_op()
const;
559 virtual const BitwiseOr *as_bitwise_or()
const;
571 virtual const BitwiseXor *as_bitwise_xor()
const;
589 virtual Bundle *as_bundle();
595 virtual const Bundle *as_bundle()
const;
601 virtual CmpEq *as_cmp_eq();
607 virtual const CmpEq *as_cmp_eq()
const;
613 virtual CmpGe *as_cmp_ge();
619 virtual const CmpGe *as_cmp_ge()
const;
625 virtual CmpGt *as_cmp_gt();
631 virtual const CmpGt *as_cmp_gt()
const;
637 virtual CmpLe *as_cmp_le();
643 virtual const CmpLe *as_cmp_le()
const;
649 virtual CmpLt *as_cmp_lt();
655 virtual const CmpLt *as_cmp_lt()
const;
661 virtual CmpNe *as_cmp_ne();
667 virtual const CmpNe *as_cmp_ne()
const;
673 virtual CmpOp *as_cmp_op();
679 virtual const CmpOp *as_cmp_op()
const;
697 virtual Divide *as_divide();
703 virtual const Divide *as_divide()
const;
751 virtual const Expression *as_expression()
const;
781 virtual ForLoop *as_for_loop();
787 virtual const ForLoop *as_for_loop()
const;
799 virtual const ForeachLoop *as_foreach_loop()
const;
823 virtual const Identifier *as_identifier()
const;
829 virtual IfElse *as_if_else();
835 virtual const IfElse *as_if_else()
const;
853 virtual Index *as_index();
859 virtual const Index *as_index()
const;
871 virtual const IndexEntry *as_index_entry()
const;
883 virtual const IndexItem *as_index_item()
const;
895 virtual const IndexList *as_index_list()
const;
907 virtual const IndexRange *as_index_range()
const;
931 virtual const IntDivide *as_int_divide()
const;
955 virtual const JsonLiteral *as_json_literal()
const;
967 virtual const LogicalAnd *as_logical_and()
const;
979 virtual const LogicalNot *as_logical_not()
const;
991 virtual const LogicalOp *as_logical_op()
const;
1003 virtual const LogicalOr *as_logical_or()
const;
1015 virtual const LogicalXor *as_logical_xor()
const;
1021 virtual Mapping *as_mapping();
1027 virtual const Mapping *as_mapping()
const;
1045 virtual Modulo *as_modulo();
1051 virtual const Modulo *as_modulo()
const;
1063 virtual const Multiply *as_multiply()
const;
1069 virtual Negate *as_negate();
1075 virtual const Negate *as_negate()
const;
1081 virtual Power *as_power();
1087 virtual const Power *as_power()
const;
1093 virtual Program *as_program();
1099 virtual const Program *as_program()
const;
1117 virtual Root *as_root();
1123 virtual const Root *as_root()
const;
1135 virtual const ShiftLeft *as_shift_left()
const;
1141 virtual ShiftOp *as_shift_op();
1147 virtual const ShiftOp *as_shift_op()
const;
1183 virtual const Statement *as_statement()
const;
1219 virtual const Structured *as_structured()
const;
1231 virtual const Subcircuit *as_subcircuit()
const;
1243 virtual const Subtract *as_subtract()
const;
1255 virtual const TernaryCond *as_ternary_cond()
const;
1261 virtual UnaryOp *as_unary_op();
1267 virtual const UnaryOp *as_unary_op()
const;
1279 virtual const Variables *as_variables()
const;
1285 virtual Version *as_version();
1291 virtual const Version *as_version()
const;
1297 virtual WhileLoop *as_while_loop();
1303 virtual const WhileLoop *as_while_loop()
const;
1309 ::tree::cbor::MapWriter &map,
1310 const ::tree::base::PointerMap &ids
1317 const ::tree::cbor::MapReader &map,
1318 ::tree::base::IdentifierMap &ids
1339 const Expression *as_expression()
const override;
1344 static std::shared_ptr<Expression>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
1379 const BinaryOp *as_binary_op()
const override;
1384 static std::shared_ptr<BinaryOp>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
1403 ArithOp *as_arith_op()
override;
1409 const ArithOp *as_arith_op()
const override;
1414 static std::shared_ptr<ArithOp>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
1432 void find_reachable(::tree::base::PointerMap &map)
const override;
1437 void check_complete(const ::tree::base::PointerMap &map)
const override;
1449 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
1457 Add *as_add()
override;
1463 const Add *as_add()
const override;
1478 bool equals(
const Node &rhs)
const override;
1483 bool operator==(
const Node &rhs)
const override;
1489 ::tree::cbor::MapWriter &map,
1490 const ::tree::base::PointerMap &ids
1496 static std::shared_ptr<Add>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
1526 const Annotated *as_annotated()
const override;
1531 static std::shared_ptr<Annotated>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
1567 void find_reachable(::tree::base::PointerMap &map)
const override;
1572 void check_complete(const ::tree::base::PointerMap &map)
const override;
1584 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
1613 bool equals(
const Node &rhs)
const override;
1618 bool operator==(
const Node &rhs)
const override;
1624 ::tree::cbor::MapWriter &map,
1625 const ::tree::base::PointerMap &ids
1631 static std::shared_ptr<AnnotationData>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
1659 void find_reachable(::tree::base::PointerMap &map)
const override;
1664 void check_complete(const ::tree::base::PointerMap &map)
const override;
1676 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
1690 const Assignment *as_assignment()
const override;
1705 bool equals(
const Node &rhs)
const override;
1710 bool operator==(
const Node &rhs)
const override;
1716 ::tree::cbor::MapWriter &map,
1717 const ::tree::base::PointerMap &ids
1723 static std::shared_ptr<Assignment>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
1748 const BitwiseOp *as_bitwise_op()
const override;
1753 static std::shared_ptr<BitwiseOp>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
1771 void find_reachable(::tree::base::PointerMap &map)
const override;
1776 void check_complete(const ::tree::base::PointerMap &map)
const override;
1788 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
1802 const BitwiseAnd *as_bitwise_and()
const override;
1817 bool equals(
const Node &rhs)
const override;
1822 bool operator==(
const Node &rhs)
const override;
1828 ::tree::cbor::MapWriter &map,
1829 const ::tree::base::PointerMap &ids
1835 static std::shared_ptr<BitwiseAnd>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
1859 UnaryOp *as_unary_op()
override;
1865 const UnaryOp *as_unary_op()
const override;
1870 static std::shared_ptr<UnaryOp>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
1888 void find_reachable(::tree::base::PointerMap &map)
const override;
1893 void check_complete(const ::tree::base::PointerMap &map)
const override;
1905 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
1919 const BitwiseNot *as_bitwise_not()
const override;
1934 bool equals(
const Node &rhs)
const override;
1939 bool operator==(
const Node &rhs)
const override;
1945 ::tree::cbor::MapWriter &map,
1946 const ::tree::base::PointerMap &ids
1952 static std::shared_ptr<BitwiseNot>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
1970 void find_reachable(::tree::base::PointerMap &map)
const override;
1975 void check_complete(const ::tree::base::PointerMap &map)
const override;
1987 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
2001 const BitwiseOr *as_bitwise_or()
const override;
2016 bool equals(
const Node &rhs)
const override;
2021 bool operator==(
const Node &rhs)
const override;
2027 ::tree::cbor::MapWriter &map,
2028 const ::tree::base::PointerMap &ids
2034 static std::shared_ptr<BitwiseOr>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2052 void find_reachable(::tree::base::PointerMap &map)
const override;
2057 void check_complete(const ::tree::base::PointerMap &map)
const override;
2069 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
2083 const BitwiseXor *as_bitwise_xor()
const override;
2098 bool equals(
const Node &rhs)
const override;
2103 bool operator==(
const Node &rhs)
const override;
2109 ::tree::cbor::MapWriter &map,
2110 const ::tree::base::PointerMap &ids
2116 static std::shared_ptr<BitwiseXor>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2141 const Statement *as_statement()
const override;
2146 static std::shared_ptr<Statement>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2171 const Structured *as_structured()
const override;
2176 static std::shared_ptr<Structured>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2194 void find_reachable(::tree::base::PointerMap &map)
const override;
2199 void check_complete(const ::tree::base::PointerMap &map)
const override;
2211 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
2240 bool equals(
const Node &rhs)
const override;
2245 bool operator==(
const Node &rhs)
const override;
2251 ::tree::cbor::MapWriter &map,
2252 const ::tree::base::PointerMap &ids
2258 static std::shared_ptr<BreakStatement>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2281 void find_reachable(::tree::base::PointerMap &map)
const override;
2286 void check_complete(const ::tree::base::PointerMap &map)
const override;
2298 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
2306 Bundle *as_bundle()
override;
2312 const Bundle *as_bundle()
const override;
2327 bool equals(
const Node &rhs)
const override;
2332 bool operator==(
const Node &rhs)
const override;
2338 ::tree::cbor::MapWriter &map,
2339 const ::tree::base::PointerMap &ids
2345 static std::shared_ptr<Bundle>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2364 CmpOp *as_cmp_op()
override;
2370 const CmpOp *as_cmp_op()
const override;
2375 static std::shared_ptr<CmpOp>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2393 void find_reachable(::tree::base::PointerMap &map)
const override;
2398 void check_complete(const ::tree::base::PointerMap &map)
const override;
2410 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
2418 CmpEq *as_cmp_eq()
override;
2424 const CmpEq *as_cmp_eq()
const override;
2439 bool equals(
const Node &rhs)
const override;
2444 bool operator==(
const Node &rhs)
const override;
2450 ::tree::cbor::MapWriter &map,
2451 const ::tree::base::PointerMap &ids
2457 static std::shared_ptr<CmpEq>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2475 void find_reachable(::tree::base::PointerMap &map)
const override;
2480 void check_complete(const ::tree::base::PointerMap &map)
const override;
2492 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
2500 CmpGe *as_cmp_ge()
override;
2506 const CmpGe *as_cmp_ge()
const override;
2521 bool equals(
const Node &rhs)
const override;
2526 bool operator==(
const Node &rhs)
const override;
2532 ::tree::cbor::MapWriter &map,
2533 const ::tree::base::PointerMap &ids
2539 static std::shared_ptr<CmpGe>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2557 void find_reachable(::tree::base::PointerMap &map)
const override;
2562 void check_complete(const ::tree::base::PointerMap &map)
const override;
2574 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
2582 CmpGt *as_cmp_gt()
override;
2588 const CmpGt *as_cmp_gt()
const override;
2603 bool equals(
const Node &rhs)
const override;
2608 bool operator==(
const Node &rhs)
const override;
2614 ::tree::cbor::MapWriter &map,
2615 const ::tree::base::PointerMap &ids
2621 static std::shared_ptr<CmpGt>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2639 void find_reachable(::tree::base::PointerMap &map)
const override;
2644 void check_complete(const ::tree::base::PointerMap &map)
const override;
2656 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
2664 CmpLe *as_cmp_le()
override;
2670 const CmpLe *as_cmp_le()
const override;
2685 bool equals(
const Node &rhs)
const override;
2690 bool operator==(
const Node &rhs)
const override;
2696 ::tree::cbor::MapWriter &map,
2697 const ::tree::base::PointerMap &ids
2703 static std::shared_ptr<CmpLe>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2721 void find_reachable(::tree::base::PointerMap &map)
const override;
2726 void check_complete(const ::tree::base::PointerMap &map)
const override;
2738 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
2746 CmpLt *as_cmp_lt()
override;
2752 const CmpLt *as_cmp_lt()
const override;
2767 bool equals(
const Node &rhs)
const override;
2772 bool operator==(
const Node &rhs)
const override;
2778 ::tree::cbor::MapWriter &map,
2779 const ::tree::base::PointerMap &ids
2785 static std::shared_ptr<CmpLt>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2803 void find_reachable(::tree::base::PointerMap &map)
const override;
2808 void check_complete(const ::tree::base::PointerMap &map)
const override;
2820 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
2828 CmpNe *as_cmp_ne()
override;
2834 const CmpNe *as_cmp_ne()
const override;
2849 bool equals(
const Node &rhs)
const override;
2854 bool operator==(
const Node &rhs)
const override;
2860 ::tree::cbor::MapWriter &map,
2861 const ::tree::base::PointerMap &ids
2867 static std::shared_ptr<CmpNe>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2885 void find_reachable(::tree::base::PointerMap &map)
const override;
2890 void check_complete(const ::tree::base::PointerMap &map)
const override;
2902 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
2931 bool equals(
const Node &rhs)
const override;
2936 bool operator==(
const Node &rhs)
const override;
2942 ::tree::cbor::MapWriter &map,
2943 const ::tree::base::PointerMap &ids
2949 static std::shared_ptr<ContinueStatement>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
2967 void find_reachable(::tree::base::PointerMap &map)
const override;
2972 void check_complete(const ::tree::base::PointerMap &map)
const override;
2984 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
2992 Divide *as_divide()
override;
2998 const Divide *as_divide()
const override;
3013 bool equals(
const Node &rhs)
const override;
3018 bool operator==(
const Node &rhs)
const override;
3024 ::tree::cbor::MapWriter &map,
3025 const ::tree::base::PointerMap &ids
3031 static std::shared_ptr<Divide>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
3044 void find_reachable(::tree::base::PointerMap &map)
const override;
3049 void check_complete(const ::tree::base::PointerMap &map)
const override;
3061 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
3090 bool equals(
const Node &rhs)
const override;
3095 bool operator==(
const Node &rhs)
const override;
3101 ::tree::cbor::MapWriter &map,
3102 const ::tree::base::PointerMap &ids
3108 static std::shared_ptr<ErroneousExpression>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
3122 Root *as_root()
override;
3128 const Root *as_root()
const override;
3133 static std::shared_ptr<Root>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
3146 void find_reachable(::tree::base::PointerMap &map)
const override;
3151 void check_complete(const ::tree::base::PointerMap &map)
const override;
3163 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
3192 bool equals(
const Node &rhs)
const override;
3197 bool operator==(
const Node &rhs)
const override;
3203 ::tree::cbor::MapWriter &map,
3204 const ::tree::base::PointerMap &ids
3210 static std::shared_ptr<ErroneousProgram>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
3228 void find_reachable(::tree::base::PointerMap &map)
const override;
3233 void check_complete(const ::tree::base::PointerMap &map)
const override;
3245 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
3274 bool equals(
const Node &rhs)
const override;
3279 bool operator==(
const Node &rhs)
const override;
3285 ::tree::cbor::MapWriter &map,
3286 const ::tree::base::PointerMap &ids
3292 static std::shared_ptr<ErroneousStatement>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
3315 void find_reachable(::tree::base::PointerMap &map)
const override;
3320 void check_complete(const ::tree::base::PointerMap &map)
const override;
3332 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
3361 bool equals(
const Node &rhs)
const override;
3366 bool operator==(
const Node &rhs)
const override;
3372 ::tree::cbor::MapWriter &map,
3373 const ::tree::base::PointerMap &ids
3379 static std::shared_ptr<ExpressionList>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
3402 void find_reachable(::tree::base::PointerMap &map)
const override;
3407 void check_complete(const ::tree::base::PointerMap &map)
const override;
3419 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
3448 bool equals(
const Node &rhs)
const override;
3453 bool operator==(
const Node &rhs)
const override;
3459 ::tree::cbor::MapWriter &map,
3460 const ::tree::base::PointerMap &ids
3466 static std::shared_ptr<FloatLiteral>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
3505 void find_reachable(::tree::base::PointerMap &map)
const override;
3510 void check_complete(const ::tree::base::PointerMap &map)
const override;
3522 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
3530 ForLoop *as_for_loop()
override;
3536 const ForLoop *as_for_loop()
const override;
3551 bool equals(
const Node &rhs)
const override;
3556 bool operator==(
const Node &rhs)
const override;
3562 ::tree::cbor::MapWriter &map,
3563 const ::tree::base::PointerMap &ids
3569 static std::shared_ptr<ForLoop>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
3609 void find_reachable(::tree::base::PointerMap &map)
const override;
3614 void check_complete(const ::tree::base::PointerMap &map)
const override;
3626 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
3640 const ForeachLoop *as_foreach_loop()
const override;
3655 bool equals(
const Node &rhs)
const override;
3660 bool operator==(
const Node &rhs)
const override;
3666 ::tree::cbor::MapWriter &map,
3667 const ::tree::base::PointerMap &ids
3673 static std::shared_ptr<ForeachLoop>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
3701 void find_reachable(::tree::base::PointerMap &map)
const override;
3706 void check_complete(const ::tree::base::PointerMap &map)
const override;
3718 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
3747 bool equals(
const Node &rhs)
const override;
3752 bool operator==(
const Node &rhs)
const override;
3758 ::tree::cbor::MapWriter &map,
3759 const ::tree::base::PointerMap &ids
3765 static std::shared_ptr<FunctionCall>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
3788 void find_reachable(::tree::base::PointerMap &map)
const override;
3793 void check_complete(const ::tree::base::PointerMap &map)
const override;
3805 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
3819 const Identifier *as_identifier()
const override;
3834 bool equals(
const Node &rhs)
const override;
3839 bool operator==(
const Node &rhs)
const override;
3845 ::tree::cbor::MapWriter &map,
3846 const ::tree::base::PointerMap &ids
3852 static std::shared_ptr<Identifier>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
3880 void find_reachable(::tree::base::PointerMap &map)
const override;
3885 void check_complete(const ::tree::base::PointerMap &map)
const override;
3897 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
3905 IfElse *as_if_else()
override;
3911 const IfElse *as_if_else()
const override;
3926 bool equals(
const Node &rhs)
const override;
3931 bool operator==(
const Node &rhs)
const override;
3937 ::tree::cbor::MapWriter &map,
3938 const ::tree::base::PointerMap &ids
3944 static std::shared_ptr<IfElse>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
3972 void find_reachable(::tree::base::PointerMap &map)
const override;
3977 void check_complete(const ::tree::base::PointerMap &map)
const override;
3989 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
4003 const IfElseBranch *as_if_else_branch()
const override;
4018 bool equals(
const Node &rhs)
const override;
4023 bool operator==(
const Node &rhs)
const override;
4029 ::tree::cbor::MapWriter &map,
4030 const ::tree::base::PointerMap &ids
4036 static std::shared_ptr<IfElseBranch>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
4064 void find_reachable(::tree::base::PointerMap &map)
const override;
4069 void check_complete(const ::tree::base::PointerMap &map)
const override;
4081 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
4089 Index *as_index()
override;
4095 const Index *as_index()
const override;
4110 bool equals(
const Node &rhs)
const override;
4115 bool operator==(
const Node &rhs)
const override;
4121 ::tree::cbor::MapWriter &map,
4122 const ::tree::base::PointerMap &ids
4128 static std::shared_ptr<Index>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
4148 const IndexEntry *as_index_entry()
const override;
4153 static std::shared_ptr<IndexEntry>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
4176 void find_reachable(::tree::base::PointerMap &map)
const override;
4181 void check_complete(const ::tree::base::PointerMap &map)
const override;
4193 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
4207 const IndexItem *as_index_item()
const override;
4222 bool equals(
const Node &rhs)
const override;
4227 bool operator==(
const Node &rhs)
const override;
4233 ::tree::cbor::MapWriter &map,
4234 const ::tree::base::PointerMap &ids
4240 static std::shared_ptr<IndexItem>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
4263 void find_reachable(::tree::base::PointerMap &map)
const override;
4268 void check_complete(const ::tree::base::PointerMap &map)
const override;
4280 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
4294 const IndexList *as_index_list()
const override;
4309 bool equals(
const Node &rhs)
const override;
4314 bool operator==(
const Node &rhs)
const override;
4320 ::tree::cbor::MapWriter &map,
4321 const ::tree::base::PointerMap &ids
4327 static std::shared_ptr<IndexList>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
4355 void find_reachable(::tree::base::PointerMap &map)
const override;
4360 void check_complete(const ::tree::base::PointerMap &map)
const override;
4372 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
4386 const IndexRange *as_index_range()
const override;
4401 bool equals(
const Node &rhs)
const override;
4406 bool operator==(
const Node &rhs)
const override;
4412 ::tree::cbor::MapWriter &map,
4413 const ::tree::base::PointerMap &ids
4419 static std::shared_ptr<IndexRange>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
4453 void find_reachable(::tree::base::PointerMap &map)
const override;
4458 void check_complete(const ::tree::base::PointerMap &map)
const override;
4470 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
4484 const Instruction *as_instruction()
const override;
4499 bool equals(
const Node &rhs)
const override;
4504 bool operator==(
const Node &rhs)
const override;
4510 ::tree::cbor::MapWriter &map,
4511 const ::tree::base::PointerMap &ids
4517 static std::shared_ptr<Instruction>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
4535 void find_reachable(::tree::base::PointerMap &map)
const override;
4540 void check_complete(const ::tree::base::PointerMap &map)
const override;
4552 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
4566 const IntDivide *as_int_divide()
const override;
4581 bool equals(
const Node &rhs)
const override;
4586 bool operator==(
const Node &rhs)
const override;
4592 ::tree::cbor::MapWriter &map,
4593 const ::tree::base::PointerMap &ids
4599 static std::shared_ptr<IntDivide>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
4622 void find_reachable(::tree::base::PointerMap &map)
const override;
4627 void check_complete(const ::tree::base::PointerMap &map)
const override;
4639 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
4668 bool equals(
const Node &rhs)
const override;
4673 bool operator==(
const Node &rhs)
const override;
4679 ::tree::cbor::MapWriter &map,
4680 const ::tree::base::PointerMap &ids
4686 static std::shared_ptr<IntegerLiteral>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
4709 void find_reachable(::tree::base::PointerMap &map)
const override;
4714 void check_complete(const ::tree::base::PointerMap &map)
const override;
4726 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
4740 const JsonLiteral *as_json_literal()
const override;
4755 bool equals(
const Node &rhs)
const override;
4760 bool operator==(
const Node &rhs)
const override;
4766 ::tree::cbor::MapWriter &map,
4767 const ::tree::base::PointerMap &ids
4773 static std::shared_ptr<JsonLiteral>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
4798 const LogicalOp *as_logical_op()
const override;
4803 static std::shared_ptr<LogicalOp>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
4821 void find_reachable(::tree::base::PointerMap &map)
const override;
4826 void check_complete(const ::tree::base::PointerMap &map)
const override;
4838 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
4852 const LogicalAnd *as_logical_and()
const override;
4867 bool equals(
const Node &rhs)
const override;
4872 bool operator==(
const Node &rhs)
const override;
4878 ::tree::cbor::MapWriter &map,
4879 const ::tree::base::PointerMap &ids
4885 static std::shared_ptr<LogicalAnd>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
4903 void find_reachable(::tree::base::PointerMap &map)
const override;
4908 void check_complete(const ::tree::base::PointerMap &map)
const override;
4920 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
4934 const LogicalNot *as_logical_not()
const override;
4949 bool equals(
const Node &rhs)
const override;
4954 bool operator==(
const Node &rhs)
const override;
4960 ::tree::cbor::MapWriter &map,
4961 const ::tree::base::PointerMap &ids
4967 static std::shared_ptr<LogicalNot>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
4985 void find_reachable(::tree::base::PointerMap &map)
const override;
4990 void check_complete(const ::tree::base::PointerMap &map)
const override;
5002 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
5016 const LogicalOr *as_logical_or()
const override;
5031 bool equals(
const Node &rhs)
const override;
5036 bool operator==(
const Node &rhs)
const override;
5042 ::tree::cbor::MapWriter &map,
5043 const ::tree::base::PointerMap &ids
5049 static std::shared_ptr<LogicalOr>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
5067 void find_reachable(::tree::base::PointerMap &map)
const override;
5072 void check_complete(const ::tree::base::PointerMap &map)
const override;
5084 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
5098 const LogicalXor *as_logical_xor()
const override;
5113 bool equals(
const Node &rhs)
const override;
5118 bool operator==(
const Node &rhs)
const override;
5124 ::tree::cbor::MapWriter &map,
5125 const ::tree::base::PointerMap &ids
5131 static std::shared_ptr<LogicalXor>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
5160 void find_reachable(::tree::base::PointerMap &map)
const override;
5165 void check_complete(const ::tree::base::PointerMap &map)
const override;
5177 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
5185 Mapping *as_mapping()
override;
5191 const Mapping *as_mapping()
const override;
5206 bool equals(
const Node &rhs)
const override;
5211 bool operator==(
const Node &rhs)
const override;
5217 ::tree::cbor::MapWriter &map,
5218 const ::tree::base::PointerMap &ids
5224 static std::shared_ptr<Mapping>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
5251 void find_reachable(::tree::base::PointerMap &map)
const override;
5256 void check_complete(const ::tree::base::PointerMap &map)
const override;
5268 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
5297 bool equals(
const Node &rhs)
const override;
5302 bool operator==(
const Node &rhs)
const override;
5308 ::tree::cbor::MapWriter &map,
5309 const ::tree::base::PointerMap &ids
5315 static std::shared_ptr<MatrixLiteral>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
5333 void find_reachable(::tree::base::PointerMap &map)
const override;
5338 void check_complete(const ::tree::base::PointerMap &map)
const override;
5350 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
5358 Modulo *as_modulo()
override;
5364 const Modulo *as_modulo()
const override;
5379 bool equals(
const Node &rhs)
const override;
5384 bool operator==(
const Node &rhs)
const override;
5390 ::tree::cbor::MapWriter &map,
5391 const ::tree::base::PointerMap &ids
5397 static std::shared_ptr<Modulo>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
5415 void find_reachable(::tree::base::PointerMap &map)
const override;
5420 void check_complete(const ::tree::base::PointerMap &map)
const override;
5432 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
5446 const Multiply *as_multiply()
const override;
5461 bool equals(
const Node &rhs)
const override;
5466 bool operator==(
const Node &rhs)
const override;
5472 ::tree::cbor::MapWriter &map,
5473 const ::tree::base::PointerMap &ids
5479 static std::shared_ptr<Multiply>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
5497 void find_reachable(::tree::base::PointerMap &map)
const override;
5502 void check_complete(const ::tree::base::PointerMap &map)
const override;
5514 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
5522 Negate *as_negate()
override;
5528 const Negate *as_negate()
const override;
5543 bool equals(
const Node &rhs)
const override;
5548 bool operator==(
const Node &rhs)
const override;
5554 ::tree::cbor::MapWriter &map,
5555 const ::tree::base::PointerMap &ids
5561 static std::shared_ptr<Negate>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
5579 void find_reachable(::tree::base::PointerMap &map)
const override;
5584 void check_complete(const ::tree::base::PointerMap &map)
const override;
5596 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
5604 Power *as_power()
override;
5610 const Power *as_power()
const override;
5625 bool equals(
const Node &rhs)
const override;
5630 bool operator==(
const Node &rhs)
const override;
5636 ::tree::cbor::MapWriter &map,
5637 const ::tree::base::PointerMap &ids
5643 static std::shared_ptr<Power>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
5676 void find_reachable(::tree::base::PointerMap &map)
const override;
5681 void check_complete(const ::tree::base::PointerMap &map)
const override;
5693 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
5701 Program *as_program()
override;
5707 const Program *as_program()
const override;
5722 bool equals(
const Node &rhs)
const override;
5727 bool operator==(
const Node &rhs)
const override;
5733 ::tree::cbor::MapWriter &map,
5734 const ::tree::base::PointerMap &ids
5740 static std::shared_ptr<Program>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
5768 void find_reachable(::tree::base::PointerMap &map)
const override;
5773 void check_complete(const ::tree::base::PointerMap &map)
const override;
5785 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
5814 bool equals(
const Node &rhs)
const override;
5819 bool operator==(
const Node &rhs)
const override;
5825 ::tree::cbor::MapWriter &map,
5826 const ::tree::base::PointerMap &ids
5832 static std::shared_ptr<RepeatUntilLoop>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
5851 ShiftOp *as_shift_op()
override;
5857 const ShiftOp *as_shift_op()
const override;
5862 static std::shared_ptr<ShiftOp>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
5880 void find_reachable(::tree::base::PointerMap &map)
const override;
5885 void check_complete(const ::tree::base::PointerMap &map)
const override;
5897 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
5911 const ShiftLeft *as_shift_left()
const override;
5926 bool equals(
const Node &rhs)
const override;
5931 bool operator==(
const Node &rhs)
const override;
5937 ::tree::cbor::MapWriter &map,
5938 const ::tree::base::PointerMap &ids
5944 static std::shared_ptr<ShiftLeft>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
5962 void find_reachable(::tree::base::PointerMap &map)
const override;
5967 void check_complete(const ::tree::base::PointerMap &map)
const override;
5979 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
6008 bool equals(
const Node &rhs)
const override;
6013 bool operator==(
const Node &rhs)
const override;
6019 ::tree::cbor::MapWriter &map,
6020 const ::tree::base::PointerMap &ids
6026 static std::shared_ptr<ShiftRightArith>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
6044 void find_reachable(::tree::base::PointerMap &map)
const override;
6049 void check_complete(const ::tree::base::PointerMap &map)
const override;
6061 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
6090 bool equals(
const Node &rhs)
const override;
6095 bool operator==(
const Node &rhs)
const override;
6101 ::tree::cbor::MapWriter &map,
6102 const ::tree::base::PointerMap &ids
6108 static std::shared_ptr<ShiftRightLogic>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
6131 void find_reachable(::tree::base::PointerMap &map)
const override;
6136 void check_complete(const ::tree::base::PointerMap &map)
const override;
6148 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
6177 bool equals(
const Node &rhs)
const override;
6182 bool operator==(
const Node &rhs)
const override;
6188 ::tree::cbor::MapWriter &map,
6189 const ::tree::base::PointerMap &ids
6195 static std::shared_ptr<StatementList>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
6218 void find_reachable(::tree::base::PointerMap &map)
const override;
6223 void check_complete(const ::tree::base::PointerMap &map)
const override;
6235 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
6264 bool equals(
const Node &rhs)
const override;
6269 bool operator==(
const Node &rhs)
const override;
6275 ::tree::cbor::MapWriter &map,
6276 const ::tree::base::PointerMap &ids
6282 static std::shared_ptr<StringLiteral>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
6311 void find_reachable(::tree::base::PointerMap &map)
const override;
6316 void check_complete(const ::tree::base::PointerMap &map)
const override;
6328 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
6342 const Subcircuit *as_subcircuit()
const override;
6357 bool equals(
const Node &rhs)
const override;
6362 bool operator==(
const Node &rhs)
const override;
6368 ::tree::cbor::MapWriter &map,
6369 const ::tree::base::PointerMap &ids
6375 static std::shared_ptr<Subcircuit>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
6393 void find_reachable(::tree::base::PointerMap &map)
const override;
6398 void check_complete(const ::tree::base::PointerMap &map)
const override;
6410 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
6424 const Subtract *as_subtract()
const override;
6439 bool equals(
const Node &rhs)
const override;
6444 bool operator==(
const Node &rhs)
const override;
6450 ::tree::cbor::MapWriter &map,
6451 const ::tree::base::PointerMap &ids
6457 static std::shared_ptr<Subtract>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
6490 void find_reachable(::tree::base::PointerMap &map)
const override;
6495 void check_complete(const ::tree::base::PointerMap &map)
const override;
6507 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
6521 const TernaryCond *as_ternary_cond()
const override;
6536 bool equals(
const Node &rhs)
const override;
6541 bool operator==(
const Node &rhs)
const override;
6547 ::tree::cbor::MapWriter &map,
6548 const ::tree::base::PointerMap &ids
6554 static std::shared_ptr<TernaryCond>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
6582 void find_reachable(::tree::base::PointerMap &map)
const override;
6587 void check_complete(const ::tree::base::PointerMap &map)
const override;
6599 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
6613 const Variables *as_variables()
const override;
6628 bool equals(
const Node &rhs)
const override;
6633 bool operator==(
const Node &rhs)
const override;
6639 ::tree::cbor::MapWriter &map,
6640 const ::tree::base::PointerMap &ids
6646 static std::shared_ptr<Variables>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
6669 void find_reachable(::tree::base::PointerMap &map)
const override;
6674 void check_complete(const ::tree::base::PointerMap &map)
const override;
6686 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
6694 Version *as_version()
override;
6700 const Version *as_version()
const override;
6715 bool equals(
const Node &rhs)
const override;
6720 bool operator==(
const Node &rhs)
const override;
6726 ::tree::cbor::MapWriter &map,
6727 const ::tree::base::PointerMap &ids
6733 static std::shared_ptr<Version>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
6761 void find_reachable(::tree::base::PointerMap &map)
const override;
6766 void check_complete(const ::tree::base::PointerMap &map)
const override;
6778 void visit_internal(
VisitorBase &visitor,
void *retval)
override;
6786 WhileLoop *as_while_loop()
override;
6792 const WhileLoop *as_while_loop()
const override;
6807 bool equals(
const Node &rhs)
const override;
6812 bool operator==(
const Node &rhs)
const override;
6818 ::tree::cbor::MapWriter &map,
6819 const ::tree::base::PointerMap &ids
6825 static std::shared_ptr<WhileLoop>
deserialize(const ::tree::cbor::MapReader &map, ::tree::base::IdentifierMap &ids);
6914 friend class WhileLoop;
6919 virtual void raw_visit_node(
Node &node,
void *retval) = 0;
6924 virtual void raw_visit_add(
Add &node,
void *retval) = 0;
6929 virtual void raw_visit_annotated(
Annotated &node,
void *retval) = 0;
6934 virtual void raw_visit_annotation_data(
AnnotationData &node,
void *retval) = 0;
6939 virtual void raw_visit_arith_op(
ArithOp &node,
void *retval) = 0;
6944 virtual void raw_visit_assignment(
Assignment &node,
void *retval) = 0;
6949 virtual void raw_visit_binary_op(
BinaryOp &node,
void *retval) = 0;
6954 virtual void raw_visit_bitwise_and(
BitwiseAnd &node,
void *retval) = 0;
6959 virtual void raw_visit_bitwise_not(
BitwiseNot &node,
void *retval) = 0;
6964 virtual void raw_visit_bitwise_op(
BitwiseOp &node,
void *retval) = 0;
6969 virtual void raw_visit_bitwise_or(
BitwiseOr &node,
void *retval) = 0;
6974 virtual void raw_visit_bitwise_xor(
BitwiseXor &node,
void *retval) = 0;
6979 virtual void raw_visit_break_statement(
BreakStatement &node,
void *retval) = 0;
6984 virtual void raw_visit_bundle(
Bundle &node,
void *retval) = 0;
6989 virtual void raw_visit_cmp_eq(
CmpEq &node,
void *retval) = 0;
6994 virtual void raw_visit_cmp_ge(
CmpGe &node,
void *retval) = 0;
6999 virtual void raw_visit_cmp_gt(
CmpGt &node,
void *retval) = 0;
7004 virtual void raw_visit_cmp_le(
CmpLe &node,
void *retval) = 0;
7009 virtual void raw_visit_cmp_lt(
CmpLt &node,
void *retval) = 0;
7014 virtual void raw_visit_cmp_ne(
CmpNe &node,
void *retval) = 0;
7019 virtual void raw_visit_cmp_op(
CmpOp &node,
void *retval) = 0;
7024 virtual void raw_visit_continue_statement(
ContinueStatement &node,
void *retval) = 0;
7029 virtual void raw_visit_divide(
Divide &node,
void *retval) = 0;
7039 virtual void raw_visit_erroneous_program(
ErroneousProgram &node,
void *retval) = 0;
7044 virtual void raw_visit_erroneous_statement(
ErroneousStatement &node,
void *retval) = 0;
7049 virtual void raw_visit_expression(
Expression &node,
void *retval) = 0;
7054 virtual void raw_visit_expression_list(
ExpressionList &node,
void *retval) = 0;
7059 virtual void raw_visit_float_literal(
FloatLiteral &node,
void *retval) = 0;
7064 virtual void raw_visit_for_loop(
ForLoop &node,
void *retval) = 0;
7069 virtual void raw_visit_foreach_loop(
ForeachLoop &node,
void *retval) = 0;
7074 virtual void raw_visit_function_call(
FunctionCall &node,
void *retval) = 0;
7079 virtual void raw_visit_identifier(
Identifier &node,
void *retval) = 0;
7084 virtual void raw_visit_if_else(
IfElse &node,
void *retval) = 0;
7089 virtual void raw_visit_if_else_branch(
IfElseBranch &node,
void *retval) = 0;
7094 virtual void raw_visit_index(
Index &node,
void *retval) = 0;
7099 virtual void raw_visit_index_entry(
IndexEntry &node,
void *retval) = 0;
7104 virtual void raw_visit_index_item(
IndexItem &node,
void *retval) = 0;
7109 virtual void raw_visit_index_list(
IndexList &node,
void *retval) = 0;
7114 virtual void raw_visit_index_range(
IndexRange &node,
void *retval) = 0;
7119 virtual void raw_visit_instruction(
Instruction &node,
void *retval) = 0;
7124 virtual void raw_visit_int_divide(
IntDivide &node,
void *retval) = 0;
7129 virtual void raw_visit_integer_literal(
IntegerLiteral &node,
void *retval) = 0;
7134 virtual void raw_visit_json_literal(
JsonLiteral &node,
void *retval) = 0;
7139 virtual void raw_visit_logical_and(
LogicalAnd &node,
void *retval) = 0;
7144 virtual void raw_visit_logical_not(
LogicalNot &node,
void *retval) = 0;
7149 virtual void raw_visit_logical_op(
LogicalOp &node,
void *retval) = 0;
7154 virtual void raw_visit_logical_or(
LogicalOr &node,
void *retval) = 0;
7159 virtual void raw_visit_logical_xor(
LogicalXor &node,
void *retval) = 0;
7164 virtual void raw_visit_mapping(
Mapping &node,
void *retval) = 0;
7169 virtual void raw_visit_matrix_literal(
MatrixLiteral &node,
void *retval) = 0;
7174 virtual void raw_visit_modulo(
Modulo &node,
void *retval) = 0;
7179 virtual void raw_visit_multiply(
Multiply &node,
void *retval) = 0;
7184 virtual void raw_visit_negate(
Negate &node,
void *retval) = 0;
7189 virtual void raw_visit_power(
Power &node,
void *retval) = 0;
7194 virtual void raw_visit_program(
Program &node,
void *retval) = 0;
7199 virtual void raw_visit_repeat_until_loop(
RepeatUntilLoop &node,
void *retval) = 0;
7204 virtual void raw_visit_root(
Root &node,
void *retval) = 0;
7209 virtual void raw_visit_shift_left(
ShiftLeft &node,
void *retval) = 0;
7214 virtual void raw_visit_shift_op(
ShiftOp &node,
void *retval) = 0;
7219 virtual void raw_visit_shift_right_arith(
ShiftRightArith &node,
void *retval) = 0;
7224 virtual void raw_visit_shift_right_logic(
ShiftRightLogic &node,
void *retval) = 0;
7229 virtual void raw_visit_statement(
Statement &node,
void *retval) = 0;
7234 virtual void raw_visit_statement_list(
StatementList &node,
void *retval) = 0;
7239 virtual void raw_visit_string_literal(
StringLiteral &node,
void *retval) = 0;
7244 virtual void raw_visit_structured(
Structured &node,
void *retval) = 0;
7249 virtual void raw_visit_subcircuit(
Subcircuit &node,
void *retval) = 0;
7254 virtual void raw_visit_subtract(
Subtract &node,
void *retval) = 0;
7259 virtual void raw_visit_ternary_cond(
TernaryCond &node,
void *retval) = 0;
7264 virtual void raw_visit_unary_op(
UnaryOp &node,
void *retval) = 0;
7269 virtual void raw_visit_variables(
Variables &node,
void *retval) = 0;
7274 virtual void raw_visit_version(
Version &node,
void *retval) = 0;
7279 virtual void raw_visit_while_loop(WhileLoop &node,
void *retval) = 0;
7293 template <
typename T>
7300 void raw_visit_node(
Node &node,
void *retval)
override;
7305 void raw_visit_add(
Add &node,
void *retval)
override;
7310 void raw_visit_annotated(
Annotated &node,
void *retval)
override;
7315 void raw_visit_annotation_data(
AnnotationData &node,
void *retval)
override;
7320 void raw_visit_arith_op(
ArithOp &node,
void *retval)
override;
7325 void raw_visit_assignment(
Assignment &node,
void *retval)
override;
7330 void raw_visit_binary_op(
BinaryOp &node,
void *retval)
override;
7335 void raw_visit_bitwise_and(
BitwiseAnd &node,
void *retval)
override;
7340 void raw_visit_bitwise_not(
BitwiseNot &node,
void *retval)
override;
7345 void raw_visit_bitwise_op(
BitwiseOp &node,
void *retval)
override;
7350 void raw_visit_bitwise_or(
BitwiseOr &node,
void *retval)
override;
7355 void raw_visit_bitwise_xor(
BitwiseXor &node,
void *retval)
override;
7360 void raw_visit_break_statement(
BreakStatement &node,
void *retval)
override;
7365 void raw_visit_bundle(
Bundle &node,
void *retval)
override;
7370 void raw_visit_cmp_eq(
CmpEq &node,
void *retval)
override;
7375 void raw_visit_cmp_ge(
CmpGe &node,
void *retval)
override;
7380 void raw_visit_cmp_gt(
CmpGt &node,
void *retval)
override;
7385 void raw_visit_cmp_le(
CmpLe &node,
void *retval)
override;
7390 void raw_visit_cmp_lt(
CmpLt &node,
void *retval)
override;
7395 void raw_visit_cmp_ne(
CmpNe &node,
void *retval)
override;
7400 void raw_visit_cmp_op(
CmpOp &node,
void *retval)
override;
7405 void raw_visit_continue_statement(
ContinueStatement &node,
void *retval)
override;
7410 void raw_visit_divide(
Divide &node,
void *retval)
override;
7420 void raw_visit_erroneous_program(
ErroneousProgram &node,
void *retval)
override;
7430 void raw_visit_expression(
Expression &node,
void *retval)
override;
7435 void raw_visit_expression_list(
ExpressionList &node,
void *retval)
override;
7440 void raw_visit_float_literal(
FloatLiteral &node,
void *retval)
override;
7445 void raw_visit_for_loop(
ForLoop &node,
void *retval)
override;
7450 void raw_visit_foreach_loop(
ForeachLoop &node,
void *retval)
override;
7455 void raw_visit_function_call(
FunctionCall &node,
void *retval)
override;
7460 void raw_visit_identifier(
Identifier &node,
void *retval)
override;
7465 void raw_visit_if_else(
IfElse &node,
void *retval)
override;
7470 void raw_visit_if_else_branch(
IfElseBranch &node,
void *retval)
override;
7475 void raw_visit_index(
Index &node,
void *retval)
override;
7480 void raw_visit_index_entry(
IndexEntry &node,
void *retval)
override;
7485 void raw_visit_index_item(
IndexItem &node,
void *retval)
override;
7490 void raw_visit_index_list(
IndexList &node,
void *retval)
override;
7495 void raw_visit_index_range(
IndexRange &node,
void *retval)
override;
7500 void raw_visit_instruction(
Instruction &node,
void *retval)
override;
7505 void raw_visit_int_divide(
IntDivide &node,
void *retval)
override;
7510 void raw_visit_integer_literal(
IntegerLiteral &node,
void *retval)
override;
7515 void raw_visit_json_literal(
JsonLiteral &node,
void *retval)
override;
7520 void raw_visit_logical_and(
LogicalAnd &node,
void *retval)
override;
7525 void raw_visit_logical_not(
LogicalNot &node,
void *retval)
override;
7530 void raw_visit_logical_op(
LogicalOp &node,
void *retval)
override;
7535 void raw_visit_logical_or(
LogicalOr &node,
void *retval)
override;
7540 void raw_visit_logical_xor(
LogicalXor &node,
void *retval)
override;
7545 void raw_visit_mapping(
Mapping &node,
void *retval)
override;
7550 void raw_visit_matrix_literal(
MatrixLiteral &node,
void *retval)
override;
7555 void raw_visit_modulo(
Modulo &node,
void *retval)
override;
7560 void raw_visit_multiply(
Multiply &node,
void *retval)
override;
7565 void raw_visit_negate(
Negate &node,
void *retval)
override;
7570 void raw_visit_power(
Power &node,
void *retval)
override;
7575 void raw_visit_program(
Program &node,
void *retval)
override;
7580 void raw_visit_repeat_until_loop(
RepeatUntilLoop &node,
void *retval)
override;
7585 void raw_visit_root(
Root &node,
void *retval)
override;
7590 void raw_visit_shift_left(
ShiftLeft &node,
void *retval)
override;
7595 void raw_visit_shift_op(
ShiftOp &node,
void *retval)
override;
7600 void raw_visit_shift_right_arith(
ShiftRightArith &node,
void *retval)
override;
7605 void raw_visit_shift_right_logic(
ShiftRightLogic &node,
void *retval)
override;
7610 void raw_visit_statement(
Statement &node,
void *retval)
override;
7615 void raw_visit_statement_list(
StatementList &node,
void *retval)
override;
7620 void raw_visit_string_literal(
StringLiteral &node,
void *retval)
override;
7625 void raw_visit_structured(
Structured &node,
void *retval)
override;
7630 void raw_visit_subcircuit(
Subcircuit &node,
void *retval)
override;
7635 void raw_visit_subtract(
Subtract &node,
void *retval)
override;
7640 void raw_visit_ternary_cond(
TernaryCond &node,
void *retval)
override;
7645 void raw_visit_unary_op(
UnaryOp &node,
void *retval)
override;
7650 void raw_visit_variables(
Variables &node,
void *retval)
override;
7655 void raw_visit_version(
Version &node,
void *retval)
override;
7660 void raw_visit_while_loop(WhileLoop &node,
void *retval)
override;
7667 virtual T visit_node(
Node &node) = 0;
7673 return visit_arith_op(node);
7680 return visit_node(node);
7687 return visit_node(node);
7694 return visit_binary_op(node);
7701 return visit_node(node);
7708 return visit_expression(node);
7715 return visit_bitwise_op(node);
7722 return visit_unary_op(node);
7729 return visit_binary_op(node);
7736 return visit_bitwise_op(node);
7743 return visit_bitwise_op(node);
7750 return visit_structured(node);
7757 return visit_statement(node);
7764 return visit_cmp_op(node);
7771 return visit_cmp_op(node);
7778 return visit_cmp_op(node);
7785 return visit_cmp_op(node);
7792 return visit_cmp_op(node);
7799 return visit_cmp_op(node);
7806 return visit_binary_op(node);
7813 return visit_structured(node);
7820 return visit_arith_op(node);
7827 return visit_expression(node);
7834 return visit_root(node);
7841 return visit_statement(node);
7848 return visit_node(node);
7855 return visit_node(node);
7862 return visit_expression(node);
7869 return visit_structured(node);
7876 return visit_structured(node);
7883 return visit_expression(node);
7890 return visit_expression(node);
7897 return visit_structured(node);
7904 return visit_node(node);
7911 return visit_expression(node);
7918 return visit_node(node);
7925 return visit_index_entry(node);
7932 return visit_node(node);
7939 return visit_index_entry(node);
7946 return visit_annotated(node);
7953 return visit_arith_op(node);
7960 return visit_expression(node);
7967 return visit_expression(node);
7974 return visit_logical_op(node);
7981 return visit_unary_op(node);
7988 return visit_binary_op(node);
7995 return visit_logical_op(node);
8002 return visit_logical_op(node);
8009 return visit_statement(node);
8016 return visit_expression(node);
8023 return visit_arith_op(node);
8030 return visit_arith_op(node);
8037 return visit_unary_op(node);
8044 return visit_arith_op(node);
8051 return visit_root(node);
8058 return visit_structured(node);
8065 return visit_node(node);
8072 return visit_shift_op(node);
8079 return visit_binary_op(node);
8086 return visit_shift_op(node);
8093 return visit_shift_op(node);
8100 return visit_annotated(node);
8107 return visit_node(node);
8114 return visit_expression(node);
8121 return visit_statement(node);
8128 return visit_statement(node);
8135 return visit_arith_op(node);
8142 return visit_expression(node);
8149 return visit_expression(node);
8156 return visit_statement(node);
8163 return visit_node(node);
8170 return visit_structured(node);
8178 template <
typename T>
8180 if (retval ==
nullptr) {
8181 this->visit_node(node);
8183 *((T*)retval) = this->visit_node(node);
8196 template <
typename T>
8198 if (retval ==
nullptr) {
8199 this->visit_add(node);
8201 *((T*)retval) = this->visit_add(node);
8214 template <
typename T>
8216 if (retval ==
nullptr) {
8217 this->visit_annotated(node);
8219 *((T*)retval) = this->visit_annotated(node);
8232 template <
typename T>
8234 if (retval ==
nullptr) {
8235 this->visit_annotation_data(node);
8237 *((T*)retval) = this->visit_annotation_data(node);
8250 template <
typename T>
8252 if (retval ==
nullptr) {
8253 this->visit_arith_op(node);
8255 *((T*)retval) = this->visit_arith_op(node);
8268 template <
typename T>
8270 if (retval ==
nullptr) {
8271 this->visit_assignment(node);
8273 *((T*)retval) = this->visit_assignment(node);
8286 template <
typename T>
8288 if (retval ==
nullptr) {
8289 this->visit_binary_op(node);
8291 *((T*)retval) = this->visit_binary_op(node);
8304 template <
typename T>
8306 if (retval ==
nullptr) {
8307 this->visit_bitwise_and(node);
8309 *((T*)retval) = this->visit_bitwise_and(node);
8322 template <
typename T>
8324 if (retval ==
nullptr) {
8325 this->visit_bitwise_not(node);
8327 *((T*)retval) = this->visit_bitwise_not(node);
8340 template <
typename T>
8342 if (retval ==
nullptr) {
8343 this->visit_bitwise_op(node);
8345 *((T*)retval) = this->visit_bitwise_op(node);
8358 template <
typename T>
8360 if (retval ==
nullptr) {
8361 this->visit_bitwise_or(node);
8363 *((T*)retval) = this->visit_bitwise_or(node);
8376 template <
typename T>
8378 if (retval ==
nullptr) {
8379 this->visit_bitwise_xor(node);
8381 *((T*)retval) = this->visit_bitwise_xor(node);
8394 template <
typename T>
8396 if (retval ==
nullptr) {
8397 this->visit_break_statement(node);
8399 *((T*)retval) = this->visit_break_statement(node);
8412 template <
typename T>
8414 if (retval ==
nullptr) {
8415 this->visit_bundle(node);
8417 *((T*)retval) = this->visit_bundle(node);
8430 template <
typename T>
8432 if (retval ==
nullptr) {
8433 this->visit_cmp_eq(node);
8435 *((T*)retval) = this->visit_cmp_eq(node);
8448 template <
typename T>
8450 if (retval ==
nullptr) {
8451 this->visit_cmp_ge(node);
8453 *((T*)retval) = this->visit_cmp_ge(node);
8466 template <
typename T>
8468 if (retval ==
nullptr) {
8469 this->visit_cmp_gt(node);
8471 *((T*)retval) = this->visit_cmp_gt(node);
8484 template <
typename T>
8486 if (retval ==
nullptr) {
8487 this->visit_cmp_le(node);
8489 *((T*)retval) = this->visit_cmp_le(node);
8502 template <
typename T>
8504 if (retval ==
nullptr) {
8505 this->visit_cmp_lt(node);
8507 *((T*)retval) = this->visit_cmp_lt(node);
8520 template <
typename T>
8522 if (retval ==
nullptr) {
8523 this->visit_cmp_ne(node);
8525 *((T*)retval) = this->visit_cmp_ne(node);
8538 template <
typename T>
8540 if (retval ==
nullptr) {
8541 this->visit_cmp_op(node);
8543 *((T*)retval) = this->visit_cmp_op(node);
8556 template <
typename T>
8558 if (retval ==
nullptr) {
8559 this->visit_continue_statement(node);
8561 *((T*)retval) = this->visit_continue_statement(node);
8574 template <
typename T>
8576 if (retval ==
nullptr) {
8577 this->visit_divide(node);
8579 *((T*)retval) = this->visit_divide(node);
8592 template <
typename T>
8594 if (retval ==
nullptr) {
8595 this->visit_erroneous_expression(node);
8597 *((T*)retval) = this->visit_erroneous_expression(node);
8610 template <
typename T>
8612 if (retval ==
nullptr) {
8613 this->visit_erroneous_program(node);
8615 *((T*)retval) = this->visit_erroneous_program(node);
8628 template <
typename T>
8630 if (retval ==
nullptr) {
8631 this->visit_erroneous_statement(node);
8633 *((T*)retval) = this->visit_erroneous_statement(node);
8646 template <
typename T>
8648 if (retval ==
nullptr) {
8649 this->visit_expression(node);
8651 *((T*)retval) = this->visit_expression(node);
8664 template <
typename T>
8666 if (retval ==
nullptr) {
8667 this->visit_expression_list(node);
8669 *((T*)retval) = this->visit_expression_list(node);
8682 template <
typename T>
8684 if (retval ==
nullptr) {
8685 this->visit_float_literal(node);
8687 *((T*)retval) = this->visit_float_literal(node);
8700 template <
typename T>
8702 if (retval ==
nullptr) {
8703 this->visit_for_loop(node);
8705 *((T*)retval) = this->visit_for_loop(node);
8718 template <
typename T>
8720 if (retval ==
nullptr) {
8721 this->visit_foreach_loop(node);
8723 *((T*)retval) = this->visit_foreach_loop(node);
8736 template <
typename T>
8738 if (retval ==
nullptr) {
8739 this->visit_function_call(node);
8741 *((T*)retval) = this->visit_function_call(node);
8754 template <
typename T>
8756 if (retval ==
nullptr) {
8757 this->visit_identifier(node);
8759 *((T*)retval) = this->visit_identifier(node);
8772 template <
typename T>
8774 if (retval ==
nullptr) {
8775 this->visit_if_else(node);
8777 *((T*)retval) = this->visit_if_else(node);
8790 template <
typename T>
8792 if (retval ==
nullptr) {
8793 this->visit_if_else_branch(node);
8795 *((T*)retval) = this->visit_if_else_branch(node);
8808 template <
typename T>
8810 if (retval ==
nullptr) {
8811 this->visit_index(node);
8813 *((T*)retval) = this->visit_index(node);
8826 template <
typename T>
8828 if (retval ==
nullptr) {
8829 this->visit_index_entry(node);
8831 *((T*)retval) = this->visit_index_entry(node);
8844 template <
typename T>
8846 if (retval ==
nullptr) {
8847 this->visit_index_item(node);
8849 *((T*)retval) = this->visit_index_item(node);
8862 template <
typename T>
8864 if (retval ==
nullptr) {
8865 this->visit_index_list(node);
8867 *((T*)retval) = this->visit_index_list(node);
8880 template <
typename T>
8882 if (retval ==
nullptr) {
8883 this->visit_index_range(node);
8885 *((T*)retval) = this->visit_index_range(node);
8898 template <
typename T>
8900 if (retval ==
nullptr) {
8901 this->visit_instruction(node);
8903 *((T*)retval) = this->visit_instruction(node);
8916 template <
typename T>
8918 if (retval ==
nullptr) {
8919 this->visit_int_divide(node);
8921 *((T*)retval) = this->visit_int_divide(node);
8934 template <
typename T>
8936 if (retval ==
nullptr) {
8937 this->visit_integer_literal(node);
8939 *((T*)retval) = this->visit_integer_literal(node);
8952 template <
typename T>
8954 if (retval ==
nullptr) {
8955 this->visit_json_literal(node);
8957 *((T*)retval) = this->visit_json_literal(node);
8970 template <
typename T>
8972 if (retval ==
nullptr) {
8973 this->visit_logical_and(node);
8975 *((T*)retval) = this->visit_logical_and(node);
8988 template <
typename T>
8990 if (retval ==
nullptr) {
8991 this->visit_logical_not(node);
8993 *((T*)retval) = this->visit_logical_not(node);
9006 template <
typename T>
9008 if (retval ==
nullptr) {
9009 this->visit_logical_op(node);
9011 *((T*)retval) = this->visit_logical_op(node);
9024 template <
typename T>
9026 if (retval ==
nullptr) {
9027 this->visit_logical_or(node);
9029 *((T*)retval) = this->visit_logical_or(node);
9042 template <
typename T>
9044 if (retval ==
nullptr) {
9045 this->visit_logical_xor(node);
9047 *((T*)retval) = this->visit_logical_xor(node);
9060 template <
typename T>
9062 if (retval ==
nullptr) {
9063 this->visit_mapping(node);
9065 *((T*)retval) = this->visit_mapping(node);
9078 template <
typename T>
9080 if (retval ==
nullptr) {
9081 this->visit_matrix_literal(node);
9083 *((T*)retval) = this->visit_matrix_literal(node);
9096 template <
typename T>
9098 if (retval ==
nullptr) {
9099 this->visit_modulo(node);
9101 *((T*)retval) = this->visit_modulo(node);
9114 template <
typename T>
9116 if (retval ==
nullptr) {
9117 this->visit_multiply(node);
9119 *((T*)retval) = this->visit_multiply(node);
9132 template <
typename T>
9134 if (retval ==
nullptr) {
9135 this->visit_negate(node);
9137 *((T*)retval) = this->visit_negate(node);
9150 template <
typename T>
9152 if (retval ==
nullptr) {
9153 this->visit_power(node);
9155 *((T*)retval) = this->visit_power(node);
9168 template <
typename T>
9170 if (retval ==
nullptr) {
9171 this->visit_program(node);
9173 *((T*)retval) = this->visit_program(node);
9186 template <
typename T>
9188 if (retval ==
nullptr) {
9189 this->visit_repeat_until_loop(node);
9191 *((T*)retval) = this->visit_repeat_until_loop(node);
9204 template <
typename T>
9206 if (retval ==
nullptr) {
9207 this->visit_root(node);
9209 *((T*)retval) = this->visit_root(node);
9222 template <
typename T>
9224 if (retval ==
nullptr) {
9225 this->visit_shift_left(node);
9227 *((T*)retval) = this->visit_shift_left(node);
9240 template <
typename T>
9242 if (retval ==
nullptr) {
9243 this->visit_shift_op(node);
9245 *((T*)retval) = this->visit_shift_op(node);
9258 template <
typename T>
9260 if (retval ==
nullptr) {
9261 this->visit_shift_right_arith(node);
9263 *((T*)retval) = this->visit_shift_right_arith(node);
9276 template <
typename T>
9278 if (retval ==
nullptr) {
9279 this->visit_shift_right_logic(node);
9281 *((T*)retval) = this->visit_shift_right_logic(node);
9294 template <
typename T>
9296 if (retval ==
nullptr) {
9297 this->visit_statement(node);
9299 *((T*)retval) = this->visit_statement(node);
9312 template <
typename T>
9314 if (retval ==
nullptr) {
9315 this->visit_statement_list(node);
9317 *((T*)retval) = this->visit_statement_list(node);
9330 template <
typename T>
9332 if (retval ==
nullptr) {
9333 this->visit_string_literal(node);
9335 *((T*)retval) = this->visit_string_literal(node);
9348 template <
typename T>
9350 if (retval ==
nullptr) {
9351 this->visit_structured(node);
9353 *((T*)retval) = this->visit_structured(node);
9366 template <
typename T>
9368 if (retval ==
nullptr) {
9369 this->visit_subcircuit(node);
9371 *((T*)retval) = this->visit_subcircuit(node);
9384 template <
typename T>
9386 if (retval ==
nullptr) {
9387 this->visit_subtract(node);
9389 *((T*)retval) = this->visit_subtract(node);
9402 template <
typename T>
9404 if (retval ==
nullptr) {
9405 this->visit_ternary_cond(node);
9407 *((T*)retval) = this->visit_ternary_cond(node);
9420 template <
typename T>
9422 if (retval ==
nullptr) {
9423 this->visit_unary_op(node);
9425 *((T*)retval) = this->visit_unary_op(node);
9438 template <
typename T>
9440 if (retval ==
nullptr) {
9441 this->visit_variables(node);
9443 *((T*)retval) = this->visit_variables(node);
9456 template <
typename T>
9458 if (retval ==
nullptr) {
9459 this->visit_version(node);
9461 *((T*)retval) = this->visit_version(node);
9474 template <
typename T>
9476 if (retval ==
nullptr) {
9477 this->visit_while_loop(node);
9479 *((T*)retval) = this->visit_while_loop(node);
9502 void visit_add(
Add &node)
override;
9507 void visit_annotated(
Annotated &node)
override;
9517 void visit_arith_op(
ArithOp &node)
override;
9522 void visit_assignment(
Assignment &node)
override;
9527 void visit_binary_op(
BinaryOp &node)
override;
9532 void visit_bitwise_and(
BitwiseAnd &node)
override;
9537 void visit_bitwise_not(
BitwiseNot &node)
override;
9542 void visit_bitwise_op(
BitwiseOp &node)
override;
9547 void visit_bitwise_or(
BitwiseOr &node)
override;
9552 void visit_bitwise_xor(
BitwiseXor &node)
override;
9562 void visit_bundle(
Bundle &node)
override;
9567 void visit_cmp_eq(
CmpEq &node)
override;
9572 void visit_cmp_ge(
CmpGe &node)
override;
9577 void visit_cmp_gt(
CmpGt &node)
override;
9582 void visit_cmp_le(
CmpLe &node)
override;
9587 void visit_cmp_lt(
CmpLt &node)
override;
9592 void visit_cmp_ne(
CmpNe &node)
override;
9597 void visit_cmp_op(
CmpOp &node)
override;
9607 void visit_divide(
Divide &node)
override;
9627 void visit_expression(
Expression &node)
override;
9642 void visit_for_loop(
ForLoop &node)
override;
9647 void visit_foreach_loop(
ForeachLoop &node)
override;
9657 void visit_identifier(
Identifier &node)
override;
9662 void visit_if_else(
IfElse &node)
override;
9667 void visit_if_else_branch(
IfElseBranch &node)
override;
9672 void visit_index(
Index &node)
override;
9677 void visit_index_entry(
IndexEntry &node)
override;
9682 void visit_index_item(
IndexItem &node)
override;
9687 void visit_index_list(
IndexList &node)
override;
9692 void visit_index_range(
IndexRange &node)
override;
9697 void visit_instruction(
Instruction &node)
override;
9702 void visit_int_divide(
IntDivide &node)
override;
9712 void visit_json_literal(
JsonLiteral &node)
override;
9717 void visit_logical_and(
LogicalAnd &node)
override;
9722 void visit_logical_not(
LogicalNot &node)
override;
9727 void visit_logical_op(
LogicalOp &node)
override;
9732 void visit_logical_or(
LogicalOr &node)
override;
9737 void visit_logical_xor(
LogicalXor &node)
override;
9742 void visit_mapping(
Mapping &node)
override;
9752 void visit_modulo(
Modulo &node)
override;
9757 void visit_multiply(
Multiply &node)
override;
9762 void visit_negate(
Negate &node)
override;
9767 void visit_power(
Power &node)
override;
9772 void visit_program(
Program &node)
override;
9782 void visit_root(
Root &node)
override;
9787 void visit_shift_left(
ShiftLeft &node)
override;
9792 void visit_shift_op(
ShiftOp &node)
override;
9807 void visit_statement(
Statement &node)
override;
9822 void visit_structured(
Structured &node)
override;
9827 void visit_subcircuit(
Subcircuit &node)
override;
9832 void visit_subtract(
Subtract &node)
override;
9837 void visit_ternary_cond(
TernaryCond &node)
override;
9842 void visit_unary_op(
UnaryOp &node)
override;
9847 void visit_variables(
Variables &node)
override;
9852 void visit_version(
Version &node)
override;
9857 void visit_while_loop(WhileLoop &node)
override;
9880 ::tree::base::PointerMap *
ids;
9884 bool in_link =
false;
9889 void write_indent();
9896 Dumper(std::ostream &out,
int indent=0, ::tree::base::PointerMap *ids =
nullptr) : out(out), indent(indent), ids(ids) {};
9901 void visit_node(
Node &node)
override;
9905 void visit_add(
Add &node)
override;
9910 void visit_annotated(
Annotated &node)
override;
9920 void visit_arith_op(
ArithOp &node)
override;
9925 void visit_assignment(
Assignment &node)
override;
9930 void visit_binary_op(
BinaryOp &node)
override;
9935 void visit_bitwise_and(
BitwiseAnd &node)
override;
9940 void visit_bitwise_not(
BitwiseNot &node)
override;
9945 void visit_bitwise_op(
BitwiseOp &node)
override;
9950 void visit_bitwise_or(
BitwiseOr &node)
override;
9955 void visit_bitwise_xor(
BitwiseXor &node)
override;
9965 void visit_bundle(
Bundle &node)
override;
9970 void visit_cmp_eq(
CmpEq &node)
override;
9975 void visit_cmp_ge(
CmpGe &node)
override;
9980 void visit_cmp_gt(
CmpGt &node)
override;
9985 void visit_cmp_le(
CmpLe &node)
override;
9990 void visit_cmp_lt(
CmpLt &node)
override;
9995 void visit_cmp_ne(
CmpNe &node)
override;
10000 void visit_cmp_op(
CmpOp &node)
override;
10010 void visit_divide(
Divide &node)
override;
10030 void visit_expression(
Expression &node)
override;
10040 void visit_float_literal(
FloatLiteral &node)
override;
10045 void visit_for_loop(
ForLoop &node)
override;
10050 void visit_foreach_loop(
ForeachLoop &node)
override;
10055 void visit_function_call(
FunctionCall &node)
override;
10060 void visit_identifier(
Identifier &node)
override;
10065 void visit_if_else(
IfElse &node)
override;
10070 void visit_if_else_branch(
IfElseBranch &node)
override;
10075 void visit_index(
Index &node)
override;
10080 void visit_index_entry(
IndexEntry &node)
override;
10085 void visit_index_item(
IndexItem &node)
override;
10090 void visit_index_list(
IndexList &node)
override;
10095 void visit_index_range(
IndexRange &node)
override;
10100 void visit_instruction(
Instruction &node)
override;
10105 void visit_int_divide(
IntDivide &node)
override;
10115 void visit_json_literal(
JsonLiteral &node)
override;
10120 void visit_logical_and(
LogicalAnd &node)
override;
10125 void visit_logical_not(
LogicalNot &node)
override;
10130 void visit_logical_op(
LogicalOp &node)
override;
10135 void visit_logical_or(
LogicalOr &node)
override;
10140 void visit_logical_xor(
LogicalXor &node)
override;
10145 void visit_mapping(
Mapping &node)
override;
10155 void visit_modulo(
Modulo &node)
override;
10160 void visit_multiply(
Multiply &node)
override;
10165 void visit_negate(
Negate &node)
override;
10170 void visit_power(
Power &node)
override;
10175 void visit_program(
Program &node)
override;
10185 void visit_root(
Root &node)
override;
10190 void visit_shift_left(
ShiftLeft &node)
override;
10195 void visit_shift_op(
ShiftOp &node)
override;
10210 void visit_statement(
Statement &node)
override;
10225 void visit_structured(
Structured &node)
override;
10230 void visit_subcircuit(
Subcircuit &node)
override;
10235 void visit_subtract(
Subtract &node)
override;
10240 void visit_ternary_cond(
TernaryCond &node)
override;
10245 void visit_unary_op(
UnaryOp &node)
override;
10250 void visit_variables(
Variables &node)
override;
10255 void visit_version(
Version &node)
override;
10260 void visit_while_loop(WhileLoop &node)
override;
10267 template <
typename T>
10270 this->visit_internal(visitor, &retval);
The file version identifier.
void raw_visit_index_list(IndexList &node, void *retval) override
Internal visitor function for IndexList nodes.
Many< ExpressionList > rows
The list of rows in the matrix.
cqasm::v1::primitives::Version items
The list of version components, ordered major to minor.
virtual T visit_cmp_eq(CmpEq &node)
Visitor function for CmpEq nodes.
void raw_visit_arith_op(ArithOp &node, void *retval) override
Internal visitor function for ArithOp nodes.
One< Expression > lhs
Reference to the variable used for looping.
A floating point literal.
Integer division operator.
Many< Identifier > names
Name of the variables.
One< Expression > if_false
The result if cond is false.
void raw_visit_assignment(Assignment &node, void *retval) override
Internal visitor function for Assignment nodes.
void raw_visit_while_loop(WhileLoop &node, void *retval) override
Internal visitor function for WhileLoop nodes.
Many< IndexEntry > items
The list of indices.
One< Version > version
File version.
Base class for the visitor pattern for the tree.
Placeholder for an expression with a parse error.
void raw_visit_shift_op(ShiftOp &node, void *retval) override
Internal visitor function for ShiftOp nodes.
virtual T visit_index_entry(IndexEntry &node)
Fallback function for IndexEntry nodes.
Internal class for implementing the visitor pattern.
void raw_visit_cmp_gt(CmpGt &node, void *retval) override
Internal visitor function for CmpGt nodes.
void raw_visit_root(Root &node, void *retval) override
Internal visitor function for Root nodes.
Represents a node that carries annotation data.
Placeholder for a program with a parse error.
void raw_visit_logical_op(LogicalOp &node, void *retval) override
Internal visitor function for LogicalOp nodes.
Visitor base class defaulting to DFS pre-order traversal.
::tree::base::Maybe< T > Maybe
void raw_visit_node(Node &node, void *retval) override
Internal visitor function for nodes of any type.
void raw_visit_annotation_data(AnnotationData &node, void *retval) override
Internal visitor function for AnnotationData nodes.
virtual T visit_break_statement(BreakStatement &node)
Visitor function for BreakStatement nodes.
virtual T visit_function_call(FunctionCall &node)
Visitor function for FunctionCall nodes.
void raw_visit_structured(Structured &node, void *retval) override
Internal visitor function for Structured nodes.
One< Identifier > operation
The operation within the interface that this annotation is intended for.
void raw_visit_expression(Expression &node, void *retval) override
Internal visitor function for Expression nodes.
One< Expression > lhs
The left-hand side of the expression.
void raw_visit_erroneous_expression(ErroneousExpression &node, void *retval) override
Internal visitor function for ErroneousExpression nodes.
::tree::base::Link< T > Link
NodeType
Enumeration of all node types.
One< ExpressionList > operands
Any operands attached to the annotation.
virtual T visit_divide(Divide &node)
Visitor function for Divide nodes.
One< Expression > lhs
Name of the variable being assigned.
virtual T visit_cmp_lt(CmpLt &node)
Visitor function for CmpLt nodes.
::tree::base::OptLink< T > OptLink
Maybe< Expression > iterations
An optional integer expression representing the number of iterations for this subcircuit.
One< Identifier > name
The name of the subcircuit.
virtual T visit_program(Program &node)
Visitor function for Program nodes.
virtual T visit_erroneous_program(ErroneousProgram &node)
Visitor function for ErroneousProgram nodes.
::tree::base::PointerMap * ids
When non-null, the print node IDs from here instead of link contents.
A list of parallel instructions.
void raw_visit_shift_right_arith(ShiftRightArith &node, void *retval) override
Internal visitor function for ShiftRightArith nodes.
virtual T visit_arith_op(ArithOp &node)
Fallback function for ArithOp nodes.
Placeholder for a statement with a parse error.
virtual T visit_continue_statement(ContinueStatement &node)
Visitor function for ContinueStatement nodes.
Represents a JSON literal.
virtual T visit_instruction(Instruction &node)
Visitor function for Instruction nodes.
void raw_visit_annotated(Annotated &node, void *retval) override
Internal visitor function for Annotated nodes.
Many< IfElseBranch > branches
The if-else branches.
error_model::ErrorModelRef deserialize(const ::tree::cbor::MapReader &map)
Deserializes the given primitive object from CBOR.
void raw_visit_bundle(Bundle &node, void *retval) override
Internal visitor function for Bundle nodes.
Toplevel namespace with entry points for the new API.
void raw_visit_if_else_branch(IfElseBranch &node, void *retval) override
Internal visitor function for IfElseBranch nodes.
void raw_visit_cmp_le(CmpLe &node, void *retval) override
Internal visitor function for CmpLe nodes.
virtual T visit_power(Power &node)
Visitor function for Power nodes.
virtual T visit_unary_op(UnaryOp &node)
Fallback function for UnaryOp nodes.
virtual T visit_matrix_literal(MatrixLiteral &node)
Visitor function for MatrixLiteral nodes.
Maybe< Assignment > initialize
The optional initializing assignment, run before the loop starts.
void raw_visit_string_literal(StringLiteral &node, void *retval) override
Internal visitor function for StringLiteral nodes.
virtual T visit_shift_right_logic(ShiftRightLogic &node)
Visitor function for ShiftRightLogic nodes.
One< Expression > to
The last value.
virtual T visit_statement_list(StatementList &node)
Visitor function for StatementList nodes.
void raw_visit_subtract(Subtract &node, void *retval) override
Internal visitor function for Subtract nodes.
virtual T visit_structured(Structured &node)
Fallback function for Structured nodes.
void raw_visit_version(Version &node, void *retval) override
Internal visitor function for Version nodes.
virtual T visit_logical_not(LogicalNot &node)
Visitor function for LogicalNot nodes.
void raw_visit_bitwise_not(BitwiseNot &node, void *retval) override
Internal visitor function for BitwiseNot nodes.
void raw_visit_program(Program &node, void *retval) override
Internal visitor function for Program nodes.
Logical/unsigned shift-right operator (shifts in zero).
virtual T visit_subtract(Subtract &node)
Visitor function for Subtract nodes.
A mapping (alias) for an expression.
void raw_visit_continue_statement(ContinueStatement &node, void *retval) override
Internal visitor function for ContinueStatement nodes.
One< Expression > condition
The condition.
void raw_visit_index_entry(IndexEntry &node, void *retval) override
Internal visitor function for IndexEntry nodes.
void raw_visit_subcircuit(Subcircuit &node, void *retval) override
Internal visitor function for Subcircuit nodes.
A single condition + block for use in an if-else chain.
void raw_visit_shift_right_logic(ShiftRightLogic &node, void *retval) override
Internal visitor function for ShiftRightLogic nodes.
virtual T visit_while_loop(WhileLoop &node)
Visitor function for WhileLoop nodes.
virtual T visit_negate(Negate &node)
Visitor function for Negate nodes.
void raw_visit_modulo(Modulo &node, void *retval) override
Internal visitor function for Modulo nodes.
virtual T visit_bitwise_op(BitwiseOp &node)
Fallback function for BitwiseOp nodes.
double Real
Real number primitive used within the AST and semantic trees.
virtual T visit_assignment(Assignment &node)
Visitor function for Assignment nodes.
An assignment statement within a loop definition.
void raw_visit_binary_op(BinaryOp &node, void *retval) override
Internal visitor function for BinaryOp nodes.
One< Expression > first
An integer expression representing the first index.
One< StatementList > body
The loop body.
One< Expression > expr
The expression being indexed.
cqasm::tree::Any< T > Any
void raw_visit_logical_or(LogicalOr &node, void *retval) override
Internal visitor function for LogicalOr nodes.
virtual T visit_if_else_branch(IfElseBranch &node)
Visitor function for IfElseBranch nodes.
virtual T visit_erroneous_expression(ErroneousExpression &node)
Visitor function for ErroneousExpression nodes.
std::int64_t Int
Integer primitive used within the AST and semantic trees.
cqasm::tree::Many< T > Many
One< Identifier > name
Name identifying the instruction.
void raw_visit_power(Power &node, void *retval) override
Internal visitor function for Power nodes.
One< Expression > last
An integer expression representing the last index.
cqasm::v1::primitives::Str value
The string literal.
Main class for all nodes.
A list of one or more indices.
virtual T visit_index_range(IndexRange &node)
Visitor function for IndexRange nodes.
void raw_visit_unary_op(UnaryOp &node, void *retval) override
Internal visitor function for UnaryOp nodes.
Version number primitive used within the AST and semantic trees.
void raw_visit_erroneous_statement(ErroneousStatement &node, void *retval) override
Internal visitor function for ErroneousStatement nodes.
virtual T visit_logical_and(LogicalAnd &node)
Visitor function for LogicalAnd nodes.
virtual T visit_bitwise_or(BitwiseOr &node)
Visitor function for BitwiseOr nodes.
Maybe< StatementList > otherwise
The final else block, if any.
virtual T visit_logical_op(LogicalOp &node)
Fallback function for LogicalOp nodes.
void serialize(const error_model::ErrorModelRef &obj, ::tree::cbor::MapWriter &map)
std::ostream & operator<<(std::ostream &os, const Node &object)
Stream << overload for tree nodes (writes debug dump).
virtual T visit_cmp_ne(CmpNe &node)
Visitor function for CmpNe nodes.
One< StatementList > statements
The statement list.
One< Expression > frm
The first value.
virtual T visit_subcircuit(Subcircuit &node)
Visitor function for Subcircuit nodes.
virtual T visit_index_list(IndexList &node)
Visitor function for IndexList nodes.
virtual T visit_shift_left(ShiftLeft &node)
Visitor function for ShiftLeft nodes.
One< Expression > condition
The condition for starting another iteration.
virtual T visit_string_literal(StringLiteral &node)
Visitor function for StringLiteral nodes.
One or more variable declaration for some type.
virtual T visit_bitwise_xor(BitwiseXor &node)
Visitor function for BitwiseXor nodes.
Represents a matrix literal.
virtual T visit_index_item(IndexItem &node)
Visitor function for IndexItem nodes.
Visitor class that debug-dumps a tree to a stream.
void raw_visit_integer_literal(IntegerLiteral &node, void *retval) override
Internal visitor function for IntegerLiteral nodes.
void raw_visit_statement(Statement &node, void *retval) override
Internal visitor function for Statement nodes.
A single index in an index list.
cqasm::v1::primitives::Int value
The integer.
void raw_visit_bitwise_op(BitwiseOp &node, void *retval) override
Internal visitor function for BitwiseOp nodes.
One< IndexList > indices
The list of indices.
cqasm::tree::One< T > One
Any version 1.2+ structured control-flow statement.
virtual T visit_multiply(Multiply &node)
Visitor function for Multiply nodes.
virtual T visit_root(Root &node)
Fallback function for Root nodes.
virtual T visit_integer_literal(IntegerLiteral &node)
Visitor function for IntegerLiteral nodes.
void raw_visit_mapping(Mapping &node, void *retval) override
Internal visitor function for Mapping nodes.
virtual T visit_mapping(Mapping &node)
Visitor function for Mapping nodes.
virtual T visit_json_literal(JsonLiteral &node)
Visitor function for JsonLiteral nodes.
cqasm::v1::primitives::Str name
The identifier.
Represents an annotation.
virtual T visit_version(Version &node)
Visitor function for Version nodes.
void raw_visit_shift_left(ShiftLeft &node, void *retval) override
Internal visitor function for ShiftLeft nodes.
One< ExpressionList > operands
Operands for the instruction.
virtual T visit_binary_op(BinaryOp &node)
Fallback function for BinaryOp nodes.
virtual T visit_if_else(IfElse &node)
Visitor function for IfElse nodes.
virtual T visit_add(Add &node)
Visitor function for Add nodes.
cqasm::tree::Link< T > Link
Maybe< Expression > num_qubits
Integer expression indicating the number of qubits.
Arithmetic/signed shift-right operator (shifts in sign).
void raw_visit_statement_list(StatementList &node, void *retval) override
Internal visitor function for StatementList nodes.
One< StatementList > body
The body.
void raw_visit_ternary_cond(TernaryCond &node, void *retval) override
Internal visitor function for TernaryCond nodes.
Defines primitive types for use in trees generated by tree-gen.
virtual T visit_repeat_until_loop(RepeatUntilLoop &node)
Visitor function for RepeatUntilLoop nodes.
virtual T visit_logical_xor(LogicalXor &node)
Visitor function for LogicalXor nodes.
virtual T visit_statement(Statement &node)
Fallback function for Statement nodes.
One< StatementList > body
The loop body.
void raw_visit_repeat_until_loop(RepeatUntilLoop &node, void *retval) override
Internal visitor function for RepeatUntilLoop nodes.
One< Identifier > interface
The interface this annotation is intended for.
Namespace for the "new" cQASM 1.x API.
virtual T visit_int_divide(IntDivide &node)
Visitor function for IntDivide nodes.
virtual T visit_ternary_cond(TernaryCond &node)
Visitor function for TernaryCond nodes.
virtual T visit_cmp_op(CmpOp &node)
Fallback function for CmpOp nodes.
void raw_visit_cmp_eq(CmpEq &node, void *retval) override
Internal visitor function for CmpEq nodes.
An inclusive range of indices in an index list.
An entry in an index list.
bool operator!=(const Node &rhs) const
Pointer-based inequality operator.
One< Identifier > name
The name of the function.
Negation operator (two's complement).
virtual T visit_annotation_data(AnnotationData &node)
Visitor function for AnnotationData nodes.
Wrapper for pulling parts of tree-gen's support library into libqasm.
One< ExpressionList > arguments
The function arguments.
cqasm::tree::Maybe< T > Maybe
void raw_visit_logical_and(LogicalAnd &node, void *retval) override
Internal visitor function for LogicalAnd nodes.
virtual T visit_expression(Expression &node)
Fallback function for Expression nodes.
void raw_visit_bitwise_or(BitwiseOr &node, void *retval) override
Internal visitor function for BitwiseOr nodes.
void raw_visit_index(Index &node, void *retval) override
Internal visitor function for Index nodes.
void raw_visit_add(Add &node, void *retval) override
Internal visitor function for Add nodes.
void raw_visit_foreach_loop(ForeachLoop &node, void *retval) override
Internal visitor function for ForeachLoop nodes.
One< Expression > rhs
The right-hand side of the expression.
Greater-than-or-equal operator.
One< Identifier > alias
The identifier used to refer to the expression.
One< Expression > cond
The boolean condition for selection.
void raw_visit_multiply(Multiply &node, void *retval) override
Internal visitor function for Multiply nodes.
::tree::base::Any< T > Any
Dumper(std::ostream &out, int indent=0, ::tree::base::PointerMap *ids=nullptr)
Construct a dumping visitor.
virtual T visit_shift_right_arith(ShiftRightArith &node)
Visitor function for ShiftRightArith nodes.
std::string Str
String primitive used within the AST and semantic trees.
cqasm::v1::primitives::Str value
The JSON literal.
virtual T visit_cmp_le(CmpLe &node)
Visitor function for CmpLe nodes.
void raw_visit_erroneous_program(ErroneousProgram &node, void *retval) override
Internal visitor function for ErroneousProgram nodes.
void raw_visit_logical_xor(LogicalXor &node, void *retval) override
Internal visitor function for LogicalXor nodes.
void raw_visit_negate(Negate &node, void *retval) override
Internal visitor function for Negate nodes.
::tree::base::Many< T > Many
virtual T visit_erroneous_statement(ErroneousStatement &node)
Visitor function for ErroneousStatement nodes.
Many< Instruction > items
The list of parallel instructions.
virtual T visit_bitwise_not(BitwiseNot &node)
Visitor function for BitwiseNot nodes.
void raw_visit_divide(Divide &node, void *retval) override
Internal visitor function for Divide nodes.
virtual T visit_float_literal(FloatLiteral &node)
Visitor function for FloatLiteral nodes.
cqasm::v1::primitives::Real value
The floating point number.
void raw_visit_index_item(IndexItem &node, void *retval) override
Internal visitor function for IndexItem nodes.
std::ostream & out
Output stream to dump to.
void raw_visit_logical_not(LogicalNot &node, void *retval) override
Internal visitor function for LogicalNot nodes.
One< Expression > expr
The expression being operated on.
void raw_visit_bitwise_xor(BitwiseXor &node, void *retval) override
Internal visitor function for BitwiseXor nodes.
void raw_visit_matrix_literal(MatrixLiteral &node, void *retval) override
Internal visitor function for MatrixLiteral nodes.
void raw_visit_json_literal(JsonLiteral &node, void *retval) override
Internal visitor function for JsonLiteral nodes.
virtual T visit_cmp_gt(CmpGt &node)
Visitor function for CmpGt nodes.
One< Expression > rhs
Value being assigned to the variable.
virtual T visit_modulo(Modulo &node)
Visitor function for Modulo nodes.
virtual T visit_annotated(Annotated &node)
Fallback function for Annotated nodes.
Represents a string literal.
void raw_visit_variables(Variables &node, void *retval) override
Internal visitor function for Variables nodes.
virtual T visit_logical_or(LogicalOr &node)
Visitor function for LogicalOr nodes.
Any< Statement > items
The list of statements.
One< Identifier > typ
Name of the type.
Less-than-or-equal operator.
T visit(Visitor< T > &visitor)
Visit this object.
void raw_visit_cmp_lt(CmpLt &node, void *retval) override
Internal visitor function for CmpLt nodes.
virtual T visit_bundle(Bundle &node)
Visitor function for Bundle nodes.
Any< Expression > items
The list of expressions.
void raw_visit_float_literal(FloatLiteral &node, void *retval) override
Internal visitor function for FloatLiteral nodes.
virtual T visit_shift_op(ShiftOp &node)
Fallback function for ShiftOp nodes.
One< StatementList > body
The loop body.
One< Expression > expr
The aliased expression.
Maybe< Assignment > update
The updating assignment, done at the end of the loop body and upon continue.
void raw_visit_break_statement(BreakStatement &node, void *retval) override
Internal visitor function for BreakStatement nodes.
One< Expression > condition
The condition for starting another iteration.
void raw_visit_index_range(IndexRange &node, void *retval) override
Internal visitor function for IndexRange nodes.
virtual T visit_bitwise_and(BitwiseAnd &node)
Visitor function for BitwiseAnd nodes.
Maybe< Expression > condition
Optional conditional expression.
virtual T visit_index(Index &node)
Visitor function for Index nodes.
cqasm::tree::OptLink< T > OptLink
void raw_visit_bitwise_and(BitwiseAnd &node, void *retval) override
Internal visitor function for BitwiseAnd nodes.
void raw_visit_cmp_op(CmpOp &node, void *retval) override
Internal visitor function for CmpOp nodes.
One< Expression > index
An integer expression representing the index.
Any root node for the AST.
void raw_visit_identifier(Identifier &node, void *retval) override
Internal visitor function for Identifier nodes.
virtual T visit_for_loop(ForLoop &node)
Visitor function for ForLoop nodes.
void raw_visit_function_call(FunctionCall &node, void *retval) override
Internal visitor function for FunctionCall nodes.
::tree::base::One< T > One
void raw_visit_int_divide(IntDivide &node, void *retval) override
Internal visitor function for IntDivide nodes.
void raw_visit_cmp_ge(CmpGe &node, void *retval) override
Internal visitor function for CmpGe nodes.
One< StatementList > body
The loop body.
One< Expression > if_true
The result if cond is true.
void raw_visit_if_else(IfElse &node, void *retval) override
Internal visitor function for IfElse nodes.
void raw_visit_instruction(Instruction &node, void *retval) override
Internal visitor function for Instruction nodes.
void raw_visit_expression_list(ExpressionList &node, void *retval) override
Internal visitor function for ExpressionList nodes.
virtual T visit_expression_list(ExpressionList &node)
Visitor function for ExpressionList nodes.
void raw_visit_for_loop(ForLoop &node, void *retval) override
Internal visitor function for ForLoop nodes.
virtual T visit_foreach_loop(ForeachLoop &node)
Visitor function for ForeachLoop nodes.
Represents a comma-separated list of expressions.
virtual T visit_variables(Variables &node)
Visitor function for Variables nodes.
virtual T visit_cmp_ge(CmpGe &node)
Visitor function for CmpGe nodes.
One< Expression > condition
The condition for stopping iteration.
Bitwise NOT (one's complement).
Ternary conditional operator.
virtual T visit_identifier(Identifier &node)
Visitor function for Identifier nodes.
Any< AnnotationData > annotations
Zero or more annotations attached to this object.
void raw_visit_cmp_ne(CmpNe &node, void *retval) override
Internal visitor function for CmpNe nodes.