unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* "Apparently circular structure being printed"
@ 2010-11-08 23:33 Sam Steingold
  2010-11-09  7:49 ` "Apparently circular structure being printed" Seweryn
  0 siblings, 1 reply; 3+ messages in thread
From: Sam Steingold @ 2010-11-08 23:33 UTC (permalink / raw)
  To: emacs-devel

GNU Emacs 24.0.50.4 (x86_64-unknown-linux-gnu, GTK+ Version 2.20.1)
 of 2010-11-07 on sysu76
 '--with-x-toolkit=gtk'

In an nXML buffer:
C-h v rng-compile-table RET

I get an error in the *Messages* buffer:

Entering debugger...
debugger-setup-buffer: Apparently circular structure being printed

no *Backtrace* buffer is created.
my print-circle is t.

-- 
Sam Steingold (http://sds.podval.org/) on Ubuntu 10.04 (lucid)
http://www.memritv.org http://ffii.org http://mideasttruth.com
http://honestreporting.com http://iris.org.il
Any programming language is at its best before it is implemented and used.



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: "Apparently circular structure being printed"
  2010-11-08 23:33 "Apparently circular structure being printed" Sam Steingold
@ 2010-11-09  7:49 ` Seweryn
  2010-11-09 20:11   ` & quot; Apparently circular structure being printed& quot; Seweryn
  0 siblings, 1 reply; 3+ messages in thread
From: Seweryn @ 2010-11-09  7:49 UTC (permalink / raw)
  To: emacs-devel

Sam Steingold <sds <at> gnu.org> writes:

> 
> GNU Emacs 24.0.50.4 (x86_64-unknown-linux-gnu, GTK+ Version 2.20.1)
>  of 2010-11-07 on sysu76
>  '--with-x-toolkit=gtk'
> 
> In an nXML buffer:
> C-h v rng-compile-table RET
> 
> I get an error in the *Messages* buffer:
> 
> Entering debugger...
> debugger-setup-buffer: Apparently circular structure being printed
> 
> no *Backtrace* buffer is created.
> my print-circle is t.
> 

I get the same error with predictive package [1].

Here are steps to reproduce it:
1) Open an arbitrary text file.txt
2) M-x predictive-mode (my rpg-dictionary is loaded)
3) predictive-add-to-dict <- "Very longgggggg string"
(I want to add the expression in qutes, of course without quotes)
4) predictive-save-dict (OK)
5) predictive-add-to-dict <- "Very veryyyyyy longggggggggggggg stringgggggggg"
6) I get the message in echo area: "Entering debugger...
debugger-setup-buffer: Apparently circular structure being printed"
7) No *Backtrace*

The Author of predictive package wrote me as follows:

"This enabled me to reproduce the issue, and I
remember now what it is that causes this. It has nothing to do with
special characters (the predictive-mode dictionaries can store arbitrary
strings). It's to do with the *length* of the string you're trying to
store.

Unfortunately, Emacs has an undocumented, hard-coded limit on the depth
of a Lisp list structure, beyond which it considers the structure to be
circular and refuses to print it, throwing the "Apparently circular
structure" error. This limit only applies to printing such structures;
Emacs will happily work with deeply nested structures in all other
circumstances. But predictive-mode uses the Lisp printing functions to
write the dictionaries to file, hence the error when saving.

It's not unreasonable to impose a depth limit on printing, as it guards
against hanging in a tight loop if you inadvertently ask Emacs to
printing a circular list structure. However, it's unfortunate that this
limit is hard-coded. Other similar Emacs limits can be changed by
modifying a variable in Elisp, but not this one. The vast majority of
Elisp code only uses very simple data structures, and the Emacs devs
didn't have predictive-mode in mind when they arbitrarily chose the value
for this print-depth limit, so it's set rather conservatively.

The practical consequence is that standard Emacs will bork on saving
dictionaries containing strings longer than about 45 characters. There is
a patch included in the predictive package (print.c.diff) [2] which increases
this limit by a factor of 5. (If you envisage storing even longer
strings, you could increase this even further. The required modification
should be obvious from the patch file.) But obviously this requires
patching and compiling the Emacs source yourself, which is possible but
maybe not so easy under Windows."

Regards,
Seweryn


[1] http://www.emacswiki.org/emacs/PredictiveMode or
http://www.dr-qubit.org/emacs.php#predictive

[2]
<code>
--- print.c	2008-10-24 11:18:33.000000000 +0100
+++ print.c.new	2008-10-24 11:19:27.000000000 +0100
@@ -88,7 +88,7 @@
 int new_backquote_output;
 
 /* Detect most circularities to print finite output.  */
-#define PRINT_CIRCLE 200
+#define PRINT_CIRCLE 1000
 Lisp_Object being_printed[PRINT_CIRCLE];
 
 /* When printing into a buffer, first we put the text in this
</code>




^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: &amp; quot; Apparently circular structure being printed&amp; quot;
  2010-11-09  7:49 ` &quot;Apparently circular structure being printed&quot; Seweryn
@ 2010-11-09 20:11   ` Seweryn
  0 siblings, 0 replies; 3+ messages in thread
From: Seweryn @ 2010-11-09 20:11 UTC (permalink / raw)
  To: emacs-devel

Seweryn <sewkokot <at> gmail.com> writes:

> Unfortunately, Emacs has an undocumented, hard-coded limit on the depth
> of a Lisp list structure, beyond which it considers the structure to be
> circular and refuses to print it, throwing the "Apparently circular
> structure" error. This limit only applies to printing such structures;
> Emacs will happily work with deeply nested structures in all other
> circumstances. But predictive-mode uses the Lisp printing functions to
> write the dictionaries to file, hence the error when saving.

Question to Emacs developers:

Are there any chances to create a user variable for this reason or to increase 
PRINT_CIRCLE value in print.c file?

Thanks,
Seweryn




^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-11-09 20:11 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-08 23:33 "Apparently circular structure being printed" Sam Steingold
2010-11-09  7:49 ` &quot;Apparently circular structure being printed&quot; Seweryn
2010-11-09 20:11   ` &amp; quot; Apparently circular structure being printed&amp; quot; Seweryn

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).