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

Method Evaluate

eval/eval/comprehension_step.cc:447–484  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

445} // namespace
446
447absl::Status ComprehensionInitStep::Evaluate(ExecutionFrame* frame) const {
448 if (!frame->value_stack().HasEnough(1)) {
449 return absl::Status(absl::StatusCode::kInternal, "Value stack underflow");
450 }
451
452 const Value& top = frame->value_stack().Peek();
453 if (top.IsError() || top.IsUnknown()) {
454 return frame->JumpTo(error_jump_offset_);
455 }
456
457 if (frame->enable_unknowns() && top.IsMap()) {
458 const AttributeTrail& top_attr = frame->value_stack().PeekAttribute();
459 if (frame->attribute_utility().CheckForUnknownPartial(top_attr)) {
460 frame->value_stack().PopAndPush(
461 frame->attribute_utility().CreateUnknownSet(top_attr.attribute()));
462 return frame->JumpTo(error_jump_offset_);
463 }
464 }
465
466 switch (top.kind()) {
467 case ValueKind::kList: {
468 CEL_ASSIGN_OR_RETURN(auto iterator, top.GetList().NewIterator());
469 frame->iterator_stack().Push(std::move(iterator));
470 } break;
471 case ValueKind::kMap: {
472 CEL_ASSIGN_OR_RETURN(auto iterator, top.GetMap().NewIterator());
473 frame->iterator_stack().Push(std::move(iterator));
474 } break;
475 default:
476 // Replace <iter_range> with an error and jump past
477 // ComprehensionFinishStep.
478 frame->value_stack().PopAndPush(
479 cel::ErrorValue(CreateNoMatchingOverloadError("<iter_range>")));
480 return frame->JumpTo(error_jump_offset_);
481 }
482
483 return absl::OkStatus();
484}
485
486absl::Status ComprehensionNextStep::Evaluate1(ExecutionFrame* frame) const {
487 if (!frame->value_stack().HasEnough(2)) {

Callers 4

Evaluate1Method · 0.45
Evaluate1UnknownMethod · 0.45
Evaluate1KnownMethod · 0.45
Evaluate2Method · 0.45

Calls 15

ErrorValueFunction · 0.85
HasEnoughMethod · 0.80
JumpToMethod · 0.80
PopAndPushMethod · 0.80
attributeMethod · 0.80
PeekMethod · 0.45
IsErrorMethod · 0.45
IsUnknownMethod · 0.45
enable_unknownsMethod · 0.45
IsMapMethod · 0.45

Tested by

no test coverage detected