aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Antipov2014-09-02 15:41:22 +0400
committerDmitry Antipov2014-09-02 15:41:22 +0400
commit77ea21cdfcc4d41aaac7dad2d0ed9f74e02603e7 (patch)
tree058039c9708f42c31e8f8d682e1e8fc47ccc13c6
parentf25cd98b276ba1a11d7be5506c8624c72060b25f (diff)
downloademacs-77ea21cdfcc4d41aaac7dad2d0ed9f74e02603e7.tar.gz
emacs-77ea21cdfcc4d41aaac7dad2d0ed9f74e02603e7.zip
* buffer.h (decode_buffer): New function.
* buffer.c (Fbuffer_name, Fbuffer_file_name, Fbuffer_base_buffer) (Fbuffer_local_variables, Fbuffer_modified_p, Fbuffer_modified_tick) (Fbuffer_chars_modified_tick, Fdelete_all_overlays): * data.c (Flocal_variables_p): * fileio.c (Fverify_visited_file_modtime): * marker.c (live_buffer): Use it.
-rw-r--r--src/ChangeLog8
-rw-r--r--src/buffer.c85
-rw-r--r--src/buffer.h7
-rw-r--r--src/data.c10
-rw-r--r--src/fileio.c10
-rw-r--r--src/marker.c17
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
102014-09-01 Dmitry Antipov <dmantipov@yandex.ru> 182014-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.
1134Return nil if BUFFER has been killed. */) 1134Return 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
1143DEFUN ("buffer-file-name", Fbuffer_file_name, Sbuffer_file_name, 0, 1, 0, 1140DEFUN ("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,
1145No argument or nil as argument means use the current buffer. */) 1142No 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
1154DEFUN ("buffer-base-buffer", Fbuffer_base_buffer, Sbuffer_base_buffer, 1148DEFUN ("buffer-base-buffer", Fbuffer_base_buffer, Sbuffer_base_buffer,
@@ -1158,21 +1152,8 @@ If BUFFER is not indirect, return nil.
1158BUFFER defaults to the current buffer. */) 1152BUFFER 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
1178DEFUN ("buffer-local-value", Fbuffer_local_value, 1159DEFUN ("buffer-local-value", Fbuffer_local_value,
@@ -1297,18 +1278,8 @@ Note that storing new VALUEs in these elements doesn't change the variables.
1297No argument or nil as argument means use current buffer as BUFFER. */) 1278No 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,
1337No argument or nil as argument means use current buffer as BUFFER. */) 1308No 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.
1451No argument or nil as argument means use current buffer as BUFFER. */) 1414No 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
1466DEFUN ("buffer-chars-modified-tick", Fbuffer_chars_modified_tick, 1420DEFUN ("buffer-chars-modified-tick", Fbuffer_chars_modified_tick,
@@ -1475,16 +1429,7 @@ between these calls. No argument or nil as argument means use current
1475buffer as BUFFER. */) 1429buffer 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
1490DEFUN ("rename-buffer", Frename_buffer, Srename_buffer, 1, 2, 1435DEFUN ("rename-buffer", Frename_buffer, Srename_buffer, 1, 2,
@@ -4137,17 +4082,7 @@ BUFFER omitted or nil means delete all overlays of the current
4137buffer. */) 4082buffer. */)
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);
1088extern void restore_buffer (Lisp_Object); 1088extern void restore_buffer (Lisp_Object);
1089extern void set_buffer_if_live (Lisp_Object); 1089extern void set_buffer_if_live (Lisp_Object);
1090 1090
1091INLINE
1092struct buffer *
1093decode_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,
1954BUFFER defaults to the current buffer. */) 1954BUFFER 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.
5324See Info node `(elisp)Modification Time' for more details. */) 5324See 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,
455static struct buffer * 455static struct buffer *
456live_buffer (Lisp_Object buffer) 456live_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