| 452 | } |
| 453 | |
| 454 | absl::Status ComprehensionExprFromProto( |
| 455 | const ExprProto& proto, |
| 456 | const ExprProto::Comprehension& comprehension_proto, Expr& expr) { |
| 457 | expr.Clear(); |
| 458 | expr.set_id(proto.id()); |
| 459 | auto& comprehension_expr = expr.mutable_comprehension_expr(); |
| 460 | comprehension_expr.set_iter_var(comprehension_proto.iter_var()); |
| 461 | comprehension_expr.set_iter_var2(comprehension_proto.iter_var2()); |
| 462 | comprehension_expr.set_accu_var(comprehension_proto.accu_var()); |
| 463 | if (comprehension_proto.has_iter_range()) { |
| 464 | Push(comprehension_proto.iter_range(), |
| 465 | comprehension_expr.mutable_iter_range()); |
| 466 | } |
| 467 | if (comprehension_proto.has_accu_init()) { |
| 468 | Push(comprehension_proto.accu_init(), |
| 469 | comprehension_expr.mutable_accu_init()); |
| 470 | } |
| 471 | if (comprehension_proto.has_loop_condition()) { |
| 472 | Push(comprehension_proto.loop_condition(), |
| 473 | comprehension_expr.mutable_loop_condition()); |
| 474 | } |
| 475 | if (comprehension_proto.has_loop_step()) { |
| 476 | Push(comprehension_proto.loop_step(), |
| 477 | comprehension_expr.mutable_loop_step()); |
| 478 | } |
| 479 | if (comprehension_proto.has_result()) { |
| 480 | Push(comprehension_proto.result(), comprehension_expr.mutable_result()); |
| 481 | } |
| 482 | return absl::OkStatus(); |
| 483 | } |
| 484 | |
| 485 | void Push(const ExprProto& proto, Expr& expr) { |
| 486 | frames_.push(Frame{&proto, &expr}); |
nothing calls this directly
no test coverage detected