From c7acbda342115e0a8fb5aa287126b9595c934920 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 21 Feb 2010 22:46:52 -0800 Subject: [PATCH] classes.struct: set dependency on slot types in slot accessors, so that accessors update when types change. enables pointers to make circular references between struct types --- basis/classes/struct/struct.factor | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/basis/classes/struct/struct.factor b/basis/classes/struct/struct.factor index 4e7a565a5a..af73be3aa4 100644 --- a/basis/classes/struct/struct.factor +++ b/basis/classes/struct/struct.factor @@ -8,7 +8,8 @@ generalizations generic.parser kernel kernel.private lexer libc locals macros make math math.order parser quotations sequences slots slots.private specialized-arrays vectors words summary namespaces assocs vocabs.parser math.functions -classes.struct.bit-accessors bit-arrays ; +classes.struct.bit-accessors bit-arrays +stack-checker.dependencies ; QUALIFIED: math IN: classes.struct @@ -124,6 +125,14 @@ M: struct-bit-slot-spec (writer-quot) : (unboxer-quot) ( class -- quot ) drop [ >c-ptr ] ; + +MACRO: read-struct-slot ( slot -- ) + dup type>> depends-on-c-type + (reader-quot) ; + +MACRO: write-struct-slot ( slot -- ) + dup type>> depends-on-c-type + (writer-quot) ; PRIVATE> M: struct-class boa>object @@ -138,10 +147,10 @@ M: struct-class initial-value* ; inline GENERIC: struct-slot-values ( struct -- sequence ) M: struct-class reader-quot - nip (reader-quot) ; + nip '[ _ read-struct-slot ] ; M: struct-class writer-quot - nip (writer-quot) ; + nip '[ _ write-struct-slot ] ; : offset-of ( field struct -- offset ) struct-slots slot-named offset>> ; inline