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

Function SelectInstructionsFromCall

extensions/select_optimization.cc:363–394  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

361}
362
363absl::StatusOr<std::vector<SelectQualifier>> SelectInstructionsFromCall(
364 const CallExpr& call) {
365 if (call.args().size() < 2 || !call.args()[1].has_list_expr()) {
366 return absl::InvalidArgumentError("Invalid cel.attribute call");
367 }
368 std::vector<SelectQualifier> instructions;
369 const auto& ast_path = call.args()[1].list_expr().elements();
370 instructions.reserve(ast_path.size());
371
372 for (const ListExprElement& element : ast_path) {
373 // Optimized field select.
374 if (element.has_expr()) {
375 const auto& element_expr = element.expr();
376 if (element_expr.has_list_expr()) {
377 CEL_ASSIGN_OR_RETURN(instructions.emplace_back(),
378 SelectQualifierFromList(element_expr.list_expr()));
379 } else if (element_expr.has_const_expr()) {
380 CEL_ASSIGN_OR_RETURN(
381 instructions.emplace_back(),
382 SelectQualifierFromConstant(element_expr.const_expr()));
383 } else {
384 return absl::InvalidArgumentError("Invalid cel.attribute call");
385 }
386 } else {
387 return absl::InvalidArgumentError("Invalid cel.attribute call");
388 }
389 }
390
391 // TODO(uncreated-issue/54): support for optionals.
392
393 return instructions;
394}
395
396class RewriterImpl : public AstRewriterBase {
397 public:

Callers 1

OnPostVisitMethod · 0.85

Calls 9

SelectQualifierFromListFunction · 0.85
argsMethod · 0.80
has_list_exprMethod · 0.80
has_exprMethod · 0.80
has_const_exprMethod · 0.80
CEL_ASSIGN_OR_RETURNFunction · 0.50
sizeMethod · 0.45
exprMethod · 0.45

Tested by

no test coverage detected