summaryrefslogtreecommitdiff
path: root/libguile/struct.h
diff options
context:
space:
mode:
authorMikael Djurfeldt <djurfeldt@nada.kth.se>1997-10-03 00:44:28 +0000
committerMikael Djurfeldt <djurfeldt@nada.kth.se>1997-10-03 00:44:28 +0000
commit4bfdf1584d55f7586ec6ba2baef513414fad20b0 (patch)
treeb6e391a86b117d3ff8f30952d6472643187f9d04 /libguile/struct.h
parentf44dd64b76692365a4f9cc5f46cdf78aae116cac (diff)
downloadguile-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.h')
-rw-r--r--libguile/struct.h20
1 files changed, 11 insertions, 9 deletions
diff --git a/libguile/struct.h b/libguile/struct.h
index e0d0f66d9..85c7c2001 100644
--- a/libguile/struct.h
+++ b/libguile/struct.h
@@ -53,20 +53,22 @@
#define scm_struct_n_extra_words 3
/* These are how the initial words of a vtable are allocated. */
-#define scm_struct_i_ptr -3 /* start of block (see alloc_struct) */
-#define scm_struct_i_n_words -2 /* How many words allocated to this struct? */
-#define scm_struct_i_tag -1 /* A unique tag for this type.. */
-#define scm_struct_i_layout 0 /* A symbol describing the physical arrangement of this type. */
-#define scm_struct_i_vcell 1 /* An opaque word, managed by the garbage collector. */
-#define scm_struct_i_vtable 2 /* A pointer to the handle for this vtable. */
-#define scm_struct_i_vtable_offset 3 /* Where do user fields start? */
+#define scm_struct_i_ptr -3 /* start of block (see alloc_struct) */
+#define scm_struct_i_n_words -2 /* How many words allocated to this struct? */
+#define scm_struct_i_tag -1 /* A unique tag for this type.. */
+#define scm_vtable_index_layout 0 /* A symbol describing the physical arrangement of this type. */
+#define scm_vtable_index_vcell 1 /* An opaque word, managed by the garbage collector. */
+#define scm_vtable_index_vtable 2 /* A pointer to the handle for this vtable. */
+#define scm_vtable_index_printer 3 /* A printer for this struct type. */
+#define scm_vtable_offset_user 4 /* Where do user fields start? */
#define SCM_STRUCTP(X) (SCM_TYP3(X) == scm_tc3_cons_gloc)
#define SCM_STRUCT_DATA(X) ((SCM*)(SCM_CDR(X)))
#define SCM_STRUCT_VTABLE_DATA(X) ((SCM *)(SCM_CAR(X) - 1))
-#define SCM_STRUCT_LAYOUT(X) (SCM_STRUCT_VTABLE_DATA(X)[scm_struct_i_layout])
-#define SCM_STRUCT_VTABLE(X) (SCM_STRUCT_VTABLE_DATA(X)[scm_struct_i_vtable])
+#define SCM_STRUCT_LAYOUT(X) (SCM_STRUCT_VTABLE_DATA(X)[scm_vtable_index_layout])
+#define SCM_STRUCT_VTABLE(X) (SCM_STRUCT_VTABLE_DATA(X)[scm_vtable_index_vtable])
+#define SCM_STRUCT_PRINTER(X) (SCM_STRUCT_VTABLE_DATA(X)[scm_vtable_index_printer])
/* Efficiency is important in the following macro, since it's used in GC */
#define SCM_LAYOUT_TAILP(X) (((X) & 32) == 0) /* R, W or O */