Flattens the expression table into the end of the mainline expression vector and returns an index to the individual sub expressions.
| 2492 | // Flattens the expression table into the end of the mainline expression vector |
| 2493 | // and returns an index to the individual sub expressions. |
| 2494 | std::vector<ExecutionPathView> FlattenExpressionTable( |
| 2495 | ProgramBuilder& program_builder, ExecutionPath& main) { |
| 2496 | std::vector<std::pair<size_t, size_t>> ranges; |
| 2497 | main = program_builder.FlattenMain(); |
| 2498 | ranges.push_back(std::make_pair(0, main.size())); |
| 2499 | |
| 2500 | std::vector<ExecutionPath> subexpressions = |
| 2501 | program_builder.FlattenSubexpressions(); |
| 2502 | for (auto& subexpression : subexpressions) { |
| 2503 | ranges.push_back(std::make_pair(main.size(), subexpression.size())); |
| 2504 | absl::c_move(subexpression, std::back_inserter(main)); |
| 2505 | } |
| 2506 | |
| 2507 | std::vector<ExecutionPathView> subexpression_indexes; |
| 2508 | subexpression_indexes.reserve(ranges.size()); |
| 2509 | for (const auto& range : ranges) { |
| 2510 | subexpression_indexes.push_back( |
| 2511 | absl::MakeSpan(main).subspan(range.first, range.second)); |
| 2512 | } |
| 2513 | return subexpression_indexes; |
| 2514 | } |
| 2515 | |
| 2516 | absl::Status CheckAstExtensions( |
| 2517 | const std::vector<cel::ExtensionSpec>& extensions) { |
no test coverage detected