functors: make 'final' declarations work in functors
parent
d2ae4ff4ba
commit
4b76e2a61d
|
@ -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 ;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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! ;
|
||||||
|
|
Loading…
Reference in New Issue