From 28545e04974fd13858eaff304cc09b562fd9f71f Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Sat, 2 Jul 2011 12:36:48 +0200 Subject: Remove clone-number support. Provide clone-of parameter in window states. * window.h (window): Remove clone_number slot. * window.c (Fwindow_clone_number, Fset_window_clone_number): Remove. (make_parent_window, make_window, saved_window) (Fset_window_configuration, save_window_save): Don't deal with clone numbers. * buffer.c (Qclone_number): Remove declaration. (sort_overlays, overlay_strings): Don't deal with clone numbers. * window.el (window-state-get-1): Don't assign clone numbers. Add clone-of item to list of window parameters. (window-state-put-2): Don't process clone numbers. (display-buffer-alist): Fix doc-string. --- src/buffer.c | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) (limited to 'src/buffer.c') diff --git a/src/buffer.c b/src/buffer.c index 328963be78c..006153b0424 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -146,7 +146,7 @@ static Lisp_Object Qoverlayp; Lisp_Object Qpriority, Qbefore_string, Qafter_string; -static Lisp_Object Qclone_number, Qevaporate; +static Lisp_Object Qevaporate; Lisp_Object Qmodification_hooks; Lisp_Object Qinsert_in_front_hooks; @@ -2900,13 +2900,10 @@ sort_overlays (Lisp_Object *overlay_vec, ptrdiff_t noverlays, struct window *w) overlays that are limited to some other window. */ if (w) { - Lisp_Object window, clone_number; + Lisp_Object window; window = Foverlay_get (overlay, Qwindow); - clone_number = Foverlay_get (overlay, Qclone_number); - if (WINDOWP (window) && XWINDOW (window) != w - && (! NUMBERP (clone_number) - || XFASTINT (clone_number) != XFASTINT (w->clone_number))) + if (WINDOWP (window) && XWINDOW (window) != w) continue; } @@ -3035,7 +3032,7 @@ record_overlay_string (struct sortstrlist *ssl, Lisp_Object str, EMACS_INT overlay_strings (EMACS_INT pos, struct window *w, unsigned char **pstr) { - Lisp_Object overlay, window, clone_number, str; + Lisp_Object overlay, window, str; struct Lisp_Overlay *ov; EMACS_INT startpos, endpos; int multibyte = ! NILP (BVAR (current_buffer, enable_multibyte_characters)); @@ -3054,12 +3051,8 @@ overlay_strings (EMACS_INT pos, struct window *w, unsigned char **pstr) if (endpos != pos && startpos != pos) continue; window = Foverlay_get (overlay, Qwindow); - clone_number = Foverlay_get (overlay, Qclone_number); - if (WINDOWP (window) && XWINDOW (window) != w - && (! NUMBERP (clone_number) - || XFASTINT (clone_number) != XFASTINT (w->clone_number))) + if (WINDOWP (window) && XWINDOW (window) != w) continue; - if (startpos == pos && (str = Foverlay_get (overlay, Qbefore_string), STRINGP (str))) record_overlay_string (&overlay_heads, str, @@ -3086,10 +3079,7 @@ overlay_strings (EMACS_INT pos, struct window *w, unsigned char **pstr) if (endpos != pos && startpos != pos) continue; window = Foverlay_get (overlay, Qwindow); - clone_number = Foverlay_get (overlay, Qclone_number); - if (WINDOWP (window) && XWINDOW (window) != w - && (! NUMBERP (clone_number) - || XFASTINT (clone_number) != XFASTINT (w->clone_number))) + if (WINDOWP (window) && XWINDOW (window) != w) continue; if (startpos == pos && (str = Foverlay_get (overlay, Qbefore_string), STRINGP (str))) @@ -5229,7 +5219,6 @@ syms_of_buffer (void) DEFSYM (Qinsert_behind_hooks, "insert-behind-hooks"); DEFSYM (Qget_file_buffer, "get-file-buffer"); DEFSYM (Qpriority, "priority"); - DEFSYM (Qclone_number, "clone-number"); DEFSYM (Qbefore_string, "before-string"); DEFSYM (Qafter_string, "after-string"); DEFSYM (Qfirst_change_hook, "first-change-hook"); -- cgit v1.2.1 From 7c301272b49a20b7a1628bdad572264ada9fd790 Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Mon, 4 Jul 2011 17:32:22 +0200 Subject: * buffer.c (Foverlay_put): Say what the return value is (bug#7835). --- src/buffer.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/buffer.c') diff --git a/src/buffer.c b/src/buffer.c index 006153b0424..2339416eb36 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -4056,7 +4056,8 @@ DEFUN ("overlay-get", Foverlay_get, Soverlay_get, 2, 2, 0, } DEFUN ("overlay-put", Foverlay_put, Soverlay_put, 3, 3, 0, - doc: /* Set one property of overlay OVERLAY: give property PROP value VALUE. */) + doc: /* Set one property of overlay OVERLAY: give property PROP value VALUE. +VALUE will be returned.*/) (Lisp_Object overlay, Lisp_Object prop, Lisp_Object value) { Lisp_Object tail, buffer; -- cgit v1.2.1 From 22b4128ef0160a0fab35a5d6dfc0f6a55c8bad93 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 6 Jul 2011 14:53:56 -0700 Subject: Remove unportable assumption about struct layout (Bug#8884). * buffer.c (clone_per_buffer_values): Don't assume that sizeof (struct buffer) is a multiple of sizeof (Lisp_Object). This isn't true in general, and it's particularly not true if Emacs is configured with --with-wide-int. * buffer.h (FIRST_FIELD_PER_BUFFER, LAST_FIELD_PER_BUFFER): New macros, used in the buffer.c change. --- src/buffer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/buffer.c') diff --git a/src/buffer.c b/src/buffer.c index 2339416eb36..6c7c2ec0d86 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -471,8 +471,8 @@ clone_per_buffer_values (struct buffer *from, struct buffer *to) /* buffer-local Lisp variables start at `undo_list', tho only the ones from `name' on are GC'd normally. */ - for (offset = PER_BUFFER_VAR_OFFSET (undo_list); - offset < sizeof *to; + for (offset = PER_BUFFER_VAR_OFFSET (FIRST_FIELD_PER_BUFFER); + offset <= PER_BUFFER_VAR_OFFSET (LAST_FIELD_PER_BUFFER); offset += sizeof (Lisp_Object)) { Lisp_Object obj; -- cgit v1.2.1 From 8a5c77bba5e38c62605f0f053670a7955130fcc7 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 6 Jul 2011 15:22:32 -0700 Subject: Remove more assumptions re struct layout (Bug#8884). --- src/buffer.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/buffer.c') diff --git a/src/buffer.c b/src/buffer.c index 6c7c2ec0d86..e2f34d629e9 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -830,8 +830,8 @@ reset_buffer_local_variables (register struct buffer *b, int permanent_too) /* buffer-local Lisp variables start at `undo_list', tho only the ones from `name' on are GC'd normally. */ - for (offset = PER_BUFFER_VAR_OFFSET (undo_list); - offset < sizeof *b; + for (offset = PER_BUFFER_VAR_OFFSET (FIRST_FIELD_PER_BUFFER); + offset <= PER_BUFFER_VAR_OFFSET (LAST_FIELD_PER_BUFFER); offset += sizeof (Lisp_Object)) { int idx = PER_BUFFER_IDX (offset); @@ -1055,8 +1055,8 @@ No argument or nil as argument means use current buffer as BUFFER. */) /* buffer-local Lisp variables start at `undo_list', tho only the ones from `name' on are GC'd normally. */ - for (offset = PER_BUFFER_VAR_OFFSET (undo_list); - offset < sizeof (struct buffer); + for (offset = PER_BUFFER_VAR_OFFSET (FIRST_FIELD_PER_BUFFER); + offset <= PER_BUFFER_VAR_OFFSET (LAST_FIELD_PER_BUFFER); /* sizeof EMACS_INT == sizeof Lisp_Object */ offset += (sizeof (EMACS_INT))) { -- cgit v1.2.1 From 1dae0f0aadd0e0fe51893aff89bb3220cba953db Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Sun, 10 Jul 2011 10:20:10 +0200 Subject: Protoize * src/buffer.c (mmap_init, mmap_find, mmap_free_1, mmap_enlarge) (mmap_set_vars, mmap_alloc, mmap_free, mmap_realloc): Protoize. * src/data.c (fmod): Likewise. * src/dispnew.c (swap_glyphs_in_rows): Likewise. * src/emacs.c (memory_warning_signal): Likewise. * src/floatfns.c (float_error): Likewise. * src/font.c (check_gstring, check_otf_features, otf_tag_symbol) (otf_open, font_otf_capability, generate_otf_features) (font_otf_DeviceTable, font_otf_ValueRecord, font_otf_Anchor): Likewise. * src/image.c (pbm_read_file): Likewise. * src/indent.c (string_display_width): Likewise. * src/intervals.c (check_for_interval, search_for_interval) (inc_interval_count, count_intervals, root_interval) (adjust_intervals_for_insertion, make_new_interval): Likewise. * src/lread.c (defalias): Likewise. * src/regex.c (set_image_of_range_1, set_image_of_range) (regex_grow_registers): Likewise. * src/sysdep.c (strerror): Likewise. * src/termcap.c (valid_filename_p, tprint, main): Likewise. * src/tparam.c (main): Likewise. * src/unexhp9k800.c (run_time_remap, save_data_space) (update_file_ptrs, read_header, write_header, calculate_checksum) (copy_file, copy_rest, display_header): Likewise. * src/widget.c (mark_shell_size_user_specified, create_frame_gcs): Likewise. * src/xdisp.c (check_it): Likewise. * src/xfaces.c (register_color, unregister_color, unregister_colors): Likewise. * src/xfns.c (print_fontset_result): Likewise. * src/xrdb.c (member, fatal, main): Likewise. --- src/buffer.c | 115 ++++++++++++++++++++++++----------------------------------- 1 file changed, 47 insertions(+), 68 deletions(-) (limited to 'src/buffer.c') diff --git a/src/buffer.c b/src/buffer.c index e2f34d629e9..1b8b1117893 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -4466,24 +4466,40 @@ static int mmap_initialized_p; #define MMAP_ALLOCATED_P(start, end) 1 #endif -/* Function prototypes. */ +/* Perform necessary intializations for the use of mmap. */ -static int mmap_free_1 (struct mmap_region *); -static int mmap_enlarge (struct mmap_region *, int); -static struct mmap_region *mmap_find (POINTER_TYPE *, POINTER_TYPE *); -static POINTER_TYPE *mmap_alloc (POINTER_TYPE **, size_t); -static POINTER_TYPE *mmap_realloc (POINTER_TYPE **, size_t); -static void mmap_free (POINTER_TYPE **ptr); -static void mmap_init (void); +static void +mmap_init (void) +{ +#if MAP_ANON == 0 + /* The value of mmap_fd is initially 0 in temacs, and -1 + in a dumped Emacs. */ + if (mmap_fd <= 0) + { + /* No anonymous mmap -- we need the file descriptor. */ + mmap_fd = open ("/dev/zero", O_RDONLY); + if (mmap_fd == -1) + fatal ("Cannot open /dev/zero: %s", emacs_strerror (errno)); + } +#endif /* MAP_ANON == 0 */ + + if (mmap_initialized_p) + return; + mmap_initialized_p = 1; +#if MAP_ANON != 0 + mmap_fd = -1; +#endif + + mmap_page_size = getpagesize (); +} /* Return a region overlapping address range START...END, or null if none. END is not including, i.e. the last byte in the range is at END - 1. */ static struct mmap_region * -mmap_find (start, end) - POINTER_TYPE *start, *end; +mmap_find (POINTER_TYPE *start, POINTER_TYPE *end); { struct mmap_region *r; char *s = (char *) start, *e = (char *) end; @@ -4512,8 +4528,7 @@ mmap_find (start, end) the region. Value is non-zero if successful. */ static int -mmap_free_1 (r) - struct mmap_region *r; +mmap_free_1 (struct mmap_region *r) { if (r->next) r->next->prev = r->prev; @@ -4536,9 +4551,7 @@ mmap_free_1 (r) Value is non-zero if successful. */ static int -mmap_enlarge (r, npages) - struct mmap_region *r; - int npages; +mmap_enlarge (struct mmap_region *r, int npages) { char *region_end = (char *) r + r->nbytes_mapped; size_t nbytes; @@ -4602,8 +4615,7 @@ mmap_enlarge (r, npages) when Emacs starts. */ void -mmap_set_vars (restore_p) - int restore_p; +mmap_set_vars (int restore_p) { struct mmap_region *r; @@ -4636,9 +4648,7 @@ mmap_set_vars (restore_p) return null. */ static POINTER_TYPE * -mmap_alloc (var, nbytes) - POINTER_TYPE **var; - size_t nbytes; +mmap_alloc (POINTER_TYPE **var, size_t nbytes) { void *p; size_t map; @@ -4675,15 +4685,29 @@ mmap_alloc (var, nbytes) } +/* Free a block of relocatable storage whose data is pointed to by + PTR. Store 0 in *PTR to show there's no block allocated. */ + +static void +mmap_free (POINTER_TYPE **var) +{ + mmap_init (); + + if (*var) + { + mmap_free_1 (MMAP_REGION (*var)); + *var = NULL; + } +} + + /* Given a pointer at address VAR to data allocated with mmap_alloc, resize it to size NBYTES. Change *VAR to reflect the new block, and return this value. If more memory cannot be allocated, then leave *VAR unchanged, and return null. */ static POINTER_TYPE * -mmap_realloc (var, nbytes) - POINTER_TYPE **var; - size_t nbytes; +mmap_realloc (POINTER_TYPE **var, size_t nbytes) { POINTER_TYPE *result; @@ -4753,51 +4777,6 @@ mmap_realloc (var, nbytes) } -/* Free a block of relocatable storage whose data is pointed to by - PTR. Store 0 in *PTR to show there's no block allocated. */ - -static void -mmap_free (var) - POINTER_TYPE **var; -{ - mmap_init (); - - if (*var) - { - mmap_free_1 (MMAP_REGION (*var)); - *var = NULL; - } -} - - -/* Perform necessary intializations for the use of mmap. */ - -static void -mmap_init () -{ -#if MAP_ANON == 0 - /* The value of mmap_fd is initially 0 in temacs, and -1 - in a dumped Emacs. */ - if (mmap_fd <= 0) - { - /* No anonymous mmap -- we need the file descriptor. */ - mmap_fd = open ("/dev/zero", O_RDONLY); - if (mmap_fd == -1) - fatal ("Cannot open /dev/zero: %s", emacs_strerror (errno)); - } -#endif /* MAP_ANON == 0 */ - - if (mmap_initialized_p) - return; - mmap_initialized_p = 1; - -#if MAP_ANON != 0 - mmap_fd = -1; -#endif - - mmap_page_size = getpagesize (); -} - #endif /* USE_MMAP_FOR_BUFFERS */ -- cgit v1.2.1 From 2941c447ebada8126c27065f78c31895f69c738e Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 12 Jul 2011 18:15:33 -0700 Subject: * buffer.c (Fget_buffer_create): Initialized inhibit_shrinking. The old code sometimes used this field without initializing it. --- src/buffer.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src/buffer.c') diff --git a/src/buffer.c b/src/buffer.c index 1b8b1117893..776888e30ac 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -361,6 +361,7 @@ even if it is dead. The return value is never nil. */) BUF_END_UNCHANGED (b) = 0; BUF_BEG_UNCHANGED (b) = 0; *(BUF_GPT_ADDR (b)) = *(BUF_Z_ADDR (b)) = 0; /* Put an anchor '\0'. */ + b->text->inhibit_shrinking = 0; b->newline_cache = 0; b->width_run_cache = 0; -- cgit v1.2.1 From 0be0ce47418235badfb0ae9866da8523058310db Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Wed, 13 Jul 2011 00:09:28 -0400 Subject: src/buffer.c (mmap_find): Fix a typo. --- src/buffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/buffer.c') diff --git a/src/buffer.c b/src/buffer.c index 776888e30ac..81c537b9c6a 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -4500,7 +4500,7 @@ mmap_init (void) is at END - 1. */ static struct mmap_region * -mmap_find (POINTER_TYPE *start, POINTER_TYPE *end); +mmap_find (POINTER_TYPE *start, POINTER_TYPE *end) { struct mmap_region *r; char *s = (char *) start, *e = (char *) end; -- cgit v1.2.1