diff options
author | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 1997-10-03 00:44:28 +0000 |
---|---|---|
committer | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 1997-10-03 00:44:28 +0000 |
commit | 4bfdf1584d55f7586ec6ba2baef513414fad20b0 (patch) | |
tree | b6e391a86b117d3ff8f30952d6472643187f9d04 /libguile/struct.c | |
parent | f44dd64b76692365a4f9cc5f46cdf78aae116cac (diff) | |
download | guile-4bfdf1584d55f7586ec6ba2baef513414fad20b0.tar.gz |
1997-10-03 Mikael Djurfeldt <mdj@nada.kth.se>
* print.h (SCM_PRINT_STATE_P): Removed SCM_NIMP test. (NIMP
macros should by convention not test for NIMPness.)
(SCM_COERCE_OPORT): Adjust indentation.
* print.c (scm_valid_oport_value_p): Adjusted indentation; Added
SCM_NIMP test before SCM_PRINT_STATE_P.
* struct.c, struct.h, gc.c: Renamed:
scm_struct_i_layout --> scm_vtable_index_layout
scm_struct_i_vcell --> scm_vtable_index_vcell
scm_struct_i_vtable --> scm_vtable_index_vtable
scm_struct_i_printer --> scm_vtable_index_printer
scm_struct_i_vtable_offset --> scm_vtable_offset_user
* struct.c (scm_print_struct): Use new printer slot; Default
printing: Also output hex code of vtable so that type identity
will be indicated as well.
(scm_init_struct): Updated required_vtable_fields to "pruosrpw";
Removed struct_printer_var; Removed struct-vtable-offset;
(vtable-index-layout, vtable-index-vtable, vtable-index-printer,
vtable-offset-user): New constants.
* struct.h (scm_struct_i_vtable_offset): Bumped from 3 to 4.
(scm_struct_i_printer, SCM_STRUCT_PRINTER): New slot in vtables.
If this slot contains a procedure, use that to print structures of
the type represented by this vtable.
* print.c (scm_iprin1): Don't print arguments of macro
transformers. (They are always: exp env.); Bugfix: Unmemoize
transformer source with correct environment.
Diffstat (limited to 'libguile/struct.c')
-rw-r--r-- | libguile/struct.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/libguile/struct.c b/libguile/struct.c index ecd1e875d..b3f0ef74c 100644 --- a/libguile/struct.c +++ b/libguile/struct.c @@ -56,7 +56,6 @@ static SCM required_vtable_fields = SCM_BOOL_F; static int struct_num = 0; -static SCM struct_printer_var; SCM_PROC (s_struct_make_layout, "make-struct-layout", 1, 0, 0, scm_make_struct_layout); @@ -357,7 +356,7 @@ scm_make_struct (vtable, tail_array_size, init) SCM_ASSERT (SCM_INUMP (tail_array_size), tail_array_size, SCM_ARG2, s_make_struct); - layout = SCM_STRUCT_DATA (vtable)[scm_struct_i_layout]; + layout = SCM_STRUCT_DATA (vtable)[scm_vtable_index_layout]; basic_size = SCM_LENGTH (layout) / 2; tail_elts = SCM_INUM (tail_array_size); SCM_NEWCELL (handle); @@ -604,12 +603,14 @@ scm_print_struct (exp, port, pstate) SCM port; scm_print_state *pstate; { - SCM prt = SCM_CDR (struct_printer_var); - if (SCM_FALSEP(prt) || - SCM_FALSEP(scm_printer_apply (prt, exp, port, pstate))) + if (SCM_NFALSEP (scm_procedure_p (SCM_STRUCT_PRINTER (exp)))) + scm_printer_apply (SCM_STRUCT_PRINTER (exp), exp, port, pstate); + else { scm_gen_write (scm_regular_string, "#<struct ", sizeof ("#<struct ") - 1, port); + scm_intprint (SCM_STRUCT_VTABLE (exp), 16, port); + scm_gen_putc (':', port); scm_intprint (exp, 16, port); scm_gen_putc ('>', port); } @@ -618,9 +619,11 @@ scm_print_struct (exp, port, pstate) void scm_init_struct () { - required_vtable_fields = SCM_CAR (scm_intern_obarray ("pruosr", sizeof ("pruosr") - 1, SCM_BOOL_F)); + required_vtable_fields = SCM_CAR (scm_intern_obarray ("pruosrpw", sizeof ("pruosrpw") - 1, SCM_BOOL_F)); scm_permanent_object (required_vtable_fields); - scm_sysintern ("struct-vtable-offset", SCM_MAKINUM (scm_struct_i_vtable_offset)); - struct_printer_var = scm_sysintern("*struct-printer*", SCM_BOOL_F); + scm_sysintern ("vtable-index-layout", SCM_MAKINUM (scm_vtable_index_layout)); + scm_sysintern ("vtable-index-vtable", SCM_MAKINUM (scm_vtable_index_vtable)); + scm_sysintern ("vtable-index-printer", SCM_MAKINUM (scm_vtable_index_printer)); + scm_sysintern ("vtable-offset-user", SCM_MAKINUM (scm_vtable_offset_user)); #include "struct.x" } |