public static Cons cppTranslateFunctionCall(Cons tree, MethodSlot method) {
    { Symbol functionname = ((Symbol)(tree.value));
      Cons functionargs = Cons.copyConsList(tree.rest);
      Stella_Object firstarg = functionargs.value;
      MethodSlot function = ((method != null) ? method : Symbol.lookupFunction(functionname));
      Cons operator = Symbol.cppLookupOperatorTable(functionname.softPermanentify());
      Cons otree = null;

      if ((functionname == Stella.SYM_STELLA_GET_SYM) ||
          ((functionname == Stella.SYM_STELLA_GET_KWD) ||
           (functionname == Stella.SYM_STELLA_GET_SGT))) {
        if (Surrogate.subtypeOfIntegerP(Stella_Object.safePrimaryType(firstarg))) {
          { IntegerWrapper firstarg000 = ((IntegerWrapper)(firstarg));

            return (Symbol.cppTranslateHardcodedSymbolReference(functionname, firstarg000.wrapperValue));
          }
        }
        else {
        }
      }
      else {
      }
      functionargs = functionargs.concatenate(MethodSlot.cppYieldUnusedDummyArgs(function, functionargs), Stella.NIL);
      if (operator != null) {
        otree = Cons.cppTranslateOperatorCall(operator, functionargs, functionargs.length());
      }
      else {
        otree = Cons.list$(Cons.cons(Stella.SYM_STELLA_CPP_FUNCTION_CALL, Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_CPP_IDENT, Cons.cons(MethodSlot.cppTranslateFunctionName(function, true), Cons.cons(Stella.NIL, Stella.NIL)))), Cons.cons(((((BooleanWrapper)(KeyValueList.dynamicSlotValue(function.dynamicSlots, Stella.SYM_STELLA_METHOD_VARIABLE_ARGUMENTSp, Stella.FALSE_WRAPPER))).wrapperValue &&
            (!MethodSlot.passVariableArgumentsAsListP(function))) ? Cons.cppTranslateVariableLengthActuals(functionargs, function) : Cons.cppTranslateActualParameters(functionargs)), Cons.cons(Stella.NIL, Stella.NIL)))));
      }
      return (otree);
    }
  }