projects
/
chise
/
xemacs-chise.git-
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
(Vutf_2000_version): New variable [moved from chartab.c].
[chise/xemacs-chise.git-]
/
src
/
fns.c
diff --git
a/src/fns.c
b/src/fns.c
index
8cfab15
..
95ce145
100644
(file)
--- a/
src/fns.c
+++ b/
src/fns.c
@@
-56,6
+56,7
@@
Lisp_Object Qstring_lessp;
Lisp_Object Qidentity;
static int internal_old_equal (Lisp_Object, Lisp_Object, int);
Lisp_Object Qidentity;
static int internal_old_equal (Lisp_Object, Lisp_Object, int);
+Lisp_Object safe_copy_tree (Lisp_Object arg, Lisp_Object vecp, int depth);
static Lisp_Object
mark_bit_vector (Lisp_Object obj)
static Lisp_Object
mark_bit_vector (Lisp_Object obj)
@@
-112,7
+113,7
@@
static size_t
size_bit_vector (const void *lheader)
{
Lisp_Bit_Vector *v = (Lisp_Bit_Vector *) lheader;
size_bit_vector (const void *lheader)
{
Lisp_Bit_Vector *v = (Lisp_Bit_Vector *) lheader;
- return FLEXIBLE_ARRAY_STRUCT_SIZEOF (Lisp_Bit_Vector, bits,
+ return FLEXIBLE_ARRAY_STRUCT_SIZEOF (Lisp_Bit_Vector, unsigned long, bits,
BIT_VECTOR_LONG_STORAGE (bit_vector_length (v)));
}
BIT_VECTOR_LONG_STORAGE (bit_vector_length (v)));
}
@@
-863,6
+864,15
@@
are not copied.
*/
(arg, vecp))
{
*/
(arg, vecp))
{
+ return safe_copy_tree (arg, vecp, 0);
+}
+
+Lisp_Object
+safe_copy_tree (Lisp_Object arg, Lisp_Object vecp, int depth)
+{
+ if (depth > 200)
+ signal_simple_error ("Stack overflow in copy-tree", arg);
+
if (CONSP (arg))
{
Lisp_Object rest;
if (CONSP (arg))
{
Lisp_Object rest;
@@
-872,9
+882,9
@@
are not copied.
Lisp_Object elt = XCAR (rest);
QUIT;
if (CONSP (elt) || VECTORP (elt))
Lisp_Object elt = XCAR (rest);
QUIT;
if (CONSP (elt) || VECTORP (elt))
- XCAR (rest) = Fcopy_tree (elt, vecp);
+ XCAR (rest) = safe_copy_tree (elt, vecp, depth + 1);
if (VECTORP (XCDR (rest))) /* hack for (a b . [c d]) */
if (VECTORP (XCDR (rest))) /* hack for (a b . [c d]) */
- XCDR (rest) = Fcopy_tree (XCDR (rest), vecp);
+ XCDR (rest) = safe_copy_tree (XCDR (rest), vecp, depth +1);
rest = XCDR (rest);
}
}
rest = XCDR (rest);
}
}
@@
-888,7
+898,7
@@
are not copied.
Lisp_Object elt = XVECTOR_DATA (arg) [j];
QUIT;
if (CONSP (elt) || VECTORP (elt))
Lisp_Object elt = XVECTOR_DATA (arg) [j];
QUIT;
if (CONSP (elt) || VECTORP (elt))
- XVECTOR_DATA (arg) [j] = Fcopy_tree (elt, vecp);
+ XVECTOR_DATA (arg) [j] = safe_copy_tree (elt, vecp, depth + 1);
}
}
return arg;
}
}
return arg;