mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-19 04:21:45 -07:00
Do not use memcpy for copying intervals.
* intervals.c (reproduce_interval): New function. (reproduce_tree, reproduce_tree_obj): Use it. (reproduce_tree_obj): Remove prototype.
This commit is contained in:
parent
927c7216ad
commit
44386687ef
2 changed files with 33 additions and 21 deletions
|
|
@ -1,3 +1,10 @@
|
|||
2012-08-17 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
Do not use memcpy for copying intervals.
|
||||
* intervals.c (reproduce_interval): New function.
|
||||
(reproduce_tree, reproduce_tree_obj): Use it.
|
||||
(reproduce_tree_obj): Remove prototype.
|
||||
|
||||
2012-08-17 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* lisp.h (duration_to_sec_usec): Remove unused decl.
|
||||
|
|
|
|||
|
|
@ -59,7 +59,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
static Lisp_Object merge_properties_sticky (Lisp_Object, Lisp_Object);
|
||||
static INTERVAL merge_interval_right (INTERVAL);
|
||||
static INTERVAL reproduce_tree (INTERVAL, INTERVAL);
|
||||
static INTERVAL reproduce_tree_obj (INTERVAL, Lisp_Object);
|
||||
|
||||
/* Utility functions for intervals. */
|
||||
|
||||
|
|
@ -1498,6 +1497,26 @@ merge_interval_left (register INTERVAL i)
|
|||
abort ();
|
||||
}
|
||||
|
||||
/* Create a copy of SOURCE but with the default value of UP. */
|
||||
|
||||
static INTERVAL
|
||||
reproduce_interval (INTERVAL source)
|
||||
{
|
||||
register INTERVAL target = make_interval ();
|
||||
|
||||
target->total_length = source->total_length;
|
||||
target->position = source->position;
|
||||
|
||||
copy_properties (source, target);
|
||||
|
||||
if (! NULL_LEFT_CHILD (source))
|
||||
interval_set_left (target, reproduce_tree (source->left, target));
|
||||
if (! NULL_RIGHT_CHILD (source))
|
||||
interval_set_right (target, reproduce_tree (source->right, target));
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
/* Make an exact copy of interval tree SOURCE which descends from
|
||||
PARENT. This is done by recursing through SOURCE, copying
|
||||
the current interval and its properties, and then adjusting
|
||||
|
|
@ -1506,33 +1525,19 @@ merge_interval_left (register INTERVAL i)
|
|||
static INTERVAL
|
||||
reproduce_tree (INTERVAL source, INTERVAL parent)
|
||||
{
|
||||
register INTERVAL t = make_interval ();
|
||||
register INTERVAL target = reproduce_interval (source);
|
||||
|
||||
memcpy (t, source, sizeof *t);
|
||||
copy_properties (source, t);
|
||||
interval_set_parent (t, parent);
|
||||
if (! NULL_LEFT_CHILD (source))
|
||||
interval_set_left (t, reproduce_tree (source->left, t));
|
||||
if (! NULL_RIGHT_CHILD (source))
|
||||
interval_set_right (t, reproduce_tree (source->right, t));
|
||||
|
||||
return t;
|
||||
interval_set_parent (target, parent);
|
||||
return target;
|
||||
}
|
||||
|
||||
static INTERVAL
|
||||
reproduce_tree_obj (INTERVAL source, Lisp_Object parent)
|
||||
{
|
||||
register INTERVAL t = make_interval ();
|
||||
register INTERVAL target = reproduce_interval (source);
|
||||
|
||||
memcpy (t, source, sizeof *t);
|
||||
copy_properties (source, t);
|
||||
interval_set_object (t, parent);
|
||||
if (! NULL_LEFT_CHILD (source))
|
||||
interval_set_left (t, reproduce_tree (source->left, t));
|
||||
if (! NULL_RIGHT_CHILD (source))
|
||||
interval_set_right (t, reproduce_tree (source->right, t));
|
||||
|
||||
return t;
|
||||
interval_set_object (target, parent);
|
||||
return target;
|
||||
}
|
||||
|
||||
/* Insert the intervals of SOURCE into BUFFER at POSITION.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue