functors: make 'final' declarations work in functors

db4
Slava Pestov 2010-02-18 03:56:41 +13:00
parent d2ae4ff4ba
commit 4b76e2a61d
3 changed files with 52 additions and 7 deletions

View File

@ -1,6 +1,6 @@
USING: accessors arrays assocs generic.standard kernel USING: accessors arrays assocs generic.standard kernel
lexer locals.types namespaces parser quotations vocabs.parser lexer locals.types namespaces parser quotations vocabs.parser
words ; words classes.tuple ;
IN: functors.backend IN: functors.backend
DEFER: functor-words DEFER: functor-words
@ -27,7 +27,11 @@ SYNTAX: FUNCTOR-SYNTAX:
: define* ( word def -- ) over set-word define ; : define* ( word def -- ) over set-word define ;
: define-declared* ( word def effect -- ) pick set-word define-declared ; : define-declared* ( word def effect -- )
pick set-word define-declared ;
: define-simple-generic* ( word effect -- ) over set-word define-simple-generic ; : define-simple-generic* ( word effect -- )
over set-word define-simple-generic ;
: define-tuple-class* ( class superclass slots -- )
pick set-word define-tuple-class ;

View File

@ -1,5 +1,5 @@
USING: classes.struct functors tools.test math words kernel USING: classes.struct classes.tuple functors tools.test math
multiline parser io.streams.string generic ; words kernel multiline parser io.streams.string generic ;
QUALIFIED-WITH: alien.c-types c QUALIFIED-WITH: alien.c-types c
IN: functors.tests IN: functors.tests
@ -36,7 +36,7 @@ WW DEFINES ${W}${W}
WHERE WHERE
: WW ( a -- b ) \ W twice ; inline : WW ( a -- b ) \ W twice ;
;FUNCTOR ;FUNCTOR
@ -211,3 +211,44 @@ STRUCT: T-class
} }
] [ a-struct struct-slots ] unit-test ] [ a-struct struct-slots ] unit-test
<<
FUNCTOR: define-an-inline-word ( W -- )
W DEFINES ${W}
W-W DEFINES ${W}-${W}
WHERE
: W ( -- ) ; inline
: W-W ( -- ) W W ;
;FUNCTOR
"an-inline-word" define-an-inline-word
>>
[ t ] [ \ an-inline-word inline? ] unit-test
[ f ] [ \ an-inline-word-an-inline-word inline? ] unit-test
<<
FUNCTOR: define-a-final-class ( T W -- )
T DEFINES-CLASS ${T}
W DEFINES ${W}
WHERE
TUPLE: T ; final
: W ( -- ) ;
;FUNCTOR
"a-final-tuple" "a-word" define-a-final-class
>>
[ t ] [ a-final-tuple final-class? ] unit-test

View File

@ -61,7 +61,7 @@ FUNCTOR-SYNTAX: TUPLE:
make suffix! make suffix!
] ]
} case } case
\ define-tuple-class suffix! ; \ define-tuple-class* suffix! ;
FUNCTOR-SYNTAX: final FUNCTOR-SYNTAX: final
[ word make-final ] append! ; [ word make-final ] append! ;