diff options
| author | Dmitry Antipov | 2014-07-14 08:44:01 +0400 |
|---|---|---|
| committer | Dmitry Antipov | 2014-07-14 08:44:01 +0400 |
| commit | 201b685783301c9acfda413d1860763f0e941601 (patch) | |
| tree | c16759bbe8c1e4a6ddea7f783e55c0710f00f0a5 /src | |
| parent | a705278de7c661af9b78d956af25e13055cba864 (diff) | |
| download | emacs-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/ChangeLog | 9 | ||||
| -rw-r--r-- | src/fns.c | 14 | ||||
| -rw-r--r-- | src/fringe.c | 8 | ||||
| -rw-r--r-- | src/keymap.c | 8 | ||||
| -rw-r--r-- | src/lisp.h | 9 | ||||
| -rw-r--r-- | src/macros.c | 26 |
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 @@ | |||
| 1 | 2014-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 | |||
| 1 | 2014-07-13 Paul Eggert <eggert@cs.ucla.edu> | 10 | 2014-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'. |
| @@ -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 | } |
| 2558 | INLINE void | 2558 | /* This is a bit special because we always need size afterwards. */ |
| 2559 | INLINE ptrdiff_t | ||
| 2559 | CHECK_VECTOR_OR_STRING (Lisp_Object x) | 2560 | CHECK_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 | } |
| 2563 | INLINE void | 2568 | INLINE void |
| 2564 | CHECK_ARRAY (Lisp_Object x, Lisp_Object predicate) | 2569 | CHECK_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 | ¤t_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 | ¤t_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)); |