public static Cons clTranslateLetTree(Cons tree, boolean specialP) {
    { Cons odeclarations = Stella.NIL;
      Cons typedeclarations = (Stella.generateClTypeDeclarationsP() ? Cons.clYieldLetVariableTypeDeclarationTrees(((Cons)(tree.rest.value))) : Stella.NIL);

      { Cons d = null;
        Cons iter000 = ((Cons)(tree.rest.value));

        for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
          d = ((Cons)(iter000.value));
          odeclarations = Cons.cons(Cons.cons((specialP ? Symbol.clTranslateGlobalSymbol(((Symbol)(d.value))) : Symbol.clTranslateLocalSymbol(((Symbol)(d.value)))), Cons.cons(Stella_Object.clTranslateATree(d.rest.rest.value), Stella.NIL)), odeclarations);
        }
      }
      tree.firstSetter(Stella.internCommonLispSymbol("LET*"));
      tree.secondSetter(odeclarations.reverse());
      tree.rest.rest = Cons.clYieldDeclareTree(typedeclarations, false).concatenate(Cons.clTranslateListOfTrees(tree.rest.rest), Stella.NIL);
      return (tree);
    }
  }