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

Method BuildMacroCallArg

parser/parser.cc:255–345  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

253 }
254
255 Expr BuildMacroCallArg(const Expr& expr) {
256 if (auto it = macro_calls_.find(expr.id()); it != macro_calls_.end()) {
257 return NewUnspecified(expr.id());
258 }
259 return absl::visit(
260 absl::Overload(
261 [this, &expr](const UnspecifiedExpr&) -> Expr {
262 return NewUnspecified(expr.id());
263 },
264 [this, &expr](const Constant& const_expr) -> Expr {
265 return NewConst(expr.id(), const_expr);
266 },
267 [this, &expr](const IdentExpr& ident_expr) -> Expr {
268 return NewIdent(expr.id(), ident_expr.name());
269 },
270 [this, &expr](const SelectExpr& select_expr) -> Expr {
271 return select_expr.test_only()
272 ? NewPresenceTest(
273 expr.id(),
274 BuildMacroCallArg(select_expr.operand()),
275 select_expr.field())
276 : NewSelect(expr.id(),
277 BuildMacroCallArg(select_expr.operand()),
278 select_expr.field());
279 },
280 [this, &expr](const CallExpr& call_expr) -> Expr {
281 std::vector<Expr> macro_arguments;
282 macro_arguments.reserve(call_expr.args().size());
283 for (const auto& argument : call_expr.args()) {
284 macro_arguments.push_back(BuildMacroCallArg(argument));
285 }
286 absl::optional<Expr> macro_target;
287 if (call_expr.has_target()) {
288 macro_target = BuildMacroCallArg(call_expr.target());
289 }
290 return macro_target.has_value()
291 ? NewMemberCall(expr.id(), call_expr.function(),
292 std::move(*macro_target),
293 std::move(macro_arguments))
294 : NewCall(expr.id(), call_expr.function(),
295 std::move(macro_arguments));
296 },
297 [this, &expr](const ListExpr& list_expr) -> Expr {
298 std::vector<ListExprElement> macro_elements;
299 macro_elements.reserve(list_expr.elements().size());
300 for (const auto& element : list_expr.elements()) {
301 auto& cloned_element = macro_elements.emplace_back();
302 if (element.has_expr()) {
303 cloned_element.set_expr(BuildMacroCallArg(element.expr()));
304 }
305 cloned_element.set_optional(element.optional());
306 }
307 return NewList(expr.id(), std::move(macro_elements));
308 },
309 [this, &expr](const StructExpr& struct_expr) -> Expr {
310 std::vector<StructExprField> macro_fields;
311 macro_fields.reserve(struct_expr.fields().size());
312 for (const auto& field : struct_expr.fields()) {

Callers 2

GlobalCallOrMacroImplMethod · 0.80

Calls 15

test_onlyMethod · 0.80
argsMethod · 0.80
has_targetMethod · 0.80
has_exprMethod · 0.80
set_exprMethod · 0.80
set_keyMethod · 0.80
keyMethod · 0.80
idMethod · 0.45
endMethod · 0.45
nameMethod · 0.45
fieldMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected