public static Cons clTranslateForeachTree(Cons tree) {
    { Cons iteratorbindings = ((Cons)(tree.rest.value));
      Cons valuetrees = ((Cons)(tree.rest.rest.value));
      Cons nexttrees = ((Cons)(tree.fourth()));
      Stella_Object continuationtest = Stella_Object.clTranslateBooleanTest(tree.fifth(), false);
      Cons body = Cons.clTranslateListOfTrees(tree.nthRest(5));
      Cons declarations = Stella.NIL;
      Cons valueassignments = Stella.NIL;
      Cons nextassignments = Stella.NIL;
      Cons typedeclarations = Stella.NIL;
      Stella_Object iteratorconstructor = null;

      if (Stella.generateClTypeDeclarationsP()) {
        typedeclarations = Cons.clYieldLetVariableTypeDeclarationTrees(iteratorbindings);
      }
      { Cons binding = null;
        Cons iter000 = iteratorbindings;
        Cons collect000 = null;

        for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
          binding = ((Cons)(iter000.value));
          iteratorconstructor = Stella_Object.clTranslateATree(binding.rest.rest.value);
          if (collect000 == null) {
            {
              collect000 = Cons.cons(Cons.cons(Symbol.clTranslateLocalSymbol(((Symbol)(binding.value))), Cons.cons(iteratorconstructor, Stella.NIL)), Stella.NIL);
              if (declarations == Stella.NIL) {
                declarations = collect000;
              }
              else {
                Cons.addConsToEndOfConsList(declarations, collect000);
              }
            }
          }
          else {
            {
              collect000.rest = Cons.cons(Cons.cons(Symbol.clTranslateLocalSymbol(((Symbol)(binding.value))), Cons.cons(iteratorconstructor, Stella.NIL)), Stella.NIL);
              collect000 = collect000.rest;
            }
          }
        }
      }
      { Cons tree000 = null;
        Cons iter001 = valuetrees;
        Cons collect001 = null;

        for (;!(iter001 == Stella.NIL); iter001 = iter001.rest) {
          tree000 = ((Cons)(iter001.value));
          if (collect001 == null) {
            {
              collect001 = Cons.cons(Stella_Object.clTranslateATree(tree000), Stella.NIL);
              if (valueassignments == Stella.NIL) {
                valueassignments = collect001;
              }
              else {
                Cons.addConsToEndOfConsList(valueassignments, collect001);
              }
            }
          }
          else {
            {
              collect001.rest = Cons.cons(Stella_Object.clTranslateATree(tree000), Stella.NIL);
              collect001 = collect001.rest;
            }
          }
        }
      }
      { Cons tree000 = null;
        Cons iter002 = nexttrees;
        Cons collect002 = null;

        for (;!(iter002 == Stella.NIL); iter002 = iter002.rest) {
          tree000 = ((Cons)(iter002.value));
          if (collect002 == null) {
            {
              collect002 = Cons.cons(Stella_Object.clTranslateATree(tree000), Stella.NIL);
              if (nextassignments == Stella.NIL) {
                nextassignments = collect002;
              }
              else {
                Cons.addConsToEndOfConsList(nextassignments, collect002);
              }
            }
          }
          else {
            {
              collect002.rest = Cons.cons(Stella_Object.clTranslateATree(tree000), Stella.NIL);
              collect002 = collect002.rest;
            }
          }
        }
      }
      return (Cons.list$(Cons.cons(Stella.internCommonLispSymbol("LET*"), Cons.cons(declarations, Cons.cons(Cons.clYieldDeclareTree(typedeclarations, false).concatenate(Cons.cons(Cons.list$(Cons.cons(Stella.internCommonLispSymbol("LOOP"), Cons.cons(Stella.SYM_STELLA_WHILE, Cons.cons(continuationtest, Cons.cons(Cons.cons(Stella.SYM_STELLA_DO, valueassignments.concatenate(Cons.maybeWrapWithContinueLabel(body).concatenate(nextassignments.concatenate(Stella.NIL, Stella.NIL), Stella.NIL), Stella.NIL)), Stella.NIL))))), Stella.NIL), Stella.NIL), Stella.NIL)))));
    }
  }