From 86f3d2ba19925ccece5c2cecc46db57817ffa85b Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Thu, 20 Oct 2016 05:21:40 -0700 Subject: Add stream printing context. This is some infrastructure which will support *print-circle*. * lib.h (struct strm_ctx): Forward declared. (struct cobj_ops): Add context parameter to print function pointer. (cobj_print_op, obj_print_impl): Add context parameter to declarations. * hash.c (hash_print_op): Take context argument and pass it down in obj_print_impl calls. * lib.c (cobj_print_op, out_quasi_str): Likewise (obj_print_impl): Likewise, and also pass to COBJ print method. (obj_print, obj_pprint): Pass null pointer as context argument to obj_print_impl. * regex.c (regex_print): Take context parameter and ignore it. * socket.c (dgram_print): Likewise. * stream.h (struct strm_ctx): New struct type. (struct strm_base): New ctx member, pointer to struct strm_ctx. (stream_print_op): Add context parameter to declaration. (get_set_ctx, get_ctx): Declared. * stream.c (strm_base_init): Add null pointer to initializer. (strm_base_cleanup): Add assertion against context pointer being non-null: that indicates that some stream operation installed a context pointer and neglected to restore it to null before returning, which is bad because context will be stack allocated. (stream_print_op, stdio_stream_print, cat_stream_print): Take context parameter and ignore it. (get_set_ctx, get_ctx): New functions. * struct.c (struct_type_print): Take context parameter and ignore it. (struct_inst_print): Take context parameter and pass down to obj_print_impl. --- lib.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'lib.h') diff --git a/lib.h b/lib.h index 9e1405a0..5d620446 100644 --- a/lib.h +++ b/lib.h @@ -228,9 +228,11 @@ struct cobj { val cls; }; +struct strm_ctx; + struct cobj_ops { val (*equal)(val self, val other); - void (*print)(val self, val stream, val pretty); + void (*print)(val self, val stream, val pretty, struct strm_ctx *); void (*destroy)(val self); void (*mark)(val self); cnum (*hash)(val self, int *count); @@ -248,7 +250,7 @@ struct cobj_ops { * Default equal is eq */ -void cobj_print_op(val, val, val); +void cobj_print_op(val, val, val, struct strm_ctx *); void cobj_destroy_stub_op(val); void cobj_destroy_free_op(val); void cobj_mark_op(val); @@ -975,7 +977,7 @@ val set_from(val range, val from); val set_to(val range, val to); val env(void); void out_str_char(wchar_t ch, val out, int *semi_flag); -val obj_print_impl(val obj, val out, val pretty); +val obj_print_impl(val obj, val out, val pretty, struct strm_ctx *); val obj_print(val obj, val stream); val obj_pprint(val obj, val stream); val tostring(val obj); -- cgit v1.2.3