summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKarl Heuer <kwzh@gnu.org>1996-01-24 23:44:22 +0000
committerKarl Heuer <kwzh@gnu.org>1996-01-24 23:44:22 +0000
commit42c1c6775ee2cba6de0f6a429f9f1e78c073354e (patch)
treeead9a39a65f3867bf5bb79b559fa98fd9a6f5dc0 /src
parent55da04ce3f86343217dd06cb0abff859a02d109a (diff)
downloademacs-42c1c6775ee2cba6de0f6a429f9f1e78c073354e.tar.gz
(XCAR, XCDR, CAR, CDR): New macros.
(make_number): New macro definition.
Diffstat (limited to 'src')
-rw-r--r--src/lisp.h21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/lisp.h b/src/lisp.h
index 61ead0907d3..9fe189f36f5 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -307,6 +307,11 @@ extern int pure_size;
((var) = ((EMACS_INT)(type) << VALBITS) + ((EMACS_INT) (ptr) & VALMASK))
#endif
+/* Convert a C integer into a Lisp_Object integer. */
+
+#define make_number(N) \
+ ((((EMACS_INT) (N)) & VALMASK) | ((EMACS_INT) Lisp_Int) << VALBITS)
+
/* During garbage collection, XGCTYPE must be used for extracting types
so that the mark bit is ignored. XMARKBIT accesses the markbit.
Markbits are used only in particular slots of particular structure types.
@@ -510,6 +515,21 @@ struct Lisp_Cons
Lisp_Object car, cdr;
};
+/* Take the car or cdr of something known to be a cons cell. */
+#define XCAR(c) (XCONS ((c))->car)
+#define XCDR(c) (XCONS ((c))->cdr)
+
+/* Take the car or cdr of something whose type is not known. */
+#define CAR(c) \
+ (CONSP ((c)) ? XCAR ((c)) \
+ : NILP ((c)) ? Qnil \
+ : wrong_type_argument (Qlistp, (c)))
+
+#define CDR(c) \
+ (CONSP ((c)) ? XCDR ((c)) \
+ : NILP ((c)) ? Qnil \
+ : wrong_type_argument (Qlistp, (c)))
+
/* Like a cons, but records info on where the text lives that it was read from */
/* This is not really in use now */
@@ -1400,7 +1420,6 @@ extern Lisp_Object Flsh (), Fash ();
extern Lisp_Object Fadd1 (), Fsub1 ();
-extern Lisp_Object make_number ();
extern Lisp_Object long_to_cons ();
extern unsigned long cons_to_long ();
extern void args_out_of_range ();