public LispValue setf_symbol_function(LispValue newCode)
  {
    // function or macro
    if (newCode instanceof LispFunction/* && !(newCode instanceof LispMacro)*/) // ??
    {
      f_function = newCode;
      return f_function;
    }

    if (newCode instanceof LispPrimitive) // ??
    {
      f_function = newCode;
      return f_function;
    }
    
    // A macro has the symbol :MACRO as the first element.
    if (isMacroCode(newCode))
    {
      f_function = new StandardLispMacro(this, cdr(newCode));
      return f_function;
    }

    // Else, create a new function.
    f_function = new StandardLispFunction(this, newCode);
    return f_function;
  }