@@ -317,10 +317,32 @@ class ExprFactory {
317317 AccuVar accu_var, AccuInit accu_init,
318318 LoopCondition loop_condition, LoopStep loop_step,
319319 Result result) {
320+ return NewComprehension (id, std::move (iter_var), " " , std::move (iter_range),
321+ std::move (accu_var), std::move (accu_init),
322+ std::move (loop_condition), std::move (loop_step),
323+ std::move (result));
324+ }
325+
326+ template <typename IterVar, typename IterVar2, typename IterRange,
327+ typename AccuVar, typename AccuInit, typename LoopCondition,
328+ typename LoopStep, typename Result,
329+ typename = std::enable_if_t <IsStringLike<IterVar>::value>,
330+ typename = std::enable_if_t <IsStringLike<IterVar2>::value>,
331+ typename = std::enable_if_t <IsExprLike<IterRange>::value>,
332+ typename = std::enable_if_t <IsStringLike<AccuVar>::value>,
333+ typename = std::enable_if_t <IsExprLike<AccuInit>::value>,
334+ typename = std::enable_if_t <IsExprLike<LoopStep>::value>,
335+ typename = std::enable_if_t <IsExprLike<LoopCondition>::value>,
336+ typename = std::enable_if_t <IsExprLike<Result>::value>>
337+ Expr NewComprehension (ExprId id, IterVar iter_var, IterVar2 iter_var2,
338+ IterRange iter_range, AccuVar accu_var,
339+ AccuInit accu_init, LoopCondition loop_condition,
340+ LoopStep loop_step, Result result) {
320341 Expr expr;
321342 expr.set_id (id);
322343 auto & comprehension_expr = expr.mutable_comprehension_expr ();
323344 comprehension_expr.set_iter_var (std::move (iter_var));
345+ comprehension_expr.set_iter_var2 (std::move (iter_var2));
324346 comprehension_expr.set_iter_range (std::move (iter_range));
325347 comprehension_expr.set_accu_var (std::move (accu_var));
326348 comprehension_expr.set_accu_init (std::move (accu_init));
0 commit comments