Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
c1132671
Commit
c1132671
authored
May 10, 2004
by
Richard M. Stallman
Browse files
(print_preprocess): Use being_printed, loop_count and
halftail to detect overdeep nesting and cyclic cdr chains.
parent
6740652e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
29 additions
and
0 deletions
+29
-0
src/print.c
src/print.c
+29
-0
No files found.
src/print.c
View file @
c1132671
...
...
@@ -1280,6 +1280,26 @@ print_preprocess (obj)
{
int
i
;
EMACS_INT
size
;
int
loop_count
=
0
;
Lisp_Object
halftail
;
/* Avoid infinite recursion for circular nested structure
in the case where Vprint_circle is nil. */
if
(
NILP
(
Vprint_circle
))
{
for
(
i
=
0
;
i
<
print_depth
;
i
++
)
if
(
EQ
(
obj
,
being_printed
[
i
]))
return
;
being_printed
[
print_depth
]
=
obj
;
}
/* Give up if we go so deep that print_object will get an error. */
/* See similar code in print_object. */
if
(
print_depth
>=
PRINT_CIRCLE
)
return
;
print_depth
++
;
halftail
=
obj
;
loop:
if
(
STRINGP
(
obj
)
||
CONSP
(
obj
)
||
VECTORP
(
obj
)
...
...
@@ -1340,8 +1360,15 @@ print_preprocess (obj)
break
;
case
Lisp_Cons
:
/* Use HALFTAIL and LOOP_COUNT to detect circular lists,
just as in print_object. */
if
(
loop_count
&&
EQ
(
obj
,
halftail
))
break
;
print_preprocess
(
XCAR
(
obj
));
obj
=
XCDR
(
obj
);
loop_count
++
;
if
(
!
(
loop_count
&
1
))
halftail
=
XCDR
(
halftail
);
goto
loop
;
case
Lisp_Vectorlike
:
...
...
@@ -1356,6 +1383,7 @@ print_preprocess (obj)
break
;
}
}
print_depth
--
;
}
static
void
...
...
@@ -1426,6 +1454,7 @@ print_object (obj, printcharfun, escapeflag)
print_depth
++
;
/* See similar code in print_preprocess. */
if
(
print_depth
>
PRINT_CIRCLE
)
error
(
"Apparently circular structure being printed"
);
#ifdef MAX_PRINT_CHARS
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment