| 56 | absl::variant<ExprRecord, ArgRecord, ComprehensionRecord>; |
| 57 | |
| 58 | struct StackRecord { |
| 59 | public: |
| 60 | static constexpr int kTarget = -2; |
| 61 | |
| 62 | explicit StackRecord(const Expr* e) { |
| 63 | ExprRecord record; |
| 64 | record.expr = e; |
| 65 | record_variant = record; |
| 66 | } |
| 67 | |
| 68 | StackRecord(const Expr* e, const ComprehensionExpr* comprehension, |
| 69 | const Expr* comprehension_expr, |
| 70 | ComprehensionArg comprehension_arg, |
| 71 | bool use_comprehension_callbacks) { |
| 72 | if (use_comprehension_callbacks) { |
| 73 | ComprehensionRecord record; |
| 74 | record.expr = e; |
| 75 | record.comprehension = comprehension; |
| 76 | record.comprehension_expr = comprehension_expr; |
| 77 | record.comprehension_arg = comprehension_arg; |
| 78 | record.use_comprehension_callbacks = use_comprehension_callbacks; |
| 79 | record_variant = record; |
| 80 | return; |
| 81 | } |
| 82 | ArgRecord record; |
| 83 | record.expr = e; |
| 84 | record.calling_expr = comprehension_expr; |
| 85 | record.call_arg = comprehension_arg; |
| 86 | record_variant = record; |
| 87 | } |
| 88 | |
| 89 | StackRecord(const Expr* e, const Expr* call, int argnum) { |
| 90 | ArgRecord record; |
| 91 | record.expr = e; |
| 92 | record.calling_expr = call; |
| 93 | record.call_arg = argnum; |
| 94 | record_variant = record; |
| 95 | } |
| 96 | StackRecordKind record_variant; |
| 97 | bool visited = false; |
| 98 | }; |
| 99 | |
| 100 | struct PreVisitor { |
| 101 | void operator()(const ExprRecord& record) { |
no outgoing calls
no test coverage detected