diff options
-rw-r--r-- | src/data.c | 32 | ||||
-rw-r--r-- | src/s/bsd4-3.h | 3 | ||||
-rw-r--r-- | src/s/template.h | 9 |
3 files changed, 33 insertions, 11 deletions
diff --git a/src/data.c b/src/data.c index 184cfba3a32..8906d68cabe 100644 --- a/src/data.c +++ b/src/data.c @@ -649,12 +649,14 @@ swap_in_symval_forwarding (sym, valcontents) return XCONS (valcontents)->car; } -/* Note that it must not be possible to quit within this function. - Great care is required for this. */ +/* Find the value of a symbol, returning Qunbound if it's not bound. + This is helpful for code which just wants to get a variable's value + if it has one, without signalling an error. + Note that it must not be possible to quit + within this function. Great care is required for this. */ -DEFUN ("symbol-value", Fsymbol_value, Ssymbol_value, 1, 1, 0, - "Return SYMBOL's value. Error if that is void.") - (sym) +Lisp_Object +find_symbol_value (sym) Lisp_Object sym; { register Lisp_Object valcontents, tem1; @@ -689,18 +691,26 @@ DEFUN ("symbol-value", Fsymbol_value, Ssymbol_value, 1, 1, 0, case Lisp_Buffer_Objfwd: return *(Lisp_Object *)(XUINT (valcontents) + (char *)current_buffer); - case Lisp_Symbol: - /* For a symbol, check whether it is 'unbound. */ - if (!EQ (valcontents, Qunbound)) - break; - /* drops through! */ case Lisp_Void: - return Fsignal (Qvoid_variable, Fcons (sym, Qnil)); + return Qunbound; } return valcontents; } +DEFUN ("symbol-value", Fsymbol_value, Ssymbol_value, 1, 1, 0, + "Return SYMBOL's value. Error if that is void.") + (sym) + Lisp_Object sym; +{ + Lisp_Object val = find_symbol_value (sym); + + if (EQ (val, Qunbound)) + return Fsignal (Qvoid_variable, Fcons (sym, Qnil)); + else + return val; +} + DEFUN ("set", Fset, Sset, 2, 2, 0, "Set SYMBOL's value to NEWVAL, and return NEWVAL.") (sym, newval) diff --git a/src/s/bsd4-3.h b/src/s/bsd4-3.h index e9754af045a..332bbaa3856 100644 --- a/src/s/bsd4-3.h +++ b/src/s/bsd4-3.h @@ -127,3 +127,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ is named _avenrun. */ #define LDAV_SYMBOL "_avenrun" + +/* The return type of a signal handling function. */ +#define SIGTYPE int diff --git a/src/s/template.h b/src/s/template.h index 6cf4905db3e..6238ee7ef95 100644 --- a/src/s/template.h +++ b/src/s/template.h @@ -128,6 +128,15 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #define CLASH_DETECTION +/* Define this if your operating system declares signal handlers to + have a type other than the usual. `The usual' is `void' for ANSI C + systems (i.e. when the __STDC__ macro is defined), and `int' for + pre-ANSI systems. If you're using GCC on an older system, __STDC__ + will be defined, but the system's include files will still say that + signal returns int or whatever; in situations like that, define + this to be what the system's include files want. */ +/* #define SIGTYPE int */ + /* Here, on a separate page, add any special hacks needed to make Emacs work on this system. For example, you might define certain system call names that don't |