public static void defineFunctionObject(String name, String definition, java.lang.reflect.Method code, java.lang.reflect.Method wrappercode) {
    if (name == null) {
      { MethodSlot function = Stella.defineMethodFromStringifiedSource(null, null, definition);

        if (function != null) {
          if (code != null) {
            function.functionCode = code;
          }
          if (wrappercode != null) {
            KeyValueList.setDynamicSlotValue(function.dynamicSlots, Stella.SYM_STELLA_EVALUATOR_WRAPPER_CODE, FunctionCodeWrapper.wrapFunctionCode(wrappercode), Stella.NULL_FUNCTION_CODE_WRAPPER);
          }
          Stella.$FUNCTION_LOOKUP_TABLE$.insertAt(function.slotName, function);
        }
      }
    }
    else {
      { Stella_Object namesymbol = ((name.charAt(0) == ' ') ? Stella.readSExpressionFromString(name) : Symbol.internSymbolInModule(name, null, false));
        StandardObject oldfunction = ((StandardObject)(Stella.$FUNCTION_LOOKUP_TABLE$.lookup(((Symbol)(namesymbol)))));
        Vector record = Vector.newVector(((wrappercode != null) ? 5 : 4));

        if ((oldfunction != null) &&
            (oldfunction.primaryType() == Stella.SGT_STELLA_VECTOR)) {
          oldfunction = null;
        }
        (record.theArray)[0] = (StringWrapper.wrapString(definition));
        (record.theArray)[1] = oldfunction;
        (record.theArray)[2] = (StringWrapper.wrapString(((Module)(Stella.$MODULE$.get())).moduleFullName));
        if (code != null) {
          (record.theArray)[3] = (FunctionCodeWrapper.wrapFunctionCode(code));
        }
        if (wrappercode != null) {
          (record.theArray)[4] = (FunctionCodeWrapper.wrapFunctionCode(wrappercode));
        }
        Stella.$FUNCTION_LOOKUP_TABLE$.insertAt(((Symbol)(namesymbol)), record);
      }
    }
  }