diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-04-12 06:45:15 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-04-12 06:45:15 -0700 |
commit | fd6e07188d40caa55fceed334319f9bffa16f611 (patch) | |
tree | a7a80c818578445d2079b42bac7dccc3251e7038 | |
parent | 046a6a3212c1b19c79deb467e6d20e1c30f9f7e3 (diff) | |
download | txr-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.c | 16 |
1 files changed, 10 insertions, 6 deletions
@@ -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; |