X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/dacbc44ca3fc825c9e5ffa799f1a0937c1da0020..ce8171797dafbde765170b79e5f154afc4872e86:/src/intervals.h diff --git a/src/intervals.h b/src/intervals.h index cded8c0abb..e901f99747 100644 --- a/src/intervals.h +++ b/src/intervals.h @@ -1,5 +1,5 @@ /* Definitions and global variables for intervals. - Copyright (C) 1993-1994, 2000-2013 Free Software Foundation, Inc. + Copyright (C) 1993-1994, 2000-2014 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -19,9 +19,6 @@ along with GNU Emacs. If not, see . */ #include "dispextern.h" INLINE_HEADER_BEGIN -#ifndef INTERVALS_INLINE -# define INTERVALS_INLINE INLINE -#endif /* Basic data type for use of intervals. */ @@ -45,19 +42,19 @@ struct interval struct interval *interval; Lisp_Object obj; } up; - unsigned int up_obj : 1; + bool_bf up_obj : 1; - unsigned gcmarkbit : 1; + bool_bf gcmarkbit : 1; /* The remaining components are `properties' of the interval. The first four are duplicates for things which can be on the list, for purposes of speed. */ - unsigned int write_protect : 1; /* Non-zero means can't modify. */ - unsigned int visible : 1; /* Zero means don't display. */ - unsigned int front_sticky : 1; /* Non-zero means text inserted just + bool_bf write_protect : 1; /* True means can't modify. */ + bool_bf visible : 1; /* False means don't display. */ + bool_bf front_sticky : 1; /* True means text inserted just before this interval goes into it. */ - unsigned int rear_sticky : 1; /* Likewise for just after it. */ + bool_bf rear_sticky : 1; /* Likewise for just after it. */ Lisp_Object plist; /* Other properties. */ }; @@ -119,7 +116,7 @@ struct interval /* Test what type of parent we have. Three possibilities: another interval, a buffer or string object, or NULL. */ -#define INTERVAL_HAS_PARENT(i) ((i)->up_obj == 0 && (i)->up.interval != 0) +#define INTERVAL_HAS_PARENT(i) (! (i)->up_obj && (i)->up.interval != 0) #define INTERVAL_HAS_OBJECT(i) ((i)->up_obj) /* Use these macros to get parent of an interval. @@ -129,21 +126,29 @@ struct interval progress. */ #define INTERVAL_PARENT(i) \ - (eassert ((i) != 0 && (i)->up_obj == 0), (i)->up.interval) + (eassert ((i) != 0 && ! (i)->up_obj), (i)->up.interval) -#define GET_INTERVAL_OBJECT(d,s) (eassert ((s)->up_obj == 1), (d) = (s)->up.obj) +#define GET_INTERVAL_OBJECT(d,s) (eassert ((s)->up_obj), (d) = (s)->up.obj) /* Use these functions to set Lisp_Object or pointer slots of struct interval. */ -INTERVALS_INLINE void +INLINE void +set_interval_object (INTERVAL i, Lisp_Object obj) +{ + eassert (BUFFERP (obj) || STRINGP (obj)); + i->up_obj = 1; + i->up.obj = obj; +} + +INLINE void set_interval_parent (INTERVAL i, INTERVAL parent) { - i->up_obj = 0; + i->up_obj = false; i->up.interval = parent; } -INTERVALS_INLINE void +INLINE void set_interval_plist (INTERVAL i, Lisp_Object plist) { i->plist = plist; @@ -157,33 +162,33 @@ set_interval_plist (INTERVAL i, Lisp_Object plist) /* Reset this interval to its vanilla, or no-property state. */ #define RESET_INTERVAL(i) \ -{ \ + do { \ (i)->total_length = (i)->position = 0; \ (i)->left = (i)->right = NULL; \ set_interval_parent (i, NULL); \ - (i)->write_protect = 0; \ - (i)->visible = 0; \ - (i)->front_sticky = (i)->rear_sticky = 0; \ + (i)->write_protect = false; \ + (i)->visible = false; \ + (i)->front_sticky = (i)->rear_sticky = false; \ set_interval_plist (i, Qnil); \ -} + } while (false) /* Copy the cached property values of interval FROM to interval TO. */ #define COPY_INTERVAL_CACHE(from,to) \ -{ \ + do { \ (to)->write_protect = (from)->write_protect; \ (to)->visible = (from)->visible; \ (to)->front_sticky = (from)->front_sticky; \ (to)->rear_sticky = (from)->rear_sticky; \ -} + } while (false) /* Copy only the set bits of FROM's cache. */ -#define MERGE_INTERVAL_CACHE(from,to) \ -{ \ - if ((from)->write_protect) (to)->write_protect = 1; \ - if ((from)->visible) (to)->visible = 1; \ - if ((from)->front_sticky) (to)->front_sticky = 1; \ - if ((from)->rear_sticky) (to)->rear_sticky = 1; \ -} +#define MERGE_INTERVAL_CACHE(from,to) \ + do { \ + if ((from)->write_protect) (to)->write_protect = true; \ + if ((from)->visible) (to)->visible = true; \ + if ((from)->front_sticky) (to)->front_sticky = true; \ + if ((from)->rear_sticky) (to)->rear_sticky = true; \ + } while (false) /* Is this interval visible? Replace later with cache access. */ #define INTERVAL_VISIBLE_P(i) \ @@ -201,7 +206,7 @@ set_interval_plist (INTERVAL i, Lisp_Object plist) should stick to it. Now we have Vtext_property_default_nonsticky, so these macros are unreliable now and never used. */ -#if 0 +#if false #define FRONT_STICKY_P(i) \ (i && ! NILP (textget ((i)->plist, Qfront_sticky))) #define END_NONSTICKY_P(i) \ @@ -259,7 +264,7 @@ extern Lisp_Object get_local_map (ptrdiff_t, struct buffer *, Lisp_Object); extern INTERVAL update_interval (INTERVAL, ptrdiff_t); extern void set_intervals_multibyte (bool); extern INTERVAL validate_interval_range (Lisp_Object, Lisp_Object *, - Lisp_Object *, int); + Lisp_Object *, bool); extern INTERVAL interval_of (ptrdiff_t, Lisp_Object); /* Defined in xdisp.c. */ @@ -293,14 +298,12 @@ extern void set_text_properties_1 (Lisp_Object, Lisp_Object, Lisp_Object text_property_list (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object); -int add_text_properties_from_list (Lisp_Object, Lisp_Object, Lisp_Object); +void add_text_properties_from_list (Lisp_Object, Lisp_Object, Lisp_Object); Lisp_Object extend_property_ranges (Lisp_Object, Lisp_Object); Lisp_Object get_char_property_and_overlay (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object*); extern int text_property_stickiness (Lisp_Object prop, Lisp_Object pos, Lisp_Object buffer); -extern Lisp_Object get_pos_property (Lisp_Object pos, Lisp_Object prop, - Lisp_Object object); extern void syms_of_textprop (void);