]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/eval.c (backtrace_p, backtrace_top, backtrace_next): Export them to
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 3 Jun 2013 15:18:18 +0000 (11:18 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 3 Jun 2013 15:18:18 +0000 (11:18 -0400)
.gdbinit.
* src/data.c (pure_write_error): Add `object' argument.
* src/puresize.h (CHECK_IMPURE): Use it.
* src/keyboard.c (safe_run_hooks_error): Improve error message.

src/ChangeLog
src/data.c
src/eval.c
src/keyboard.c
src/puresize.h

index fce07f9db1acceef6bfc2fef54e58ff7405c8a9e..2b719b068ae9532cbe24f8421dadd088b92cc612 100644 (file)
@@ -1,3 +1,13 @@
+2013-06-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * eval.c (backtrace_p, backtrace_top, backtrace_next): Export them to
+       .gdbinit.
+
+       * keyboard.c (safe_run_hooks_error): Improve error message.
+
+       * data.c (pure_write_error): Add `object' argument.
+       * puresize.h (CHECK_IMPURE): Use it.
+
 2013-06-03  Michael Albinus  <michael.albinus@gmx.de>
 
        * Makefile.in (NOTIFY_OBJ): New variable.
index b33d9656d570b24d9609ec4809e74cfccbdc8302..fc66cea6497468206ad57571682f59625041b56e 100644 (file)
@@ -100,9 +100,10 @@ wrong_type_argument (register Lisp_Object predicate, register Lisp_Object value)
 }
 
 void
-pure_write_error (void)
+pure_write_error (Lisp_Object obj)
 {
-  error ("Attempt to modify read-only object");
+  Fsignal (Qerror, Fcons (build_string ("Attempt to modify read-only object"),
+                          Fcons (obj, Qnil)));
 }
 
 void
index fac71e34a22f036ad69129141535a19030cb5a8e..d6236b6edf255617e4990895b094a2a70ad277c2 100644 (file)
@@ -128,16 +128,18 @@ void set_backtrace_debug_on_exit (struct specbinding *pdl, bool doe)
 
 /* Helper functions to scan the backtrace.  */
 
-LISP_INLINE bool backtrace_p (struct specbinding *pdl)
+EXTERN_INLINE bool backtrace_p (struct specbinding *pdl)
 { return pdl >= specpdl; }
-LISP_INLINE struct specbinding *backtrace_top (void)
+
+EXTERN_INLINE struct specbinding *backtrace_top (void)
 {
   struct specbinding *pdl = specpdl_ptr - 1;
-  while (backtrace_p (pdl) && pdl->kind != SPECPDL_BACKTRACE)     \
+  while (backtrace_p (pdl) && pdl->kind != SPECPDL_BACKTRACE)
     pdl--;
   return pdl;
 }
-LISP_INLINE struct specbinding *backtrace_next (struct specbinding *pdl)
+
+EXTERN_INLINE struct specbinding *backtrace_next (struct specbinding *pdl)
 {
   pdl--;
   while (backtrace_p (pdl) && pdl->kind != SPECPDL_BACKTRACE)
index a243b95470abf9c9b5c4aae034ed4437848b97fb..8dd109d252d68c0c378e9f99ec426dfd390e3c13 100644 (file)
@@ -1882,7 +1882,7 @@ safe_run_hooks_error (Lisp_Object error_data)
     = CONSP (Vinhibit_quit) ? XCAR (Vinhibit_quit) : Vinhibit_quit;
   Lisp_Object fun = CONSP (Vinhibit_quit) ? XCDR (Vinhibit_quit) : Qnil;
   Lisp_Object args[4];
-  args[0] = build_string ("Error in %s (%s): %S");
+  args[0] = build_string ("Error in %s (%S): %S");
   args[1] = hook;
   args[2] = fun;
   args[3] = error_data;
index 2f717571c7c7c079730e9a1c202e8bfaaba8ecc8..25a11aafbcc9959c70a31e90e0d720a45817ad43 100644 (file)
@@ -73,9 +73,9 @@ 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 _Noreturn void pure_write_error (void);
+extern _Noreturn void pure_write_error (Lisp_Object);
 \f
 /* Define PURE_P.  */