Mercurial > emacs
diff src/lread.c @ 26735:c13ab7bc6fdc
(Fintern_soft): Accept a symbol argument.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Mon, 06 Dec 1999 17:52:27 +0000 |
parents | c3c9cc1c2379 |
children | 6bb3d25454a8 |
line wrap: on
line diff
--- a/src/lread.c Mon Dec 06 17:44:17 1999 +0000 +++ b/src/lread.c Mon Dec 06 17:52:27 1999 +0000 @@ -2752,25 +2752,33 @@ } DEFUN ("intern-soft", Fintern_soft, Sintern_soft, 1, 2, 0, - "Return the canonical symbol whose name is STRING, or nil if none exists.\n\ + "Return the canonical symbol named NAME, or nil if none exists.\n\ +NAME may be a string or a symbol. If it is a symbol, that exact +symbol is searched for. A second optional argument specifies the obarray to use;\n\ it defaults to the value of `obarray'.") - (string, obarray) - Lisp_Object string, obarray; + (name, obarray) + Lisp_Object name, obarray; { register Lisp_Object tem; + struct Lisp_String *string; if (NILP (obarray)) obarray = Vobarray; obarray = check_obarray (obarray); - CHECK_STRING (string, 0); - - tem = oblookup (obarray, XSTRING (string)->data, - XSTRING (string)->size, - STRING_BYTES (XSTRING (string))); - if (!INTEGERP (tem)) + if (!SYMBOLP (name)) + { + CHECK_STRING (name, 0); + string = XSTRING (name); + } + else + string = XSYMBOL (name)->name; + + tem = oblookup (obarray, string->data, string->size, STRING_BYTES (string)); + if (INTEGERP (tem) || (SYMBOLP (name) && !EQ (name, tem))) + return Qnil; + else return tem; - return Qnil; } DEFUN ("unintern", Funintern, Sunintern, 1, 2, 0,