docs: @Override
      public DirectCompilerResult visitForExpression(FEEL_1_1Parser.ForExpressionContext ctx) {
          Set<FieldDeclaration> fds = new HashSet<>();
          MethodCallExpr forCall = new MethodCallExpr(new NameExpr(CompiledFEELSupport.class.getSimpleName()), "ffor");
          forCall.addArgument(new NameExpr("feelExprCtx"));
          Expression curForCallTail = forCall;
          IterationContextsContext iCtxs = ctx.iterationContexts();
          for (FEEL_1_1Parser.IterationContextContext ic : iCtxs.iterationContext()) {
              DirectCompilerResult name = visit(ic.iterationNameDefinition());
              DirectCompilerResult expr = visit(ic.expression().get(0));
              fds.addAll(name.getFieldDeclarations());
              fds.addAll(expr.getFieldDeclarations());
              if (ic.expression().size() == 1) {
                  MethodCallExpr filterWithCall = new MethodCallExpr(curForCallTail, "with");
                  Expression nameParam = anonFunctionEvaluationContext2Object(name.getExpression());
                  Expression exprParam = anonFunctionEvaluationContext2Object(expr.getExpression());
                  filterWithCall.addArgument(nameParam);
                  filterWithCall.addArgument(exprParam);
                  curForCallTail = filterWithCall;
              } else {
                  DirectCompilerResult rangeEndExpr = visit(ic.expression().get(1));
                  fds.addAll(rangeEndExpr.getFieldDeclarations());
                  MethodCallExpr filterWithCall = new MethodCallExpr(curForCallTail, "with");
                  Expression nameParam = anonFunctionEvaluationContext2Object(name.getExpression());
                  Expression exprParam = anonFunctionEvaluationContext2Object(expr.getExpression());
                  Expression rangeEndExprParam = anonFunctionEvaluationContext2Object(rangeEndExpr.getExpression());
                  filterWithCall.addArgument(nameParam);
                  filterWithCall.addArgument(exprParam);
                  filterWithCall.addArgument(rangeEndExprParam);
                  curForCallTail = filterWithCall;
              }
          }
          DirectCompilerResult expr = visit(ctx.expression());
          fds.addAll(expr.getFieldDeclarations());
          MethodCallExpr returnCall = new MethodCallExpr(curForCallTail, "rreturn");
          Expression returnParam = anonFunctionEvaluationContext2Object(expr.getExpression());
          returnCall.addArgument(returnParam);
          return DirectCompilerResult.of(returnCall, expr.resultType, fds);
      }