| 1194 | } |
| 1195 | |
| 1196 | void MaybeMakeBindRecursive(const cel::Expr* expr, |
| 1197 | const cel::ComprehensionExpr* comprehension, |
| 1198 | size_t accu_slot) { |
| 1199 | if (!PlanRecursiveProgram()) { |
| 1200 | return; |
| 1201 | } |
| 1202 | |
| 1203 | auto* result_plan = |
| 1204 | program_builder_.GetSubexpression(&comprehension->result()); |
| 1205 | |
| 1206 | if (result_plan == nullptr || !result_plan->IsRecursive()) { |
| 1207 | SetProgressStatusError(FailedRecursivePlanning()); |
| 1208 | return; |
| 1209 | } |
| 1210 | |
| 1211 | int result_depth = result_plan->recursive_program().depth; |
| 1212 | |
| 1213 | auto program = result_plan->ExtractRecursiveProgram(); |
| 1214 | SetRecursiveStep( |
| 1215 | CreateDirectBindStep(accu_slot, std::move(program.step), expr->id()), |
| 1216 | result_depth + 1); |
| 1217 | } |
| 1218 | |
| 1219 | void MaybeMakeComprehensionRecursive( |
| 1220 | const cel::Expr* expr, const cel::ComprehensionExpr* comprehension, |
no test coverage detected