public static StandardObject computeExpressionType(Stella_Object expression, boolean wrapP) {
    { Stella_Object walkedtree = Stella_Object.walkATree(Cons.list$(Cons.cons(Stella.SYM_STELLA_LET, Cons.cons(Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_X, Cons.cons(Stella_Object.copyConsTree(expression), Cons.cons(Stella.NIL, Stella.NIL)))), Stella.NIL), Cons.cons(Stella.NIL, Stella.NIL)))), new Object[1]);
      Stella_Object typespec = Cons.consTreeNth(((Cons)(walkedtree)), Cons.cons(IntegerWrapper.wrapInteger(1), Cons.cons(IntegerWrapper.wrapInteger(1), Cons.cons(IntegerWrapper.wrapInteger(0), Cons.cons(IntegerWrapper.wrapInteger(1), Stella.NIL)))));

      if (wrapP) {
        return ((StandardObject.subTypeSpecOfP(((StandardObject)(typespec)), Stella.SGT_STELLA_LITERAL) ? StandardObject.typeSpecToBaseType(((StandardObject)(typespec))).typeToWrappedType() : ((StandardObject)(((StandardObject)(typespec))))));
      }
      else {
        return (((StandardObject)(typespec)));
      }
    }
  }