diff options
Diffstat (limited to 'src/buffer.c')
| -rw-r--r-- | src/buffer.c | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/src/buffer.c b/src/buffer.c index 3a90154992d..b50e7d0f1b0 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
| @@ -1489,28 +1489,28 @@ BEG and END may be integers or markers.") | |||
| 1489 | 1489 | ||
| 1490 | if (NILP (buffer)) | 1490 | if (NILP (buffer)) |
| 1491 | XSET (buffer, Lisp_Buffer, current_buffer); | 1491 | XSET (buffer, Lisp_Buffer, current_buffer); |
| 1492 | CHECK_BUFFER (buffer, 2); | 1492 | else |
| 1493 | CHECK_BUFFER (buffer, 2); | ||
| 1494 | if (MARKERP (beg) | ||
| 1495 | && ! EQ (Fmarker_buffer (beg), buffer)) | ||
| 1496 | error ("Marker points into wrong buffer"); | ||
| 1497 | if (MARKERP (end) | ||
| 1498 | && ! EQ (Fmarker_buffer (end), buffer)) | ||
| 1499 | error ("Marker points into wrong buffer"); | ||
| 1493 | 1500 | ||
| 1494 | b = XBUFFER (buffer); | 1501 | CHECK_NUMBER_COERCE_MARKER (beg, 1); |
| 1502 | CHECK_NUMBER_COERCE_MARKER (end, 1); | ||
| 1495 | 1503 | ||
| 1496 | if (MARKERP (beg)) | 1504 | if (XINT (beg) > XINT (end)) |
| 1497 | { | ||
| 1498 | if (! EQ (Fmarker_buffer (beg), buffer)) | ||
| 1499 | error ("Marker points into wrong buffer"); | ||
| 1500 | else | ||
| 1501 | beg = Fcopy_marker (beg); | ||
| 1502 | } | ||
| 1503 | else | ||
| 1504 | beg = Fset_marker (Fmake_marker (), beg, buffer); | ||
| 1505 | if (MARKERP (end)) | ||
| 1506 | { | 1505 | { |
| 1507 | if (! EQ (Fmarker_buffer (end), buffer)) | 1506 | Lisp_Object temp = beg; |
| 1508 | error ("Marker points into wrong buffer"); | 1507 | beg = end; end = temp; |
| 1509 | else | ||
| 1510 | end = Fcopy_marker (end); | ||
| 1511 | } | 1508 | } |
| 1512 | else | 1509 | |
| 1513 | end = Fset_marker (Fmake_marker (), end, buffer); | 1510 | b = XBUFFER (buffer); |
| 1511 | |||
| 1512 | beg = Fset_marker (Fmake_marker (), beg, buffer); | ||
| 1513 | end = Fset_marker (Fmake_marker (), end, buffer); | ||
| 1514 | 1514 | ||
| 1515 | overlay = Fcons (Fcons (beg, end), Qnil); | 1515 | overlay = Fcons (Fcons (beg, end), Qnil); |
| 1516 | XSETTYPE (overlay, Lisp_Overlay); | 1516 | XSETTYPE (overlay, Lisp_Overlay); |
| @@ -1547,6 +1547,14 @@ buffer.") | |||
| 1547 | if (NILP (buffer)) | 1547 | if (NILP (buffer)) |
| 1548 | XSET (buffer, Lisp_Buffer, current_buffer); | 1548 | XSET (buffer, Lisp_Buffer, current_buffer); |
| 1549 | CHECK_BUFFER (buffer, 3); | 1549 | CHECK_BUFFER (buffer, 3); |
| 1550 | |||
| 1551 | if (MARKERP (beg) | ||
| 1552 | && ! EQ (Fmarker_buffer (beg), buffer)) | ||
| 1553 | error ("Marker points into wrong buffer"); | ||
| 1554 | if (MARKERP (end) | ||
| 1555 | && ! EQ (Fmarker_buffer (end), buffer)) | ||
| 1556 | error ("Marker points into wrong buffer"); | ||
| 1557 | |||
| 1550 | CHECK_NUMBER_COERCE_MARKER (beg, 1); | 1558 | CHECK_NUMBER_COERCE_MARKER (beg, 1); |
| 1551 | CHECK_NUMBER_COERCE_MARKER (end, 1); | 1559 | CHECK_NUMBER_COERCE_MARKER (end, 1); |
| 1552 | 1560 | ||