public static MethodSlot helpDefineMethodFromParseTree(Cons inputtree, String stringifiedsource, Object [] MV_returnarray) {
    { Stella_Object nametree = null;
      Cons parameterstree = null;
      KeywordKeyValueList methodoptions = KeywordKeyValueList.newKeywordKeyValueList();
      Cons bodytree = null;
      Symbol name = null;
      Cons returntypestree = null;
      boolean functionP = inputtree.value == Stella.SYM_STELLA_DEFUN;
      MethodSlot oldmethod = null;
      String signaturestring = ((stringifiedsource == null) ? Cons.stringifyMethodSignature(inputtree) : stringifiedsource);

      { Object [] caller_MV_returnarray = new Object[2];

        nametree = Cons.destructureDefmethodTree(inputtree, methodoptions, caller_MV_returnarray);
        parameterstree = ((Cons)(caller_MV_returnarray[0]));
        bodytree = ((Cons)(caller_MV_returnarray[1]));
      }
      { Object [] caller_MV_returnarray = new Object[1];

        name = Stella_Object.destructureMethodNameTree(nametree, caller_MV_returnarray);
        returntypestree = ((Cons)(caller_MV_returnarray[0]));
      }
      if (name == null) {
        { MethodSlot _return_temp = null;

          MV_returnarray[0] = BooleanWrapper.wrapBoolean(false);
          return (_return_temp);
        }
      }
      oldmethod = (functionP ? Symbol.getFunctionWithIdenticalSignature(name, signaturestring) : Symbol.getMethodWithIdenticalSignature(name, parameterstree, signaturestring));
      if (oldmethod != null) {
        { MethodSlot _return_temp = oldmethod;

          MV_returnarray[0] = BooleanWrapper.wrapBoolean(true);
          return (_return_temp);
        }
      }
      KeywordKeyValueList.inPlaceNormalizeMethodOptions(methodoptions, name);
      { MethodSlot method = Symbol.defineStellaMethodSlot(name, returntypestree, functionP, parameterstree, methodoptions);

        if (stringifiedsource == null) {
          stringifiedsource = (MethodSlot.stringifyMethodBodyP(method) ? Native.stringify(((Cons)(Stella.readSExpressionFromString(signaturestring))).concatenate(bodytree, Stella.NIL)) : signaturestring);
        }
        method.methodStringifiedSource = stringifiedsource;
        Slot.recordSlotHomeModule(method);
        { MethodSlot _return_temp = method;

          MV_returnarray[0] = BooleanWrapper.wrapBoolean(false);
          return (_return_temp);
        }
      }
    }
  }