summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/data.c32
-rw-r--r--src/s/bsd4-3.h3
-rw-r--r--src/s/template.h9
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