public static Stella_Object cppTranslateATree(Stella_Object tree) {
    if (Stella_Object.safePrimaryType(tree) == Stella.SGT_STELLA_CONS) {
      { Cons tree000 = ((Cons)(tree));

        if (tree000 == Stella.NIL) {
          return (tree000.cppTranslateAtomicTree());
        }
        { GeneralizedSymbol testValue000 = ((GeneralizedSymbol)(tree000.value));

          if (testValue000 == Stella.SYM_STELLA_SPECIAL) {
            return (Cons.cppTranslateSpecialTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_VERBATIM) {
            return (Cons.cppTranslateVerbatimTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_UNWIND_PROTECT) {
            return (Cons.cppTranslateUnwindProtect(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_SIGNAL) {
            return (Cons.cppTranslateSignal(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_HANDLER_CASE) {
            return (Cons.cppTranslateHandlerCase(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_HANDLE_EXCEPTION) {
            return (Cons.cppTranslateHandleException(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_VOID_SYS) {
            return (Cons.cppTranslateVoidSys(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_BAD_SYS) {
            return (Cons.cppTranslateBadSys(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_TYPED_SYS) {
            return (Cons.cppTranslateTypedSys(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SETQ) {
            return (Cons.cppTranslateSetqTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_SLOT_VALUE) {
            return (Cons.cppTranslateSysSlotValue(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_REFERENCED_SLOT_VALUE) {
            return (Cons.cppTranslateSysReferencedSlotValue(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_SLOT_VALUE_SETTER) {
            return (Cons.cppTranslateSysSlotValueSetter(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_CALL_METHOD) {
            return (Cons.cppTranslateMethodCall(tree000.rest, false));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_REFERENCED_CALL_METHOD) {
            return (Cons.cppTranslateMethodCall(tree000.rest, true));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_CALL_FUNCTION) {
            return (Cons.cppTranslateFunctionCall(tree000.rest, null));
          }
          else if (testValue000 == Stella.SYM_STELLA_PROGN) {
            return (Cons.cppTranslateProgn(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_WITH_PROCESS_LOCK) {
            return (Cons.cppTranslateWithProcessLock(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_LOOP) {
            return (Cons.cppTranslateLoop(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_FOREACH) {
            return (Cons.cppTranslateForeachTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_LET) {
            return (Cons.cppTranslateLetTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_STARTUP_TIME_PROGN) {
            return (Cons.cppTranslateStartupTimeProgn(tree000));
          }
          else if ((testValue000 == Stella.SYM_STELLA_CAST) ||
              (testValue000 == Stella.SYM_STELLA_SAFE_CAST)) {
            return (Cons.cppTranslateCast(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_RETURN) {
            return (Cons.cppTranslateReturnTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_BREAK) {
            return (Cons.cppTranslateBreak(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_CONTINUE) {
            return (Cons.cppTranslateContinue(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_WHILE) {
            return (Cons.cppTranslateWhile(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_IF) {
            return (Cons.cppTranslateIfTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_CHOOSE) {
            return (Cons.cppTranslateChooseTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_WHEN) {
            return (Cons.cppTranslateWhenTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_UNLESS) {
            return (Cons.cppTranslateUnlessTree(tree000));
          }
          else if ((testValue000 == Stella.SYM_STELLA_AND) ||
              ((testValue000 == Stella.SYM_STELLA_OR) ||
               ((testValue000 == Stella.SYM_STELLA_NOT) ||
                ((testValue000 == Stella.SYM_STELLA_EQp) ||
                 ((testValue000 == Stella.SYM_STELLA_g) ||
                  ((testValue000 == Stella.SYM_STELLA_ge) ||
                   ((testValue000 == Stella.SYM_STELLA_l) ||
                    ((testValue000 == Stella.SYM_STELLA_le) ||
                     ((testValue000 == Stella.SYM_STELLA_ii) ||
                      (testValue000 == Stella.SYM_STELLA___)))))))))) {
            return (Cons.cppTranslateOperatorTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_COND) {
            return (Cons.cppTranslateCondTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_CASE) {
            return (Cons.cppTranslateCaseTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_MAKE) {
            return (Cons.cppTranslateMakeTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_NEW) {
            return (Cons.cppTranslateSysNew(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_MV_SETQ) {
            return (Cons.cppTranslateMvSetq(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_CALL_FUNCTION_CODE) {
            return (Cons.cppTranslateCallFunctionCode(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_CALL_METHOD_CODE) {
            return (Cons.cppTranslateCallMethodCode(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_INLINE_CALL) {
            return (Cons.cppTranslateInlineCallTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_THE_CODE) {
            return (Cons.cppTranslateTheCode(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_SYS_POINTER_TO_FUNCTION) {
            return (Cons.cppTranslateSysPointerToFunction(tree000));
          }
          else if ((testValue000 == Stella.SYM_STELLA_INLINE) ||
              (testValue000 == Stella.SYM_STELLA_IGNORE)) {
            return (Cons.cppTranslateInlineTree(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_PRINT_STREAM) {
            return (Cons.cppTranslatePrintStream(tree000));
          }
          else if (testValue000 == Stella.SYM_STELLA_PRINT_NATIVE_STREAM) {
            return (Cons.cppTranslatePrintNativeStream(tree000));
          }
          else {
            { OutputStringStream stream000 = OutputStringStream.newOutputStringStream();

              stream000.nativeStream.print("`" + testValue000 + "' is not a valid case option");
              throw ((StellaException)(StellaException.newStellaException(stream000.theStringReader()).fillInStackTrace()));
            }
          }
        }
      }
    }
    else {
      if (tree == null) {
        return (Stella.cppTranslateNull());
      }
      return (tree.cppTranslateAtomicTree());
    }
  }