summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-04-12 06:45:15 -0700
committerKaz Kylheku <kaz@kylheku.com>2017-04-12 06:45:15 -0700
commitfd6e07188d40caa55fceed334319f9bffa16f611 (patch)
treea7a80c818578445d2079b42bac7dccc3251e7038
parent046a6a3212c1b19c79deb467e6d20e1c30f9f7e3 (diff)
downloadtxr-fd6e07188d40caa55fceed334319f9bffa16f611.tar.gz
txr-fd6e07188d40caa55fceed334319f9bffa16f611.tar.bz2
txr-fd6e07188d40caa55fceed334319f9bffa16f611.zip
Honor *print-circle* disabling in print methods.
* lib.c (obj_print): Don't assume that if we have a circle printing context in the stream, circle printing is enabled. Check the variable.
-rw-r--r--lib.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/lib.c b/lib.c
index 7241796c..e44cdd23 100644
--- a/lib.c
+++ b/lib.c
@@ -10341,12 +10341,16 @@ val obj_print(val obj, val out, val pretty)
uw_simple_catch_begin;
if (ctx) {
- ctx->obj_hash_prev = ctx->obj_hash;
- ctx->obj_hash = make_hash(nil, nil, nil);
- populate_obj_hash(obj, ctx);
- obj_hash_merge(ctx->obj_hash_prev, ctx->obj_hash);
- ctx->obj_hash = ctx->obj_hash_prev;
- ctx->obj_hash_prev = nil;
+ if (cdr(lookup_var(nil, print_circle_s))) {
+ ctx->obj_hash_prev = ctx->obj_hash;
+ ctx->obj_hash = make_hash(nil, nil, nil);
+ populate_obj_hash(obj, ctx);
+ obj_hash_merge(ctx->obj_hash_prev, ctx->obj_hash);
+ ctx->obj_hash = ctx->obj_hash_prev;
+ ctx->obj_hash_prev = nil;
+ } else {
+ ctx = 0;
+ }
} else {
if (print_circle_s && cdr(lookup_var(nil, print_circle_s))) {
ctx = &ctx_struct;