]> code.delx.au - gnu-emacs/blobdiff - src/puresize.h
Merge from origin/emacs-24
[gnu-emacs] / src / puresize.h
index 25e7eab66c7af8b1f2f88323083d4bef2f904063..b72fb6c03f98ccd626ea806a6caeff690011ca33 100644 (file)
@@ -1,6 +1,5 @@
 /* How much read-only Lisp storage a dumped Emacs needs.
-   Copyright (C) 1993, 2001, 2002, 2003, 2004, 2005,
-                 2006, 2007, 2008, 2009, 2010, 2011, 2012  Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -41,13 +40,17 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #endif
 
 #ifndef BASE_PURESIZE
-#define BASE_PURESIZE (1620000 + SYSTEM_PURESIZE_EXTRA + SITELOAD_PURESIZE_EXTRA)
+#define BASE_PURESIZE (1800000 + SYSTEM_PURESIZE_EXTRA + SITELOAD_PURESIZE_EXTRA)
 #endif
 
 /* Increase BASE_PURESIZE by a ratio depending on the machine's word size.  */
 #ifndef PURESIZE_RATIO
-#if BITS_PER_EMACS_INT > 32
-#define PURESIZE_RATIO 10/6    /* Don't surround with `()'. */
+#if EMACS_INT_MAX >> 31 != 0
+#if PTRDIFF_MAX >> 31 != 0
+#define PURESIZE_RATIO 10 / 6  /* Don't surround with `()'.  */
+#else
+#define PURESIZE_RATIO 8 / 6   /* Don't surround with `()'.  */
+#endif
 #else
 #define PURESIZE_RATIO 1
 #endif
@@ -57,7 +60,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 /* ENABLE_CHECKING somehow increases the purespace used, probably because
    it tends to cause some macro arguments to be evaluated twice.  This is
    a bug, but it's difficult to track it down.  */
-#define PURESIZE_CHECKING_RATIO 12/10  /* Don't surround with `()'. */
+#define PURESIZE_CHECKING_RATIO 12 / 10        /* Don't surround with `()'.  */
 #else
 #define PURESIZE_CHECKING_RATIO 1
 #endif
@@ -70,40 +73,13 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 /* Signal an error if OBJ is pure.  */
 #define CHECK_IMPURE(obj) \
   { if (PURE_P (obj))    \
-      pure_write_error (); }
+      pure_write_error (obj); }
 
-extern void pure_write_error P_ ((void)) NO_RETURN;
+extern _Noreturn void pure_write_error (Lisp_Object);
 \f
 /* Define PURE_P.  */
 
-#ifdef VIRT_ADDR_VARIES
-/* For machines where text and data can go anywhere
-   in virtual memory.  */
-
 extern EMACS_INT pure[];
 
 #define PURE_P(obj) \
- ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + PURESIZE) \
-  && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure)
-
-#else /* not VIRT_ADDR_VARIES */
-#ifdef PNTR_COMPARISON_TYPE
-/* When PNTR_COMPARISON_TYPE is not the default (unsigned int).  */
-
-extern char my_edata[];
-
-#define PURE_P(obj) \
-  ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) my_edata)
-
-#else /* not VIRT_ADDRESS_VARIES, not PNTR_COMPARISON_TYPE */
-
-extern char my_edata[];
-
-#define PURE_P(obj) \
-  (XPNTR (obj) < (unsigned int) my_edata)
-
-#endif /* PNTR_COMPARISON_TYPE */
-#endif /* VIRT_ADDRESS_VARIES */
-
-/* arch-tag: fd9b0a91-a70e-4729-a75a-6bb4ca1ce14f
-   (do not change this comment) */
+  ((uintptr_t) XPNTR (obj) - (uintptr_t) pure <= PURESIZE)