diff options
| author | Dmitry Antipov | 2012-07-24 10:45:44 +0400 |
|---|---|---|
| committer | Dmitry Antipov | 2012-07-24 10:45:44 +0400 |
| commit | fa691a83f0f67db762d8d8d9d05d9ff97f25841f (patch) | |
| tree | a66fd4ee200f1ff0213fa5bee3a544a146659014 /src/buffer.c | |
| parent | ec1b09b12339df0920e8901c6bd355a7afd2bc11 (diff) | |
| download | emacs-fa691a83f0f67db762d8d8d9d05d9ff97f25841f.tar.gz emacs-fa691a83f0f67db762d8d8d9d05d9ff97f25841f.zip | |
Simplify copy_overlay.
* buffer.c (copy_overlay): Simplify, use build_marker.
* lisp.h (struct Lisp_Overlay): Restore comment with minor tweaks.
Diffstat (limited to 'src/buffer.c')
| -rw-r--r-- | src/buffer.c | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/src/buffer.c b/src/buffer.c index 734ddb5a1c1..c017db7b034 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
| @@ -410,32 +410,24 @@ even if it is dead. The return value is never nil. */) | |||
| 410 | static struct Lisp_Overlay * | 410 | static struct Lisp_Overlay * |
| 411 | copy_overlays (struct buffer *b, struct Lisp_Overlay *list) | 411 | copy_overlays (struct buffer *b, struct Lisp_Overlay *list) |
| 412 | { | 412 | { |
| 413 | Lisp_Object buffer; | ||
| 414 | struct Lisp_Overlay *result = NULL, *tail = NULL; | 413 | struct Lisp_Overlay *result = NULL, *tail = NULL; |
| 415 | 414 | ||
| 416 | XSETBUFFER (buffer, b); | ||
| 417 | |||
| 418 | for (; list; list = list->next) | 415 | for (; list; list = list->next) |
| 419 | { | 416 | { |
| 420 | Lisp_Object overlay, start, end, old_overlay; | 417 | Lisp_Object overlay, start, end; |
| 421 | ptrdiff_t charpos; | 418 | struct Lisp_Marker *m; |
| 422 | |||
| 423 | XSETMISC (old_overlay, list); | ||
| 424 | charpos = marker_position (OVERLAY_START (old_overlay)); | ||
| 425 | start = Fmake_marker (); | ||
| 426 | Fset_marker (start, make_number (charpos), buffer); | ||
| 427 | XMARKER (start)->insertion_type | ||
| 428 | = XMARKER (OVERLAY_START (old_overlay))->insertion_type; | ||
| 429 | 419 | ||
| 430 | charpos = marker_position (OVERLAY_END (old_overlay)); | 420 | eassert (MARKERP (list->start)); |
| 431 | end = Fmake_marker (); | 421 | m = XMARKER (list->start); |
| 432 | Fset_marker (end, make_number (charpos), buffer); | 422 | start = build_marker (b, m->charpos, m->bytepos); |
| 433 | XMARKER (end)->insertion_type | 423 | XMARKER (start)->insertion_type = m->insertion_type; |
| 434 | = XMARKER (OVERLAY_END (old_overlay))->insertion_type; | ||
| 435 | 424 | ||
| 436 | overlay = build_overlay | 425 | eassert (MARKERP (list->end)); |
| 437 | (start, end, Fcopy_sequence (OVERLAY_PLIST (old_overlay))); | 426 | m = XMARKER (list->end); |
| 427 | end = build_marker (b, m->charpos, m->bytepos); | ||
| 428 | XMARKER (end)->insertion_type = m->insertion_type; | ||
| 438 | 429 | ||
| 430 | overlay = build_overlay (start, end, Fcopy_sequence (list->plist)); | ||
| 439 | if (tail) | 431 | if (tail) |
| 440 | tail = tail->next = XOVERLAY (overlay); | 432 | tail = tail->next = XOVERLAY (overlay); |
| 441 | else | 433 | else |