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

Function GetChildKind

tools/navigable_ast.cc:76–124  ·  view source on GitHub ↗

Get the traversal relationship from parent to the given node. Note: these depend on the ast_visitor utility's traversal ordering.

Source from the content-addressed store, hash-verified

74// Get the traversal relationship from parent to the given node.
75// Note: these depend on the ast_visitor utility's traversal ordering.
76ChildKind GetChildKind(const NavigableAstNodeData& parent_node,
77 size_t child_index) {
78 constexpr size_t kComprehensionRangeArgIndex =
79 google::api::expr::runtime::ITER_RANGE;
80 constexpr size_t kComprehensionInitArgIndex =
81 google::api::expr::runtime::ACCU_INIT;
82 constexpr size_t kComprehensionConditionArgIndex =
83 google::api::expr::runtime::LOOP_CONDITION;
84 constexpr size_t kComprehensionLoopStepArgIndex =
85 google::api::expr::runtime::LOOP_STEP;
86 constexpr size_t kComprehensionResultArgIndex =
87 google::api::expr::runtime::RESULT;
88
89 switch (parent_node.node_kind) {
90 case NodeKind::kStruct:
91 return ChildKind::kStructValue;
92 case NodeKind::kMap:
93 if (child_index % 2 == 0) {
94 return ChildKind::kMapKey;
95 }
96 return ChildKind::kMapValue;
97 case NodeKind::kList:
98 return ChildKind::kListElem;
99 case NodeKind::kSelect:
100 return ChildKind::kSelectOperand;
101 case NodeKind::kCall:
102 if (child_index == 0 && parent_node.expr->call_expr().has_target()) {
103 return ChildKind::kCallReceiver;
104 }
105 return ChildKind::kCallArg;
106 case NodeKind::kComprehension:
107 switch (child_index) {
108 case kComprehensionRangeArgIndex:
109 return ChildKind::kComprehensionRange;
110 case kComprehensionInitArgIndex:
111 return ChildKind::kComprehensionInit;
112 case kComprehensionConditionArgIndex:
113 return ChildKind::kComprehensionCondition;
114 case kComprehensionLoopStepArgIndex:
115 return ChildKind::kComprehensionLoopStep;
116 case kComprehensionResultArgIndex:
117 return ChildKind::kComprensionResult;
118 default:
119 return ChildKind::kUnspecified;
120 }
121 default:
122 return ChildKind::kUnspecified;
123 }
124}
125
126class NavigableExprBuilderVisitor
127 : public google::api::expr::runtime::AstVisitorBase {

Callers 1

PreVisitExprMethod · 0.70

Calls 1

has_targetMethod · 0.80

Tested by

no test coverage detected