aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDmitry Antipov2014-07-14 08:44:01 +0400
committerDmitry Antipov2014-07-14 08:44:01 +0400
commit201b685783301c9acfda413d1860763f0e941601 (patch)
treec16759bbe8c1e4a6ddea7f783e55c0710f00f0a5 /src
parenta705278de7c661af9b78d956af25e13055cba864 (diff)
downloademacs-201b685783301c9acfda413d1860763f0e941601.tar.gz
emacs-201b685783301c9acfda413d1860763f0e941601.zip
* lisp.h (CHECK_VECTOR_OR_STRING): Return number of elements
or characters in string, respectively. Add comment. * fringe.c (Fdefine_fringe_bitmap): * fns.c (Fsubstring, substring_both): Use it. * keymap.c (Fdefine_key, Flookup_key): * macros.c (Fstart_kbd_macro): Likewise. Avoid call to Flength.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog9
-rw-r--r--src/fns.c14
-rw-r--r--src/fringe.c8
-rw-r--r--src/keymap.c8
-rw-r--r--src/lisp.h9
-rw-r--r--src/macros.c26
6 files changed, 32 insertions, 42 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 877898443ec..9fb23b2d825 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,12 @@
12014-07-14 Dmitry Antipov <dmantipov@yandex.ru>
2
3 * lisp.h (CHECK_VECTOR_OR_STRING): Return number of elements
4 or characters in string, respectively. Add comment.
5 * fringe.c (Fdefine_fringe_bitmap):
6 * fns.c (Fsubstring, substring_both): Use it.
7 * keymap.c (Fdefine_key, Flookup_key):
8 * macros.c (Fstart_kbd_macro): Likewise. Avoid call to Flength.
9
12014-07-13 Paul Eggert <eggert@cs.ucla.edu> 102014-07-13 Paul Eggert <eggert@cs.ucla.edu>
2 11
3 Improve behavior of 'bzr up; cd src; make -k'. 12 Improve behavior of 'bzr up; cd src; make -k'.
diff --git a/src/fns.c b/src/fns.c
index 887a856f224..79967116a11 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -1151,13 +1151,7 @@ With one argument, just copy STRING (with properties, if any). */)
1151 Lisp_Object res; 1151 Lisp_Object res;
1152 ptrdiff_t size, ifrom, ito; 1152 ptrdiff_t size, ifrom, ito;
1153 1153
1154 if (STRINGP (string)) 1154 size = CHECK_VECTOR_OR_STRING (string);
1155 size = SCHARS (string);
1156 else if (VECTORP (string))
1157 size = ASIZE (string);
1158 else
1159 wrong_type_argument (Qarrayp, string);
1160
1161 validate_subarray (string, from, to, size, &ifrom, &ito); 1155 validate_subarray (string, from, to, size, &ifrom, &ito);
1162 1156
1163 if (STRINGP (string)) 1157 if (STRINGP (string))
@@ -1212,11 +1206,7 @@ substring_both (Lisp_Object string, ptrdiff_t from, ptrdiff_t from_byte,
1212 ptrdiff_t to, ptrdiff_t to_byte) 1206 ptrdiff_t to, ptrdiff_t to_byte)
1213{ 1207{
1214 Lisp_Object res; 1208 Lisp_Object res;
1215 ptrdiff_t size; 1209 ptrdiff_t size = CHECK_VECTOR_OR_STRING (string);
1216
1217 CHECK_VECTOR_OR_STRING (string);
1218
1219 size = STRINGP (string) ? SCHARS (string) : ASIZE (string);
1220 1210
1221 if (!(0 <= from && from <= to && to <= size)) 1211 if (!(0 <= from && from <= to && to <= size))
1222 args_out_of_range_3 (string, make_number (from), make_number (to)); 1212 args_out_of_range_3 (string, make_number (from), make_number (to));
diff --git a/src/fringe.c b/src/fringe.c
index d00aee0e0b6..54f880dc624 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -1571,13 +1571,7 @@ If BITMAP already exists, the existing definition is replaced. */)
1571 int fill1 = 0, fill2 = 0; 1571 int fill1 = 0, fill2 = 0;
1572 1572
1573 CHECK_SYMBOL (bitmap); 1573 CHECK_SYMBOL (bitmap);
1574 1574 h = CHECK_VECTOR_OR_STRING (bits);
1575 if (STRINGP (bits))
1576 h = SCHARS (bits);
1577 else if (VECTORP (bits))
1578 h = ASIZE (bits);
1579 else
1580 wrong_type_argument (Qsequencep, bits);
1581 1575
1582 if (NILP (height)) 1576 if (NILP (height))
1583 fb.height = h; 1577 fb.height = h;
diff --git a/src/keymap.c b/src/keymap.c
index 76119606643..f4dd644aebd 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -1092,9 +1092,7 @@ binding KEY to DEF is added at the front of KEYMAP. */)
1092 GCPRO3 (keymap, key, def); 1092 GCPRO3 (keymap, key, def);
1093 keymap = get_keymap (keymap, 1, 1); 1093 keymap = get_keymap (keymap, 1, 1);
1094 1094
1095 CHECK_VECTOR_OR_STRING (key); 1095 length = CHECK_VECTOR_OR_STRING (key);
1096
1097 length = XFASTINT (Flength (key));
1098 if (length == 0) 1096 if (length == 0)
1099 RETURN_UNGCPRO (Qnil); 1097 RETURN_UNGCPRO (Qnil);
1100 1098
@@ -1248,9 +1246,7 @@ recognize the default bindings, just as `read-key-sequence' does. */)
1248 GCPRO2 (keymap, key); 1246 GCPRO2 (keymap, key);
1249 keymap = get_keymap (keymap, 1, 1); 1247 keymap = get_keymap (keymap, 1, 1);
1250 1248
1251 CHECK_VECTOR_OR_STRING (key); 1249 length = CHECK_VECTOR_OR_STRING (key);
1252
1253 length = XFASTINT (Flength (key));
1254 if (length == 0) 1250 if (length == 0)
1255 RETURN_UNGCPRO (keymap); 1251 RETURN_UNGCPRO (keymap);
1256 1252
diff --git a/src/lisp.h b/src/lisp.h
index 1c5bb14aafe..85110677693 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -2555,10 +2555,15 @@ CHECK_BOOL_VECTOR (Lisp_Object x)
2555{ 2555{
2556 CHECK_TYPE (BOOL_VECTOR_P (x), Qbool_vector_p, x); 2556 CHECK_TYPE (BOOL_VECTOR_P (x), Qbool_vector_p, x);
2557} 2557}
2558INLINE void 2558/* This is a bit special because we always need size afterwards. */
2559INLINE ptrdiff_t
2559CHECK_VECTOR_OR_STRING (Lisp_Object x) 2560CHECK_VECTOR_OR_STRING (Lisp_Object x)
2560{ 2561{
2561 CHECK_TYPE (VECTORP (x) || STRINGP (x), Qarrayp, x); 2562 if (VECTORP (x))
2563 return ASIZE (x);
2564 if (STRINGP (x))
2565 return SCHARS (x);
2566 wrong_type_argument (Qarrayp, x);
2562} 2567}
2563INLINE void 2568INLINE void
2564CHECK_ARRAY (Lisp_Object x, Lisp_Object predicate) 2569CHECK_ARRAY (Lisp_Object x, Lisp_Object predicate)
diff --git a/src/macros.c b/src/macros.c
index acba125edc5..c73986abd34 100644
--- a/src/macros.c
+++ b/src/macros.c
@@ -80,28 +80,24 @@ macro before appending to it. */)
80 } 80 }
81 else 81 else
82 { 82 {
83 ptrdiff_t i; 83 const ptrdiff_t incr = 30;
84 EMACS_INT len; 84 ptrdiff_t i, len;
85 bool cvt; 85 bool cvt;
86 86
87 /* Check the type of last-kbd-macro in case Lisp code changed it. */ 87 /* Check the type of last-kbd-macro in case Lisp code changed it. */
88 CHECK_VECTOR_OR_STRING (KVAR (current_kboard, Vlast_kbd_macro)); 88 len = CHECK_VECTOR_OR_STRING (KVAR (current_kboard, Vlast_kbd_macro));
89 89
90 len = XINT (Flength (KVAR (current_kboard, Vlast_kbd_macro))); 90 if (INT_ADD_OVERFLOW (len, incr))
91 memory_full (SIZE_MAX);
91 92
92 /* Copy last-kbd-macro into the buffer, in case the Lisp code 93 /* Copy last-kbd-macro into the buffer, in case the Lisp code
93 has put another macro there. */ 94 has put another macro there. */
94 if (current_kboard->kbd_macro_bufsize < len + 30) 95 if (current_kboard->kbd_macro_bufsize < len + incr)
95 { 96 current_kboard->kbd_macro_buffer =
96 if (PTRDIFF_MAX < MOST_POSITIVE_FIXNUM + 30 97 xpalloc (current_kboard->kbd_macro_buffer,
97 && PTRDIFF_MAX < len + 30) 98 &current_kboard->kbd_macro_bufsize,
98 memory_full (SIZE_MAX); 99 len + incr - current_kboard->kbd_macro_bufsize, -1,
99 current_kboard->kbd_macro_buffer = 100 sizeof *current_kboard->kbd_macro_buffer);
100 xpalloc (current_kboard->kbd_macro_buffer,
101 &current_kboard->kbd_macro_bufsize,
102 len + 30 - current_kboard->kbd_macro_bufsize, -1,
103 sizeof *current_kboard->kbd_macro_buffer);
104 }
105 101
106 /* Must convert meta modifier when copying string to vector. */ 102 /* Must convert meta modifier when copying string to vector. */
107 cvt = STRINGP (KVAR (current_kboard, Vlast_kbd_macro)); 103 cvt = STRINGP (KVAR (current_kboard, Vlast_kbd_macro));