| 33 | }; |
| 34 | |
| 35 | void CopyNode(CopyStackRecord element, std::vector<CopyStackRecord>& stack) { |
| 36 | const Expr* src = element.src; |
| 37 | Expr* dst = element.dst; |
| 38 | dst->set_id(src->id()); |
| 39 | absl::visit( |
| 40 | absl::Overload( |
| 41 | [=](const UnspecifiedExpr&) { |
| 42 | dst->mutable_kind().emplace<UnspecifiedExpr>(); |
| 43 | }, |
| 44 | [=](const IdentExpr& i) { |
| 45 | dst->mutable_ident_expr().set_name(i.name()); |
| 46 | }, |
| 47 | [=](const Constant& c) { dst->mutable_const_expr() = c; }, |
| 48 | [&](const SelectExpr& s) { |
| 49 | dst->mutable_select_expr().set_field(s.field()); |
| 50 | dst->mutable_select_expr().set_test_only(s.test_only()); |
| 51 | |
| 52 | if (s.has_operand()) { |
| 53 | stack.push_back({&s.operand(), |
| 54 | &dst->mutable_select_expr().mutable_operand()}); |
| 55 | } |
| 56 | }, |
| 57 | [&](const CallExpr& c) { |
| 58 | dst->mutable_call_expr().set_function(c.function()); |
| 59 | if (c.has_target()) { |
| 60 | stack.push_back( |
| 61 | {&c.target(), &dst->mutable_call_expr().mutable_target()}); |
| 62 | } |
| 63 | dst->mutable_call_expr().mutable_args().resize(c.args().size()); |
| 64 | for (int i = 0; i < dst->mutable_call_expr().mutable_args().size(); |
| 65 | ++i) { |
| 66 | stack.push_back( |
| 67 | {&c.args()[i], &dst->mutable_call_expr().mutable_args()[i]}); |
| 68 | } |
| 69 | }, |
| 70 | [&](const ListExpr& c) { |
| 71 | auto& dst_list = dst->mutable_list_expr(); |
| 72 | dst_list.mutable_elements().resize(c.elements().size()); |
| 73 | for (int i = 0; i < src->list_expr().elements().size(); ++i) { |
| 74 | dst_list.mutable_elements()[i].set_optional( |
| 75 | c.elements()[i].optional()); |
| 76 | stack.push_back({&c.elements()[i].expr(), |
| 77 | &dst_list.mutable_elements()[i].mutable_expr()}); |
| 78 | } |
| 79 | }, |
| 80 | [&](const StructExpr& s) { |
| 81 | auto& dst_struct = dst->mutable_struct_expr(); |
| 82 | dst_struct.mutable_fields().resize(s.fields().size()); |
| 83 | dst_struct.set_name(s.name()); |
| 84 | for (int i = 0; i < s.fields().size(); ++i) { |
| 85 | dst_struct.mutable_fields()[i].set_optional( |
| 86 | s.fields()[i].optional()); |
| 87 | dst_struct.mutable_fields()[i].set_name(s.fields()[i].name()); |
| 88 | dst_struct.mutable_fields()[i].set_id(s.fields()[i].id()); |
| 89 | stack.push_back( |
| 90 | {&s.fields()[i].value(), |
| 91 | &dst_struct.mutable_fields()[i].mutable_value()}); |
| 92 | } |
no test coverage detected