From ecc0fdd49ea4351c229f7db243d26360604e758c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 25 Feb 2013 19:09:08 -0800 Subject: [PATCH] Minor textprop integer cleanup. * intervals.h, textprop.c (add_text_properties_from_list): Return void, not int, since nobody uses the return value. * textprop.c (validate_plist, add_properties, remove_properties) (Fadd_text_properties): Don't assume list length fits in int. (interval_has_all_properties, interval_has_some_properties) (interval_has_some_properties_list, add_properties, remove_properties) (Fadd_text_properties, Fremove_text_properties) (Fremove_list_of_text_properties, text_property_stickiness): Use bool for booleans. (Fadd_text_properties, Fremove_text_properties): (Fremove_list_of_text_properties): Reindent do-while as per GNU style. --- src/ChangeLog | 17 ++++++ src/intervals.h | 2 +- src/textprop.c | 159 ++++++++++++++++++++++++------------------------ 3 files changed, 97 insertions(+), 81 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 135d4d48b41..8636e36962e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,20 @@ +2013-02-26 Paul Eggert + + Minor textprop integer cleanup. + * intervals.h, textprop.c (add_text_properties_from_list): + Return void, not int, since nobody uses the return value. + * textprop.c (validate_plist, add_properties, remove_properties) + (Fadd_text_properties): + Don't assume list length fits in int. + (interval_has_all_properties, interval_has_some_properties) + (interval_has_some_properties_list, add_properties, remove_properties) + (Fadd_text_properties, Fremove_text_properties) + (Fremove_list_of_text_properties, text_property_stickiness): + Use bool for booleans. + (Fadd_text_properties, Fremove_text_properties): + (Fremove_list_of_text_properties): + Reindent do-while as per GNU style. + 2013-02-25 Eli Zaretskii Implement CLASH_DETECTION for MS-Windows. diff --git a/src/intervals.h b/src/intervals.h index cded8c0abb2..d6191225b1f 100644 --- a/src/intervals.h +++ b/src/intervals.h @@ -293,7 +293,7 @@ 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*); diff --git a/src/textprop.c b/src/textprop.c index 49fe427913c..9499b53301f 100644 --- a/src/textprop.c +++ b/src/textprop.c @@ -198,14 +198,14 @@ validate_plist (Lisp_Object list) if (CONSP (list)) { - register int i; - register Lisp_Object tail; - for (i = 0, tail = list; CONSP (tail); i++) + bool odd_length = 0; + Lisp_Object tail; + for (tail = list; CONSP (tail); tail = XCDR (tail)) { - tail = XCDR (tail); + odd_length ^= 1; QUIT; } - if (i & 1) + if (odd_length) error ("Odd length text property list"); return list; } @@ -213,20 +213,19 @@ validate_plist (Lisp_Object list) return Fcons (list, Fcons (Qnil, Qnil)); } -/* Return nonzero if interval I has all the properties, +/* Return true if interval I has all the properties, with the same values, of list PLIST. */ -static int +static bool interval_has_all_properties (Lisp_Object plist, INTERVAL i) { - register Lisp_Object tail1, tail2, sym1; - register int found; + Lisp_Object tail1, tail2; /* Go through each element of PLIST. */ for (tail1 = plist; CONSP (tail1); tail1 = Fcdr (XCDR (tail1))) { - sym1 = XCAR (tail1); - found = 0; + Lisp_Object sym1 = XCAR (tail1); + bool found = 0; /* Go through I's plist, looking for sym1 */ for (tail2 = i->plist; CONSP (tail2); tail2 = Fcdr (XCDR (tail2))) @@ -249,13 +248,13 @@ interval_has_all_properties (Lisp_Object plist, INTERVAL i) return 1; } -/* Return nonzero if the plist of interval I has any of the +/* Return true if the plist of interval I has any of the properties of PLIST, regardless of their values. */ -static int +static bool interval_has_some_properties (Lisp_Object plist, INTERVAL i) { - register Lisp_Object tail1, tail2, sym; + Lisp_Object tail1, tail2, sym; /* Go through each element of PLIST. */ for (tail1 = plist; CONSP (tail1); tail1 = Fcdr (XCDR (tail1))) @@ -274,10 +273,10 @@ interval_has_some_properties (Lisp_Object plist, INTERVAL i) /* Return nonzero if the plist of interval I has any of the property names in LIST, regardless of their values. */ -static int +static bool interval_has_some_properties_list (Lisp_Object list, INTERVAL i) { - register Lisp_Object tail1, tail2, sym; + Lisp_Object tail1, tail2, sym; /* Go through each element of LIST. */ for (tail1 = list; CONSP (tail1); tail1 = XCDR (tail1)) @@ -358,15 +357,14 @@ set_properties (Lisp_Object properties, INTERVAL interval, Lisp_Object object) OBJECT should be the string or buffer the interval is in. - Return nonzero if this changes I (i.e., if any members of PLIST + Return true if this changes I (i.e., if any members of PLIST are actually added to I's plist) */ -static int +static bool add_properties (Lisp_Object plist, INTERVAL i, Lisp_Object object) { Lisp_Object tail1, tail2, sym1, val1; - register int changed = 0; - register int found; + bool changed = 0; struct gcpro gcpro1, gcpro2, gcpro3; tail1 = plist; @@ -380,9 +378,9 @@ add_properties (Lisp_Object plist, INTERVAL i, Lisp_Object object) /* Go through each element of PLIST. */ for (tail1 = plist; CONSP (tail1); tail1 = Fcdr (XCDR (tail1))) { + bool found = 0; sym1 = XCAR (tail1); val1 = Fcar (XCDR (tail1)); - found = 0; /* Go through I's plist, looking for sym1 */ for (tail2 = i->plist; CONSP (tail2); tail2 = Fcdr (XCDR (tail2))) @@ -410,7 +408,7 @@ add_properties (Lisp_Object plist, INTERVAL i, Lisp_Object object) /* I's property has a different value -- change it */ Fsetcar (this_cdr, val1); - changed++; + changed = 1; break; } @@ -423,7 +421,7 @@ add_properties (Lisp_Object plist, INTERVAL i, Lisp_Object object) sym1, Qnil, object); } set_interval_plist (i, Fcons (sym1, Fcons (val1, i->plist))); - changed++; + changed = 1; } } @@ -437,14 +435,14 @@ add_properties (Lisp_Object plist, INTERVAL i, Lisp_Object object) (If PLIST is non-nil, use that, otherwise use LIST.) OBJECT is the string or buffer containing I. */ -static int +static bool remove_properties (Lisp_Object plist, Lisp_Object list, INTERVAL i, Lisp_Object object) { - register Lisp_Object tail1, tail2, sym, current_plist; - register int changed = 0; + Lisp_Object tail1, tail2, sym, current_plist; + bool changed = 0; - /* Nonzero means tail1 is a plist, otherwise it is a list. */ - int use_plist; + /* True means tail1 is a plist, otherwise it is a list. */ + bool use_plist; current_plist = i->plist; @@ -467,7 +465,7 @@ remove_properties (Lisp_Object plist, Lisp_Object list, INTERVAL i, Lisp_Object object); current_plist = XCDR (XCDR (current_plist)); - changed++; + changed = 1; } /* Go through I's plist, looking for SYM. */ @@ -483,7 +481,7 @@ remove_properties (Lisp_Object plist, Lisp_Object list, INTERVAL i, Lisp_Object sym, XCAR (XCDR (this)), object); Fsetcdr (XCDR (tail2), XCDR (XCDR (this))); - changed++; + changed = 1; } tail2 = this; } @@ -1129,11 +1127,10 @@ If OBJECT is a string, START and END are 0-based indices into it. Return t if any property value actually changed, nil otherwise. */) (Lisp_Object start, Lisp_Object end, Lisp_Object properties, Lisp_Object object) { - register INTERVAL i, unchanged; - register ptrdiff_t s, len; - register int modified = 0; + INTERVAL i, unchanged; + ptrdiff_t s, len; + bool modified = 0; struct gcpro gcpro1; - ptrdiff_t got; properties = validate_plist (properties); if (NILP (properties)) @@ -1156,14 +1153,17 @@ Return t if any property value actually changed, nil otherwise. */) /* If this interval already has the properties, we can skip it. */ if (interval_has_all_properties (properties, i)) { - got = LENGTH (i) - (s - i->position); - do { - if (got >= len) - RETURN_UNGCPRO (Qnil); - len -= got; - i = next_interval (i); - got = LENGTH (i); - } while (interval_has_all_properties (properties, i)); + ptrdiff_t got = LENGTH (i) - (s - i->position); + + do + { + if (got >= len) + RETURN_UNGCPRO (Qnil); + len -= got; + i = next_interval (i); + got = LENGTH (i); + } + while (interval_has_all_properties (properties, i)); } else if (i->position != s) { @@ -1220,7 +1220,7 @@ Return t if any property value actually changed, nil otherwise. */) } len -= LENGTH (i); - modified += add_properties (properties, i, object); + modified |= add_properties (properties, i, object); i = next_interval (i); } } @@ -1424,10 +1424,9 @@ Return t if any property was actually removed, nil otherwise. Use `set-text-properties' if you want to remove all text properties. */) (Lisp_Object start, Lisp_Object end, Lisp_Object properties, Lisp_Object object) { - register INTERVAL i, unchanged; - register ptrdiff_t s, len; - register int modified = 0; - ptrdiff_t got; + INTERVAL i, unchanged; + ptrdiff_t s, len; + bool modified = 0; if (NILP (object)) XSETBUFFER (object, current_buffer); @@ -1442,14 +1441,17 @@ Use `set-text-properties' if you want to remove all text properties. */) /* If there are no properties on this entire interval, return. */ if (! interval_has_some_properties (properties, i)) { - got = (LENGTH (i) - (s - i->position)); - do { - if (got >= len) - return Qnil; - len -= got; - i = next_interval (i); - got = LENGTH (i); - } while (! interval_has_some_properties (properties, i)); + ptrdiff_t got = LENGTH (i) - (s - i->position); + + do + { + if (got >= len) + return Qnil; + len -= got; + i = next_interval (i); + got = LENGTH (i); + } + while (! interval_has_some_properties (properties, i)); } /* Split away the beginning of this interval; what we don't want to modify. */ @@ -1500,7 +1502,7 @@ Use `set-text-properties' if you want to remove all text properties. */) } len -= LENGTH (i); - modified += remove_properties (properties, Qnil, i, object); + modified |= remove_properties (properties, Qnil, i, object); i = next_interval (i); } } @@ -1515,11 +1517,10 @@ markers). If OBJECT is a string, START and END are 0-based indices into it. Return t if any property was actually removed, nil otherwise. */) (Lisp_Object start, Lisp_Object end, Lisp_Object list_of_properties, Lisp_Object object) { - register INTERVAL i, unchanged; - register ptrdiff_t s, len; - register int modified = 0; + INTERVAL i, unchanged; + ptrdiff_t s, len; + bool modified = 0; Lisp_Object properties; - ptrdiff_t got; properties = list_of_properties; if (NILP (object)) @@ -1535,14 +1536,17 @@ Return t if any property was actually removed, nil otherwise. */) /* If there are no properties on the interval, return. */ if (! interval_has_some_properties_list (properties, i)) { - got = (LENGTH (i) - (s - i->position)); - do { - if (got >= len) - return Qnil; - len -= got; - i = next_interval (i); - got = LENGTH (i); - } while (! interval_has_some_properties_list (properties, i)); + ptrdiff_t got = LENGTH (i) - (s - i->position); + + do + { + if (got >= len) + return Qnil; + len -= got; + i = next_interval (i); + got = LENGTH (i); + } + while (! interval_has_some_properties_list (properties, i)); } /* Split away the beginning of this interval; what we don't want to modify. */ @@ -1697,7 +1701,7 @@ int text_property_stickiness (Lisp_Object prop, Lisp_Object pos, Lisp_Object buffer) { Lisp_Object prev_pos, front_sticky; - int is_rear_sticky = 1, is_front_sticky = 0; /* defaults */ + bool is_rear_sticky = 1, is_front_sticky = 0; /* defaults */ Lisp_Object defalt = Fassq (prop, Vtext_property_default_nonsticky); if (NILP (buffer)) @@ -1772,7 +1776,7 @@ copy_text_properties (Lisp_Object start, Lisp_Object end, Lisp_Object src, Lisp_ Lisp_Object stuff; Lisp_Object plist; ptrdiff_t s, e, e2, p, len; - int modified = 0; + bool modified = 0; struct gcpro gcpro1, gcpro2; i = validate_interval_range (src, &start, &end, soft); @@ -1843,7 +1847,7 @@ copy_text_properties (Lisp_Object start, Lisp_Object end, Lisp_Object src, Lisp_ res = Fadd_text_properties (Fcar (res), Fcar (Fcdr (res)), Fcar (Fcdr (Fcdr (res))), dest); if (! NILP (res)) - modified++; + modified = 1; stuff = Fcdr (stuff); } @@ -1914,33 +1918,28 @@ text_property_list (Lisp_Object object, Lisp_Object start, Lisp_Object end, Lisp /* Add text properties to OBJECT from LIST. LIST is a list of triples (START END PLIST), where START and END are positions and PLIST is a property list containing the text properties to add. Adjust START - and END positions by DELTA before adding properties. Value is - non-zero if OBJECT was modified. */ + and END positions by DELTA before adding properties. */ -int +void add_text_properties_from_list (Lisp_Object object, Lisp_Object list, Lisp_Object delta) { struct gcpro gcpro1, gcpro2; - int modified_p = 0; GCPRO2 (list, object); for (; CONSP (list); list = XCDR (list)) { - Lisp_Object item, start, end, plist, tem; + Lisp_Object item, start, end, plist; item = XCAR (list); start = make_number (XINT (XCAR (item)) + XINT (delta)); end = make_number (XINT (XCAR (XCDR (item))) + XINT (delta)); plist = XCAR (XCDR (XCDR (item))); - tem = Fadd_text_properties (start, end, plist, object); - if (!NILP (tem)) - modified_p = 1; + Fadd_text_properties (start, end, plist, object); } UNGCPRO; - return modified_p; } -- 2.39.2