diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 8 | ||||
| -rw-r--r-- | src/buffer.c | 85 | ||||
| -rw-r--r-- | src/buffer.h | 7 | ||||
| -rw-r--r-- | src/data.c | 10 | ||||
| -rw-r--r-- | src/fileio.c | 10 | ||||
| -rw-r--r-- | src/marker.c | 17 |
6 files changed, 29 insertions, 108 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 3ce27b1ce19..0a0b0934968 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -7,6 +7,14 @@ | |||
| 7 | * lisp.h (egetenv): ... because of a new inline function used to | 7 | * lisp.h (egetenv): ... because of a new inline function used to |
| 8 | avoid calls to strlen for a compile-time constants. | 8 | avoid calls to strlen for a compile-time constants. |
| 9 | 9 | ||
| 10 | * buffer.h (decode_buffer): New function. | ||
| 11 | * buffer.c (Fbuffer_name, Fbuffer_file_name, Fbuffer_base_buffer) | ||
| 12 | (Fbuffer_local_variables, Fbuffer_modified_p, Fbuffer_modified_tick) | ||
| 13 | (Fbuffer_chars_modified_tick, Fdelete_all_overlays): | ||
| 14 | * data.c (Flocal_variables_p): | ||
| 15 | * fileio.c (Fverify_visited_file_modtime): | ||
| 16 | * marker.c (live_buffer): Use it. | ||
| 17 | |||
| 10 | 2014-09-01 Dmitry Antipov <dmantipov@yandex.ru> | 18 | 2014-09-01 Dmitry Antipov <dmantipov@yandex.ru> |
| 11 | 19 | ||
| 12 | Avoid extra calls to strlen in filesystem I/O routines. | 20 | Avoid extra calls to strlen in filesystem I/O routines. |
diff --git a/src/buffer.c b/src/buffer.c index d2c7729d1c2..ee1359611c3 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
| @@ -1134,10 +1134,7 @@ BUFFER defaults to the current buffer. | |||
| 1134 | Return nil if BUFFER has been killed. */) | 1134 | Return nil if BUFFER has been killed. */) |
| 1135 | (register Lisp_Object buffer) | 1135 | (register Lisp_Object buffer) |
| 1136 | { | 1136 | { |
| 1137 | if (NILP (buffer)) | 1137 | return BVAR (decode_buffer (buffer), name); |
| 1138 | return BVAR (current_buffer, name); | ||
| 1139 | CHECK_BUFFER (buffer); | ||
| 1140 | return BVAR (XBUFFER (buffer), name); | ||
| 1141 | } | 1138 | } |
| 1142 | 1139 | ||
| 1143 | DEFUN ("buffer-file-name", Fbuffer_file_name, Sbuffer_file_name, 0, 1, 0, | 1140 | DEFUN ("buffer-file-name", Fbuffer_file_name, Sbuffer_file_name, 0, 1, 0, |
| @@ -1145,10 +1142,7 @@ DEFUN ("buffer-file-name", Fbuffer_file_name, Sbuffer_file_name, 0, 1, 0, | |||
| 1145 | No argument or nil as argument means use the current buffer. */) | 1142 | No argument or nil as argument means use the current buffer. */) |
| 1146 | (register Lisp_Object buffer) | 1143 | (register Lisp_Object buffer) |
| 1147 | { | 1144 | { |
| 1148 | if (NILP (buffer)) | 1145 | return BVAR (decode_buffer (buffer), filename); |
| 1149 | return BVAR (current_buffer, filename); | ||
| 1150 | CHECK_BUFFER (buffer); | ||
| 1151 | return BVAR (XBUFFER (buffer), filename); | ||
| 1152 | } | 1146 | } |
| 1153 | 1147 | ||
| 1154 | DEFUN ("buffer-base-buffer", Fbuffer_base_buffer, Sbuffer_base_buffer, | 1148 | DEFUN ("buffer-base-buffer", Fbuffer_base_buffer, Sbuffer_base_buffer, |
| @@ -1158,21 +1152,8 @@ If BUFFER is not indirect, return nil. | |||
| 1158 | BUFFER defaults to the current buffer. */) | 1152 | BUFFER defaults to the current buffer. */) |
| 1159 | (register Lisp_Object buffer) | 1153 | (register Lisp_Object buffer) |
| 1160 | { | 1154 | { |
| 1161 | struct buffer *base; | 1155 | struct buffer *base = decode_buffer (buffer)->base_buffer; |
| 1162 | Lisp_Object base_buffer; | 1156 | return base ? (XSETBUFFER (buffer, base), buffer) : Qnil; |
| 1163 | |||
| 1164 | if (NILP (buffer)) | ||
| 1165 | base = current_buffer->base_buffer; | ||
| 1166 | else | ||
| 1167 | { | ||
| 1168 | CHECK_BUFFER (buffer); | ||
| 1169 | base = XBUFFER (buffer)->base_buffer; | ||
| 1170 | } | ||
| 1171 | |||
| 1172 | if (! base) | ||
| 1173 | return Qnil; | ||
| 1174 | XSETBUFFER (base_buffer, base); | ||
| 1175 | return base_buffer; | ||
| 1176 | } | 1157 | } |
| 1177 | 1158 | ||
| 1178 | DEFUN ("buffer-local-value", Fbuffer_local_value, | 1159 | DEFUN ("buffer-local-value", Fbuffer_local_value, |
| @@ -1297,18 +1278,8 @@ Note that storing new VALUEs in these elements doesn't change the variables. | |||
| 1297 | No argument or nil as argument means use current buffer as BUFFER. */) | 1278 | No argument or nil as argument means use current buffer as BUFFER. */) |
| 1298 | (register Lisp_Object buffer) | 1279 | (register Lisp_Object buffer) |
| 1299 | { | 1280 | { |
| 1300 | register struct buffer *buf; | 1281 | register struct buffer *buf = decode_buffer (buffer); |
| 1301 | register Lisp_Object result; | 1282 | register Lisp_Object result = buffer_lisp_local_variables (buf, 0); |
| 1302 | |||
| 1303 | if (NILP (buffer)) | ||
| 1304 | buf = current_buffer; | ||
| 1305 | else | ||
| 1306 | { | ||
| 1307 | CHECK_BUFFER (buffer); | ||
| 1308 | buf = XBUFFER (buffer); | ||
| 1309 | } | ||
| 1310 | |||
| 1311 | result = buffer_lisp_local_variables (buf, 0); | ||
| 1312 | 1283 | ||
| 1313 | /* Add on all the variables stored in special slots. */ | 1284 | /* Add on all the variables stored in special slots. */ |
| 1314 | { | 1285 | { |
| @@ -1337,15 +1308,7 @@ DEFUN ("buffer-modified-p", Fbuffer_modified_p, Sbuffer_modified_p, | |||
| 1337 | No argument or nil as argument means use current buffer as BUFFER. */) | 1308 | No argument or nil as argument means use current buffer as BUFFER. */) |
| 1338 | (register Lisp_Object buffer) | 1309 | (register Lisp_Object buffer) |
| 1339 | { | 1310 | { |
| 1340 | register struct buffer *buf; | 1311 | register struct buffer *buf = decode_buffer (buffer); |
| 1341 | if (NILP (buffer)) | ||
| 1342 | buf = current_buffer; | ||
| 1343 | else | ||
| 1344 | { | ||
| 1345 | CHECK_BUFFER (buffer); | ||
| 1346 | buf = XBUFFER (buffer); | ||
| 1347 | } | ||
| 1348 | |||
| 1349 | return BUF_SAVE_MODIFF (buf) < BUF_MODIFF (buf) ? Qt : Qnil; | 1312 | return BUF_SAVE_MODIFF (buf) < BUF_MODIFF (buf) ? Qt : Qnil; |
| 1350 | } | 1313 | } |
| 1351 | 1314 | ||
| @@ -1451,16 +1414,7 @@ text in that buffer is changed. It wraps around occasionally. | |||
| 1451 | No argument or nil as argument means use current buffer as BUFFER. */) | 1414 | No argument or nil as argument means use current buffer as BUFFER. */) |
| 1452 | (register Lisp_Object buffer) | 1415 | (register Lisp_Object buffer) |
| 1453 | { | 1416 | { |
| 1454 | register struct buffer *buf; | 1417 | return make_number (BUF_MODIFF (decode_buffer (buffer))); |
| 1455 | if (NILP (buffer)) | ||
| 1456 | buf = current_buffer; | ||
| 1457 | else | ||
| 1458 | { | ||
| 1459 | CHECK_BUFFER (buffer); | ||
| 1460 | buf = XBUFFER (buffer); | ||
| 1461 | } | ||
| 1462 | |||
| 1463 | return make_number (BUF_MODIFF (buf)); | ||
| 1464 | } | 1418 | } |
| 1465 | 1419 | ||
| 1466 | DEFUN ("buffer-chars-modified-tick", Fbuffer_chars_modified_tick, | 1420 | DEFUN ("buffer-chars-modified-tick", Fbuffer_chars_modified_tick, |
| @@ -1475,16 +1429,7 @@ between these calls. No argument or nil as argument means use current | |||
| 1475 | buffer as BUFFER. */) | 1429 | buffer as BUFFER. */) |
| 1476 | (register Lisp_Object buffer) | 1430 | (register Lisp_Object buffer) |
| 1477 | { | 1431 | { |
| 1478 | register struct buffer *buf; | 1432 | return make_number (BUF_CHARS_MODIFF (decode_buffer (buffer))); |
| 1479 | if (NILP (buffer)) | ||
| 1480 | buf = current_buffer; | ||
| 1481 | else | ||
| 1482 | { | ||
| 1483 | CHECK_BUFFER (buffer); | ||
| 1484 | buf = XBUFFER (buffer); | ||
| 1485 | } | ||
| 1486 | |||
| 1487 | return make_number (BUF_CHARS_MODIFF (buf)); | ||
| 1488 | } | 1433 | } |
| 1489 | 1434 | ||
| 1490 | DEFUN ("rename-buffer", Frename_buffer, Srename_buffer, 1, 2, | 1435 | DEFUN ("rename-buffer", Frename_buffer, Srename_buffer, 1, 2, |
| @@ -4137,17 +4082,7 @@ BUFFER omitted or nil means delete all overlays of the current | |||
| 4137 | buffer. */) | 4082 | buffer. */) |
| 4138 | (Lisp_Object buffer) | 4083 | (Lisp_Object buffer) |
| 4139 | { | 4084 | { |
| 4140 | register struct buffer *buf; | 4085 | delete_all_overlays (decode_buffer (buffer)); |
| 4141 | |||
| 4142 | if (NILP (buffer)) | ||
| 4143 | buf = current_buffer; | ||
| 4144 | else | ||
| 4145 | { | ||
| 4146 | CHECK_BUFFER (buffer); | ||
| 4147 | buf = XBUFFER (buffer); | ||
| 4148 | } | ||
| 4149 | |||
| 4150 | delete_all_overlays (buf); | ||
| 4151 | return Qnil; | 4086 | return Qnil; |
| 4152 | } | 4087 | } |
| 4153 | 4088 | ||
diff --git a/src/buffer.h b/src/buffer.h index fd989925976..7511a5aab1e 100644 --- a/src/buffer.h +++ b/src/buffer.h | |||
| @@ -1088,6 +1088,13 @@ extern void mmap_set_vars (bool); | |||
| 1088 | extern void restore_buffer (Lisp_Object); | 1088 | extern void restore_buffer (Lisp_Object); |
| 1089 | extern void set_buffer_if_live (Lisp_Object); | 1089 | extern void set_buffer_if_live (Lisp_Object); |
| 1090 | 1090 | ||
| 1091 | INLINE | ||
| 1092 | struct buffer * | ||
| 1093 | decode_buffer (Lisp_Object b) | ||
| 1094 | { | ||
| 1095 | return NILP (b) ? current_buffer : (CHECK_BUFFER (b), XBUFFER (b)); | ||
| 1096 | } | ||
| 1097 | |||
| 1091 | /* Set the current buffer to B. | 1098 | /* Set the current buffer to B. |
| 1092 | 1099 | ||
| 1093 | We previously set windows_or_buffers_changed here to invalidate | 1100 | We previously set windows_or_buffers_changed here to invalidate |
diff --git a/src/data.c b/src/data.c index 3e651414e68..aa344dfaf2d 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -1954,17 +1954,9 @@ DEFUN ("local-variable-p", Flocal_variable_p, Slocal_variable_p, | |||
| 1954 | BUFFER defaults to the current buffer. */) | 1954 | BUFFER defaults to the current buffer. */) |
| 1955 | (register Lisp_Object variable, Lisp_Object buffer) | 1955 | (register Lisp_Object variable, Lisp_Object buffer) |
| 1956 | { | 1956 | { |
| 1957 | register struct buffer *buf; | 1957 | register struct buffer *buf = decode_buffer (buffer); |
| 1958 | struct Lisp_Symbol *sym; | 1958 | struct Lisp_Symbol *sym; |
| 1959 | 1959 | ||
| 1960 | if (NILP (buffer)) | ||
| 1961 | buf = current_buffer; | ||
| 1962 | else | ||
| 1963 | { | ||
| 1964 | CHECK_BUFFER (buffer); | ||
| 1965 | buf = XBUFFER (buffer); | ||
| 1966 | } | ||
| 1967 | |||
| 1968 | CHECK_SYMBOL (variable); | 1960 | CHECK_SYMBOL (variable); |
| 1969 | sym = XSYMBOL (variable); | 1961 | sym = XSYMBOL (variable); |
| 1970 | 1962 | ||
diff --git a/src/fileio.c b/src/fileio.c index bd1e650c427..f4aa33d1f1d 100644 --- a/src/fileio.c +++ b/src/fileio.c | |||
| @@ -5324,20 +5324,12 @@ If BUF is omitted or nil, it defaults to the current buffer. | |||
| 5324 | See Info node `(elisp)Modification Time' for more details. */) | 5324 | See Info node `(elisp)Modification Time' for more details. */) |
| 5325 | (Lisp_Object buf) | 5325 | (Lisp_Object buf) |
| 5326 | { | 5326 | { |
| 5327 | struct buffer *b; | 5327 | struct buffer *b = decode_buffer (buf); |
| 5328 | struct stat st; | 5328 | struct stat st; |
| 5329 | Lisp_Object handler; | 5329 | Lisp_Object handler; |
| 5330 | Lisp_Object filename; | 5330 | Lisp_Object filename; |
| 5331 | struct timespec mtime; | 5331 | struct timespec mtime; |
| 5332 | 5332 | ||
| 5333 | if (NILP (buf)) | ||
| 5334 | b = current_buffer; | ||
| 5335 | else | ||
| 5336 | { | ||
| 5337 | CHECK_BUFFER (buf); | ||
| 5338 | b = XBUFFER (buf); | ||
| 5339 | } | ||
| 5340 | |||
| 5341 | if (!STRINGP (BVAR (b, filename))) return Qt; | 5333 | if (!STRINGP (BVAR (b, filename))) return Qt; |
| 5342 | if (b->modtime.tv_nsec == UNKNOWN_MODTIME_NSECS) return Qt; | 5334 | if (b->modtime.tv_nsec == UNKNOWN_MODTIME_NSECS) return Qt; |
| 5343 | 5335 | ||
diff --git a/src/marker.c b/src/marker.c index 91fcea5f25f..d377efbc4fa 100644 --- a/src/marker.c +++ b/src/marker.c | |||
| @@ -455,21 +455,8 @@ attach_marker (struct Lisp_Marker *m, struct buffer *b, | |||
| 455 | static struct buffer * | 455 | static struct buffer * |
| 456 | live_buffer (Lisp_Object buffer) | 456 | live_buffer (Lisp_Object buffer) |
| 457 | { | 457 | { |
| 458 | struct buffer *b; | 458 | struct buffer *b = decode_buffer (buffer); |
| 459 | 459 | return BUFFER_LIVE_P (b) ? b : NULL; | |
| 460 | if (NILP (buffer)) | ||
| 461 | { | ||
| 462 | b = current_buffer; | ||
| 463 | eassert (BUFFER_LIVE_P (b)); | ||
| 464 | } | ||
| 465 | else | ||
| 466 | { | ||
| 467 | CHECK_BUFFER (buffer); | ||
| 468 | b = XBUFFER (buffer); | ||
| 469 | if (!BUFFER_LIVE_P (b)) | ||
| 470 | b = NULL; | ||
| 471 | } | ||
| 472 | return b; | ||
| 473 | } | 460 | } |
| 474 | 461 | ||
| 475 | /* Internal function to set MARKER in BUFFER at POSITION. Non-zero | 462 | /* Internal function to set MARKER in BUFFER at POSITION. Non-zero |