* lisp.h:
* w32heap.c: * emacs.c: * alloc.c: Replace all references of NO_UNION_TYPE with USE_LISP_UNION_TYPE. * m/xtensa.h (NO_UNION_TYPE): * m/vax.h (NO_UNION_TYPE): * m/template.h (NO_UNION_TYPE): * m/sparc.h (NO_UNION_TYPE): * m/mips.h (NO_UNION_TYPE): * m/macppc.h (NO_UNION_TYPE): * m/m68k.h (NO_UNION_TYPE): * m/iris4d.h (NO_UNION_TYPE): * m/intel386.h (NO_UNION_TYPE): * m/ibms390x.h (NO_UNION_TYPE): * m/ibms390.h (NO_UNION_TYPE): * m/ibmrs6000.h (NO_UNION_TYPE): * m/ia64.h (NO_UNION_TYPE): * m/hp800.h (NO_UNION_TYPE): * m/arm.h (NO_UNION_TYPE): * m/amdx86-64.h (NO_UNION_TYPE): * m/alpha.h (NO_UNION_TYPE): Remove definition, all platform were defining it the same.
This commit is contained in:
parent
f4f745d943
commit
6e5cb96f3d
24 changed files with 56 additions and 107 deletions
|
@ -18,6 +18,7 @@ WINDOWSNT Compiling the native MS-Windows (W32) port.
|
|||
__MINGW32__ Compiling the W32 port with the MinGW port of GCC.
|
||||
_MSC_VER Compiling the W32 port with the Microsoft C compiler.
|
||||
IRIX6_5 Compiling on Irix-6.5
|
||||
USE_LISP_UNION_TYPE Define it in lisp.h to make Lisp_Object be a union type instead of the default int.
|
||||
|
||||
** Distinguishing GUIs **
|
||||
|
||||
|
@ -281,7 +282,6 @@ NO_SHARED_LIBS
|
|||
NO_SIOCTL_H
|
||||
NO_SOCK_SIGIO
|
||||
NO_TERMIO
|
||||
NO_UNION_TYPE
|
||||
NSIG
|
||||
NSIG_MINIMUM
|
||||
NULL
|
||||
|
|
|
@ -3757,8 +3757,8 @@ If the code is incorrect, your compiler has this problem.
|
|||
In the XCONS, etc., macros in lisp.h you must replace (a).u.val with
|
||||
((a).u.val + coercedummy) where coercedummy is declared as int.
|
||||
|
||||
This problem will not happen if the m-...h file for your type
|
||||
of machine defines NO_UNION_TYPE. That is the recommended setting now.
|
||||
This problem will only happen if USE_LISP_UNION_TYPE is manually
|
||||
defined in lisp.h.
|
||||
|
||||
*** C compilers lose on returning unions.
|
||||
|
||||
|
@ -3766,8 +3766,8 @@ I hear that some C compilers cannot handle returning a union type.
|
|||
Most of the functions in GNU Emacs return type Lisp_Object, which is
|
||||
defined as a union on some rare architectures.
|
||||
|
||||
This problem will not happen if the m-...h file for your type
|
||||
of machine defines NO_UNION_TYPE.
|
||||
This problem will only happen if USE_LISP_UNION_TYPE is manually
|
||||
defined in lisp.h.
|
||||
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
|
|
@ -1,3 +1,30 @@
|
|||
2008-07-11 Dan Nicolaescu <dann@ics.uci.edu>
|
||||
|
||||
* lisp.h:
|
||||
* w32heap.c:
|
||||
* emacs.c:
|
||||
* alloc.c: Replace all references of NO_UNION_TYPE with
|
||||
USE_LISP_UNION_TYPE.
|
||||
|
||||
* m/xtensa.h (NO_UNION_TYPE):
|
||||
* m/vax.h (NO_UNION_TYPE):
|
||||
* m/template.h (NO_UNION_TYPE):
|
||||
* m/sparc.h (NO_UNION_TYPE):
|
||||
* m/mips.h (NO_UNION_TYPE):
|
||||
* m/macppc.h (NO_UNION_TYPE):
|
||||
* m/m68k.h (NO_UNION_TYPE):
|
||||
* m/iris4d.h (NO_UNION_TYPE):
|
||||
* m/intel386.h (NO_UNION_TYPE):
|
||||
* m/ibms390x.h (NO_UNION_TYPE):
|
||||
* m/ibms390.h (NO_UNION_TYPE):
|
||||
* m/ibmrs6000.h (NO_UNION_TYPE):
|
||||
* m/ia64.h (NO_UNION_TYPE):
|
||||
* m/hp800.h (NO_UNION_TYPE):
|
||||
* m/arm.h (NO_UNION_TYPE):
|
||||
* m/amdx86-64.h (NO_UNION_TYPE):
|
||||
* m/alpha.h (NO_UNION_TYPE): Remove definition, all platform were
|
||||
defining it the same.
|
||||
|
||||
2008-07-10 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* xdisp.c (move_it_to): Backtrack if past the edge of a wrapped
|
||||
|
|
|
@ -1541,7 +1541,7 @@ mark_interval_tree (tree)
|
|||
} while (0)
|
||||
|
||||
|
||||
/* Number support. If NO_UNION_TYPE isn't in effect, we
|
||||
/* Number support. If USE_LISP_UNION_TYPE is in effect, we
|
||||
can't create number objects in macros. */
|
||||
#ifndef make_number
|
||||
Lisp_Object
|
||||
|
|
|
@ -98,7 +98,7 @@ int gdb_use_lsb = 1;
|
|||
#else
|
||||
int gdb_use_lsb = 0;
|
||||
#endif
|
||||
#ifdef NO_UNION_TYPE
|
||||
#ifndef USE_LISP_UNION_TYPE
|
||||
int gdb_use_union = 0;
|
||||
#else
|
||||
int gdb_use_union = 1;
|
||||
|
|
18
src/lisp.h
18
src/lisp.h
|
@ -129,8 +129,8 @@ extern void die P_((const char *, const char *, int)) NO_RETURN;
|
|||
|
||||
/***** Select the tagging scheme. *****/
|
||||
/* There are basically two options that control the tagging scheme:
|
||||
- NO_UNION_TYPE says that Lisp_Object should be an integer instead
|
||||
of a union.
|
||||
- USE_LISP_UNION_TYPE says that Lisp_Object should be a union instead
|
||||
of an integer.
|
||||
- USE_LSB_TAG means that we can assume the least 3 bits of pointers are
|
||||
always 0, and we can thus use them to hold tag bits, without
|
||||
restricting our addressing space.
|
||||
|
@ -163,7 +163,7 @@ extern void die P_((const char *, const char *, int)) NO_RETURN;
|
|||
/* We also need to be able to specify mult-of-8 alignment on static vars. */
|
||||
# if defined DECL_ALIGN
|
||||
/* We currently do not support USE_LSB_TAG with a union Lisp_Object. */
|
||||
# if defined NO_UNION_TYPE
|
||||
# if defined USE_LISP_UNION_TYPE
|
||||
# define USE_LSB_TAG
|
||||
# endif
|
||||
# endif
|
||||
|
@ -246,7 +246,7 @@ enum Lisp_Misc_Type
|
|||
#define VALBITS (BITS_PER_EMACS_INT - GCTYPEBITS)
|
||||
#endif
|
||||
|
||||
#ifndef NO_UNION_TYPE
|
||||
#ifdef USE_LISP_UNION_TYPE
|
||||
|
||||
#ifndef WORDS_BIG_ENDIAN
|
||||
|
||||
|
@ -310,13 +310,13 @@ LISP_MAKE_RVALUE (Lisp_Object o)
|
|||
#define LISP_MAKE_RVALUE(o) (o)
|
||||
#endif
|
||||
|
||||
#else /* NO_UNION_TYPE */
|
||||
#else /* USE_LISP_UNION_TYPE */
|
||||
|
||||
/* If union type is not wanted, define Lisp_Object as just a number. */
|
||||
|
||||
typedef EMACS_INT Lisp_Object;
|
||||
#define LISP_MAKE_RVALUE(o) (0+(o))
|
||||
#endif /* NO_UNION_TYPE */
|
||||
#endif /* USE_LISP_UNION_TYPE */
|
||||
|
||||
/* In the size word of a vector, this bit means the vector has been marked. */
|
||||
|
||||
|
@ -374,7 +374,7 @@ enum pvec_type
|
|||
For example, if tem is a Lisp_Object whose type is Lisp_Cons,
|
||||
XCONS (tem) is the struct Lisp_Cons * pointing to the memory for that cons. */
|
||||
|
||||
#ifdef NO_UNION_TYPE
|
||||
#ifndef USE_LISP_UNION_TYPE
|
||||
|
||||
/* Return a perfect hash of the Lisp_Object representation. */
|
||||
#define XHASH(a) (a)
|
||||
|
@ -440,7 +440,7 @@ enum pvec_type
|
|||
|
||||
#endif /* not USE_LSB_TAG */
|
||||
|
||||
#else /* not NO_UNION_TYPE */
|
||||
#else /* USE_LISP_UNION_TYPE */
|
||||
|
||||
#define XHASH(a) ((a).i)
|
||||
|
||||
|
@ -472,7 +472,7 @@ enum pvec_type
|
|||
extern Lisp_Object make_number P_ ((EMACS_INT));
|
||||
#endif
|
||||
|
||||
#endif /* NO_UNION_TYPE */
|
||||
#endif /* USE_LISP_UNION_TYPE */
|
||||
|
||||
#define EQ(x, y) (XHASH (x) == XHASH (y))
|
||||
|
||||
|
|
|
@ -51,15 +51,11 @@ NOTE-END
|
|||
/* __alpha defined automatically */
|
||||
|
||||
|
||||
/* Use type EMACS_INT rather than a union, to represent Lisp_Object */
|
||||
/* This is desirable for most machines. */
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
|
||||
the 24-bit bit field into an int. In other words, if bit fields
|
||||
are always unsigned.
|
||||
|
||||
If you use NO_UNION_TYPE, this flag does not matter. */
|
||||
This flag only matters if you use USE_LISP_UNION_TYPE. */
|
||||
|
||||
#define EXPLICIT_SIGN_EXTEND
|
||||
|
||||
|
|
|
@ -49,11 +49,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
orion, tahoe, APOLLO and many others */
|
||||
/* __x86_64 defined automatically. */
|
||||
|
||||
/* Use type int rather than a union, to represent Lisp_Object */
|
||||
/* This is desirable for most machines. */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* Define the type to use. */
|
||||
#define EMACS_INT long
|
||||
#define EMACS_UINT unsigned long
|
||||
|
@ -63,7 +58,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
the 24-bit bit field into an int. In other words, if bit fields
|
||||
are always unsigned.
|
||||
|
||||
If you use NO_UNION_TYPE, this flag does not matter. */
|
||||
This flag only matters if you use USE_LISP_UNION_TYPE. */
|
||||
|
||||
#define EXPLICIT_SIGN_EXTEND
|
||||
|
||||
|
|
|
@ -39,8 +39,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
|
||||
#define SIGN_EXTEND_CHAR(c) (((int)(c) << 24) >> 24)
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
#define NO_REMAP
|
||||
|
||||
/* arch-tag: 07856f0c-f0c8-4bd8-99af-0b7fa1e5ee42
|
||||
|
|
|
@ -32,16 +32,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
|
||||
#define NO_ARG_ARRAY
|
||||
|
||||
/* Use type int rather than a union, to represent Lisp_Object */
|
||||
/* This is desirable for most machines. */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
|
||||
the bit field into an int. In other words, if bit fields
|
||||
are always unsigned.
|
||||
|
||||
If you use NO_UNION_TYPE, this flag does not matter. */
|
||||
This flag only matters if you use USE_LISP_UNION_TYPE. */
|
||||
|
||||
#define EXPLICIT_SIGN_EXTEND
|
||||
|
||||
|
|
|
@ -39,11 +39,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
/* __ia64__ defined automatically */
|
||||
|
||||
|
||||
/* Use type EMACS_INT rather than a union, to represent Lisp_Object */
|
||||
/* This is desirable for most machines. */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* Define the type to use. */
|
||||
#define EMACS_INT long
|
||||
#define EMACS_UINT unsigned long
|
||||
|
@ -53,7 +48,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
the 24-bit bit field into an int. In other words, if bit fields
|
||||
are always unsigned.
|
||||
|
||||
If you use NO_UNION_TYPE, this flag does not matter. */
|
||||
This flag only matters if you use USE_LISP_UNION_TYPE. */
|
||||
|
||||
#define EXPLICIT_SIGN_EXTEND
|
||||
|
||||
|
|
|
@ -41,11 +41,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
|
||||
#define IBMR2AIX
|
||||
|
||||
/* Use type int rather than a union, to represent Lisp_Object */
|
||||
/* This is desirable for most machines. */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* Define CANNOT_DUMP on machines where unexec does not work.
|
||||
Then the function dump-emacs will not be defined
|
||||
and temacs will do (load "loadup") automatically unless told otherwise. */
|
||||
|
|
|
@ -32,16 +32,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
|
||||
#define NO_ARG_ARRAY
|
||||
|
||||
/* Use type int rather than a union, to represent Lisp_Object */
|
||||
/* This is desirable for most machines. */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
|
||||
the 24-bit bit field into an int. In other words, if bit fields
|
||||
are always unsigned.
|
||||
|
||||
If you use NO_UNION_TYPE, this flag does not matter. */
|
||||
This flag only matters if you use USE_LISP_UNION_TYPE. */
|
||||
|
||||
#define EXPLICIT_SIGN_EXTEND
|
||||
|
||||
|
|
|
@ -45,16 +45,6 @@ NOTE-END */
|
|||
|
||||
#define NO_ARG_ARRAY
|
||||
|
||||
/* Now define a symbol for the cpu type, if your compiler
|
||||
does not define it automatically:
|
||||
Ones defined so far include vax, m68000, ns16000, pyramid,
|
||||
orion, tahoe, APOLLO and many others */
|
||||
|
||||
/* Use type int rather than a union, to represent Lisp_Object */
|
||||
/* This is desirable for most machines. */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* Define the type to use. */
|
||||
#define EMACS_INT long
|
||||
#define EMACS_UINT unsigned long
|
||||
|
@ -64,7 +54,7 @@ NOTE-END */
|
|||
the 24-bit bit field into an int. In other words, if bit fields
|
||||
are always unsigned.
|
||||
|
||||
If you use NO_UNION_TYPE, this flag does not matter. */
|
||||
This flag only matters if you use USE_LISP_UNION_TYPE. */
|
||||
|
||||
#undef EXPLICIT_SIGN_EXTEND
|
||||
|
||||
|
|
|
@ -57,10 +57,6 @@ NOTE-END */
|
|||
|
||||
/* #define NO_ARG_ARRAY */
|
||||
|
||||
/* Use type int rather than a union, to represent Lisp_Object */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* crt0.c, if it is used, should use the i386-bsd style of entry.
|
||||
with no extra dummy args. On USG and XENIX,
|
||||
NO_REMAP says this isn't used. */
|
||||
|
|
|
@ -41,16 +41,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
#define IRIS_4D
|
||||
#endif
|
||||
|
||||
/* Use type int rather than a union, to represent Lisp_Object */
|
||||
/* This is desirable for most machines. */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
|
||||
the bit field into an int. In other words, if bit fields
|
||||
are always unsigned.
|
||||
|
||||
If you use NO_UNION_TYPE, this flag does not matter. */
|
||||
This flag only matters if you use USE_LISP_UNION_TYPE. */
|
||||
|
||||
#define EXPLICIT_SIGN_EXTEND
|
||||
|
||||
|
|
|
@ -39,16 +39,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
#define m68k
|
||||
#endif
|
||||
|
||||
/* Use type int rather than a union, to represent Lisp_Object */
|
||||
/* This is desirable for most machines. */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
|
||||
the 24-bit bit field into an int. In other words, if bit fields
|
||||
are always unsigned.
|
||||
|
||||
If you use NO_UNION_TYPE, this flag does not matter. */
|
||||
This flag only matters if you use USE_LISP_UNION_TYPE. */
|
||||
|
||||
#define EXPLICIT_SIGN_EXTEND
|
||||
|
||||
|
|
|
@ -32,11 +32,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
Ones defined so far include vax, m68000, ns16000, pyramid,
|
||||
orion, tahoe, APOLLO and many others */
|
||||
|
||||
/* Use type EMACS_INT rather than a union, to represent Lisp_Object */
|
||||
/* This is desirable for most machines. */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* Data type of load average, as read out of kmem. */
|
||||
|
||||
#define LOAD_AVE_TYPE long
|
||||
|
|
|
@ -52,16 +52,11 @@ NOTE-END */
|
|||
# define mips
|
||||
#endif
|
||||
|
||||
/* Use type int rather than a union, to represent Lisp_Object */
|
||||
/* This is desirable for most machines. */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
|
||||
the 24-bit bit field into an int. In other words, if bit fields
|
||||
are always unsigned.
|
||||
|
||||
If you use NO_UNION_TYPE, this flag does not matter. */
|
||||
This flag only matters if you use USE_LISP_UNION_TYPE. */
|
||||
|
||||
#define EXPLICIT_SIGN_EXTEND
|
||||
|
||||
|
|
|
@ -38,11 +38,8 @@ NOTE-END */
|
|||
|
||||
/* __sparc__ is defined by the compiler by default. */
|
||||
|
||||
/* Use type int rather than a union, to represent Lisp_Object */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* XINT must explicitly sign-extend */
|
||||
/* XINT must explicitly sign-extend
|
||||
This flag only matters if you use USE_LISP_UNION_TYPE. */
|
||||
|
||||
#define EXPLICIT_SIGN_EXTEND
|
||||
|
||||
|
|
|
@ -36,16 +36,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
does not define it automatically.
|
||||
Ones defined so far include m68k and many others */
|
||||
|
||||
/* Use type int rather than a union, to represent Lisp_Object */
|
||||
/* This is desirable for most machines. */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
|
||||
the 24-bit bit field into an int. In other words, if bit fields
|
||||
are always unsigned.
|
||||
|
||||
If you use NO_UNION_TYPE, this flag does not matter. */
|
||||
This flag only matters if you use USE_LISP_UNION_TYPE. */
|
||||
|
||||
#define EXPLICIT_SIGN_EXTEND
|
||||
|
||||
|
|
|
@ -57,10 +57,6 @@ NOTE-END */
|
|||
|
||||
/* #define vax -- appears to be done automatically */
|
||||
|
||||
/* Use type int rather than a union, to represent Lisp_Object */
|
||||
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
/* crt0.c should use the vax-bsd style of entry, with no dummy args. */
|
||||
|
||||
#define CRT0_DUMMIES
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
Add a license notice if this grows to > 10 lines of code. */
|
||||
|
||||
#define NO_ARG_ARRAY
|
||||
#define NO_UNION_TYPE
|
||||
|
||||
#ifdef __LITTLE_ENDIAN
|
||||
#undef WORDS_BIG_ENDIAN
|
||||
|
|
|
@ -240,7 +240,7 @@ init_heap ()
|
|||
exit (1);
|
||||
}
|
||||
|
||||
#if defined (NO_UNION_TYPE) && !defined (USE_LSB_TAG)
|
||||
#if !defined (USE_LISP_UNION_TYPE) && !defined (USE_LSB_TAG)
|
||||
/* Ensure that the addresses don't use the upper tag bits since
|
||||
the Lisp type goes there. */
|
||||
if (((unsigned long) data_region_base & ~VALMASK) != 0)
|
||||
|
|
Loading…
Add table
Reference in a new issue