/* Fundamental definitions for GNU Emacs Lisp interpreter.
Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Emacs.
/* If union type is not wanted, define Lisp_Object as just a number. */
#ifdef NO_UNION_TYPE
-#define Lisp_Object EMACS_INT
+typedef EMACS_INT Lisp_Object;
#define LISP_MAKE_RVALUE(o) (0+(o))
#endif /* NO_UNION_TYPE */
extern Lisp_Object make_number P_ ((EMACS_INT));
#endif
-#define EQ(x, y) ((x).s.val == (y).s.val && (x).s.type == (y).s.type)
+#define EQ(x, y) ((x).i == (y).i)
#endif /* NO_UNION_TYPE */
in a Lisp object whose data type says it points to something. */
#define XPNTR(a) (XUINT (a) | DATA_SEG_BITS)
#else
-#define XPNTR(a) XUINT (a)
+/* Some versions of gcc seem to consider the bitfield width when
+ issuing the "cast to pointer from integer of different size"
+ warning, so the cast is here to widen the value back to its natural
+ size. */
+#define XPNTR(a) ((EMACS_INT) XUINT (a))
#endif
#endif /* not HAVE_SHM */
#endif /* no XPNTR */
/* Please do not use the names of these elements in code other
than the core lisp implementation. Use XCAR and XCDR below. */
#ifdef HIDE_LISP_IMPLEMENTATION
- Lisp_Object car_, cdr_;
+ Lisp_Object car_;
+ union
+ {
+ Lisp_Object cdr_;
+ struct Lisp_Cons *chain;
+ } u;
#else
- Lisp_Object car, cdr;
+ Lisp_Object car;
+ union
+ {
+ Lisp_Object cdr;
+ struct Lisp_Cons *chain;
+ } u;
#endif
};
invalidated at arbitrary points.) */
#ifdef HIDE_LISP_IMPLEMENTATION
#define XCAR_AS_LVALUE(c) (XCONS ((c))->car_)
-#define XCDR_AS_LVALUE(c) (XCONS ((c))->cdr_)
+#define XCDR_AS_LVALUE(c) (XCONS ((c))->u.cdr_)
#else
#define XCAR_AS_LVALUE(c) (XCONS ((c))->car)
-#define XCDR_AS_LVALUE(c) (XCONS ((c))->cdr)
+#define XCDR_AS_LVALUE(c) (XCONS ((c))->u.cdr)
#endif
/* Use these from normal code. */
/* Lisp floating point type */
struct Lisp_Float
{
+ union
+ {
#ifdef HIDE_LISP_IMPLEMENTATION
- double data_;
+ double data_;
#else
- double data;
+ double data;
#endif
+ struct Lisp_Float *chain;
+ } u;
};
#ifdef HIDE_LISP_IMPLEMENTATION
-#define XFLOAT_DATA(f) (XFLOAT (f)->data_)
+#define XFLOAT_DATA(f) (XFLOAT (f)->u.data_)
#else
-#define XFLOAT_DATA(f) (XFLOAT (f)->data)
+#define XFLOAT_DATA(f) (XFLOAT (f)->u.data)
#endif
/* A character, declared with the following typedef, is a member
Lisp_Object flag = Vquit_flag; \
Vquit_flag = Qnil; \
if (EQ (Vthrow_on_input, flag)) \
- Fthrow (Vthrow_on_input, Qnil); \
+ Fthrow (Vthrow_on_input, Qt); \
Fsignal (Qquit, Qnil); \
} \
else if (interrupt_input_pending) \
Lisp_Object flag = Vquit_flag; \
Vquit_flag = Qnil; \
if (EQ (Vthrow_on_input, flag)) \
- Fthrow (Vthrow_on_input, Qnil); \
+ Fthrow (Vthrow_on_input, Qt); \
Fsignal (Qquit, Qnil); \
} \
} while (0)
extern int consing_since_gc;
-/* Threshold for doing another gc. */
+/* Thresholds for doing another gc. */
extern EMACS_INT gc_cons_threshold;
+extern EMACS_INT gc_relative_threshold;
+
+extern EMACS_INT memory_full_cons_threshold;
+
/* Structure for recording stack slots that need marking. */
/* This is a chain of structures, each of which points at a Lisp_Object variable
extern void init_alloc P_ ((void));
extern void syms_of_alloc P_ ((void));
extern struct buffer * allocate_buffer P_ ((void));
+extern int valid_lisp_object_p P_ ((Lisp_Object));
/* Defined in chartab.c */
EXFUN (Fmake_char_table, 2);
EXFUN (Fdo_auto_save, 2);
extern Lisp_Object apply_lambda P_ ((Lisp_Object, Lisp_Object, int));
extern Lisp_Object internal_catch P_ ((Lisp_Object, Lisp_Object (*) (Lisp_Object), Lisp_Object));
+extern Lisp_Object internal_lisp_condition_case P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
extern Lisp_Object internal_condition_case P_ ((Lisp_Object (*) (void), Lisp_Object, Lisp_Object (*) (Lisp_Object)));
extern Lisp_Object internal_condition_case_1 P_ ((Lisp_Object (*) (Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object)));
extern Lisp_Object internal_condition_case_2 P_ ((Lisp_Object (*) (int, Lisp_Object *), int, Lisp_Object *, Lisp_Object, Lisp_Object (*) (Lisp_Object)));
Lisp_Object,
struct Lisp_Process *,
int));
-extern void deactivate_process P_ ((Lisp_Object));
extern void add_keyboard_wait_descriptor P_ ((int));
extern void delete_keyboard_wait_descriptor P_ ((int));
extern void close_process_descs P_ ((void));
-extern void status_notify P_ ((void));
-extern int read_process_output P_ ((Lisp_Object, int));
extern void init_process P_ ((void));
extern void syms_of_process P_ ((void));
extern void setup_process_coding_systems P_ ((Lisp_Object));
extern void syms_of_xmenu P_ ((void));
/* defined in sysdep.c */
+#ifndef HAVE_GET_CURRENT_DIR_NAME
+extern char *get_current_dir_name P_ ((void));
+#endif
extern void stuff_char P_ ((char c));
extern void init_sigio P_ ((int));
extern void request_sigio P_ ((void));