MCPcopy Create free account
hub / github.com/cel-expr/cel-cpp / CopyNode

Function CopyNode

common/expr.cc:35–134  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33};
34
35void 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 }

Callers 1

CloneImplFunction · 0.85

Calls 15

set_fieldMethod · 0.80
set_test_onlyMethod · 0.80
test_onlyMethod · 0.80
has_operandMethod · 0.80
set_functionMethod · 0.80
has_targetMethod · 0.80
argsMethod · 0.80
mutable_valueMethod · 0.80
keyMethod · 0.80
set_iter_varMethod · 0.80
set_iter_var2Method · 0.80
set_accu_varMethod · 0.80

Tested by

no test coverage detected