+2011-11-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix some portability problems with 'inline'.
+ * dispextern.h (window_box, window_box_height, window_text_bottom_y)
+ (window_box_width, window_box_left, window_box_left_offset)
+ (window_box_right, window_box_right_offset): Declare extern.
+ Otherwise, these inline functions do not conform to C99 and
+ are miscompiled by Microsoft compilers. Reported by Eli Zaretskii in
+ <http://lists.gnu.org/archive/html/emacs-devel/2011-11/msg00084.html>.
+ * intervals.c (adjust_intervals_for_insertion)
+ (adjust_intervals_for_deletion): Now extern, because otherwise the
+ extern inline functions 'offset_intervals' couldn't refer to it.
+ (static_offset_intervals): Remove.
+ (offset_intervals): Rewrite using the old contents of
+ static_offset_intervals. The old version didn't conform to C99
+ because an extern inline function contained a reference to an
+ identifier with static linkage.
+
2011-11-06 Andreas Schwab <schwab@linux-m68k.org>
* keyboard.c (interrupt_signal): Don't call kill-emacs while in
void set_vertical_scroll_bar (struct window *);
#endif
int try_window (Lisp_Object, struct text_pos, int);
-void window_box (struct window *, int, int *, int *, int *, int *);
-int window_box_height (struct window *);
-int window_text_bottom_y (struct window *);
-int window_box_width (struct window *, int);
-int window_box_left (struct window *, int);
-int window_box_left_offset (struct window *, int);
-int window_box_right (struct window *, int);
-int window_box_right_offset (struct window *, int);
+extern void window_box (struct window *, int, int *, int *, int *, int *);
+extern int window_box_height (struct window *);
+extern int window_text_bottom_y (struct window *);
+extern int window_box_width (struct window *, int);
+extern int window_box_left (struct window *, int);
+extern int window_box_left_offset (struct window *, int);
+extern int window_box_right (struct window *, int);
+extern int window_box_right_offset (struct window *, int);
int estimate_mode_line_height (struct frame *, enum face_id);
void pixel_to_glyph_coords (struct frame *, int, int, int *, int *,
NativeRectangle *, int);
#define TMEM(sym, set) (CONSP (set) ? ! NILP (Fmemq (sym, set)) : ! NILP (set))
+extern INTERVAL adjust_intervals_for_insertion (INTERVAL,
+ EMACS_INT, EMACS_INT);
+extern void adjust_intervals_for_deletion (struct buffer *,
+ EMACS_INT, EMACS_INT);
+
static Lisp_Object merge_properties_sticky (Lisp_Object, Lisp_Object);
static INTERVAL merge_interval_right (INTERVAL);
static INTERVAL reproduce_tree (INTERVAL, INTERVAL);
and check the hungry bits of both. Then add the length going back up
to the root. */
-static INTERVAL
+INTERVAL
adjust_intervals_for_insertion (INTERVAL tree, EMACS_INT position,
EMACS_INT length)
{
interval. Another possibility would be to create a new interval for
this text, and make it have the merged properties of both ends. */
-static INTERVAL
+INTERVAL
adjust_intervals_for_insertion (INTERVAL tree,
EMACS_INT position, EMACS_INT length)
{
text. The deletion is effected at position START (which is a
buffer position, i.e. origin 1). */
-static void
+void
adjust_intervals_for_deletion (struct buffer *buffer,
EMACS_INT start, EMACS_INT length)
{
compiler that does not allow calling a static function (here,
adjust_intervals_for_deletion) from a non-static inline function. */
-static inline void
-static_offset_intervals (struct buffer *buffer, EMACS_INT start,
- EMACS_INT length)
+inline void
+offset_intervals (struct buffer *buffer, EMACS_INT start, EMACS_INT length)
{
if (NULL_INTERVAL_P (BUF_INTERVALS (buffer)) || length == 0)
return;
adjust_intervals_for_deletion (buffer, start, -length);
}
}
-
-inline void
-offset_intervals (struct buffer *buffer, EMACS_INT start, EMACS_INT length)
-{
- static_offset_intervals (buffer, start, length);
-}
\f
/* Merge interval I with its lexicographic successor. The resulting
interval is returned, and has the properties of the original