]> git.eshelyaron.com Git - emacs.git/commitdiff
(ASET): Check bounds.
authorStefan Monnier <monnier@iro.umontreal.ca>
Sun, 10 Feb 2008 03:20:40 +0000 (03:20 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sun, 10 Feb 2008 03:20:40 +0000 (03:20 +0000)
src/ChangeLog
src/lisp.h

index afc6603da5ecd2fbe022e3af538dcc31e30dda94..b3ffe08f3bafb9367ecb7f5e865de34dcbf20bf5 100644 (file)
@@ -1,3 +1,7 @@
+2008-02-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp.h (ASET): Check bounds.
+
 2008-02-10  Glenn Morris  <rgm@gnu.org>
 
        * buffer.c (mode-name): Doc fix.
index 5156386551ade8329473d5805e6b13a3899ad609..daa45d3aad8da739a48377ee1bd89db9b3416234 100644 (file)
@@ -589,8 +589,12 @@ extern size_t pure_size;
 /* Convenience macros for dealing with Lisp arrays.  */
 
 #define AREF(ARRAY, IDX)       XVECTOR ((ARRAY))->contents[IDX]
-#define ASET(ARRAY, IDX, VAL)  (AREF ((ARRAY), (IDX)) = (VAL))
 #define ASIZE(ARRAY)           XVECTOR ((ARRAY))->size
+/* The IDX==IDX tries to detect when the macro argument is side-effecting.  */
+#define ASET(ARRAY, IDX, VAL)  \
+  (eassert ((IDX) == (IDX)),                           \
+   eassert ((IDX) >= 0 && (IDX) < ASIZE (ARRAY)),      \
+   ASLOT ((ARRAY), (IDX)) = (VAL))
 
 /* Convenience macros for dealing with Lisp strings.  */