Clean up functors so that the generated code looks sane with 'see'

db4
Slava Pestov 2009-01-28 15:07:16 -06:00
parent f438bd5157
commit 16181f818b
12 changed files with 80 additions and 59 deletions

View File

@ -34,7 +34,7 @@ WW DEFINES ${W}${W}
WHERE WHERE
: WW W twice ; inline : WW ( a -- b ) \ W twice ; inline
;FUNCTOR ;FUNCTOR

View File

@ -1,17 +1,42 @@
! Copyright (C) 2008 Slava Pestov. ! Copyright (C) 2008, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel quotations classes.tuple make combinators generic USING: kernel quotations classes.tuple make combinators generic
words interpolate namespaces sequences io.streams.string fry words interpolate namespaces sequences io.streams.string fry
classes.mixin effects lexer parser classes.tuple.parser classes.mixin effects lexer parser classes.tuple.parser
effects.parser locals.types locals.parser effects.parser locals.types locals.parser
locals.rewrite.closures vocabs.parser ; locals.rewrite.closures vocabs.parser arrays accessors ;
IN: functors IN: functors
! This is a hack
: scan-param ( -- obj ) : scan-param ( -- obj )
scan-object dup special? [ literalize ] unless ; scan-object dup special? [ literalize ] unless ;
: define* ( word def effect -- ) pick set-word define-declared ; : define* ( word def effect -- ) pick set-word define-declared ;
TUPLE: fake-quotation seq ;
GENERIC: >fake-quotations ( quot -- fake )
M: callable >fake-quotations
>array >fake-quotations fake-quotation boa ;
M: array >fake-quotations [ >fake-quotations ] { } map-as ;
M: object >fake-quotations ;
GENERIC: fake-quotations> ( fake -- quot )
M: fake-quotation fake-quotations>
seq>> [ fake-quotations> ] map >quotation ;
M: array fake-quotations> [ fake-quotations> ] map ;
M: object fake-quotations> ;
: parse-definition* ( -- )
parse-definition >fake-quotations parsed \ fake-quotations> parsed ;
: DEFINE* ( accum -- accum ) effect get parsed \ define* parsed ; : DEFINE* ( accum -- accum ) effect get parsed \ define* parsed ;
: `TUPLE: : `TUPLE:
@ -32,7 +57,7 @@ IN: functors
scan-param parsed scan-param parsed
scan-param parsed scan-param parsed
\ create-method parsed \ create-method parsed
parse-definition parsed parse-definition*
DEFINE* ; parsing DEFINE* ; parsing
: `C: : `C:
@ -45,7 +70,7 @@ IN: functors
: `: : `:
effect off effect off
scan-param parsed scan-param parsed
parse-definition parsed parse-definition*
DEFINE* ; parsing DEFINE* ; parsing
: `INSTANCE: : `INSTANCE:

View File

@ -20,9 +20,9 @@ with-mapped-A-file DEFINES with-mapped-${T}-file
WHERE WHERE
: <mapped-A> ( mapped-file -- direct-array ) : <mapped-A> ( mapped-file -- direct-array )
T mapped-file>direct <A> execute ; inline T mapped-file>direct <A> ; inline
: with-mapped-A-file ( path length quot -- ) : with-mapped-A-file ( path length quot -- )
'[ <mapped-A> execute @ ] with-mapped-file ; inline '[ <mapped-A> @ ] with-mapped-file ; inline
;FUNCTOR ;FUNCTOR

View File

@ -1,3 +1,2 @@
math math
bindings bindings
unportable

View File

@ -268,28 +268,28 @@ TUPLE: MATRIX < blas-matrix-base ;
M: MATRIX element-type M: MATRIX element-type
drop TYPE ; drop TYPE ;
M: MATRIX (blas-matrix-like) M: MATRIX (blas-matrix-like)
drop <MATRIX> execute ; drop <MATRIX> ;
M: VECTOR (blas-matrix-like) M: VECTOR (blas-matrix-like)
drop <MATRIX> execute ; drop <MATRIX> ;
M: MATRIX (blas-vector-like) M: MATRIX (blas-vector-like)
drop <VECTOR> execute ; drop <VECTOR> ;
: >MATRIX ( arrays -- matrix ) : >MATRIX ( arrays -- matrix )
[ >ARRAY execute underlying>> ] (>matrix) [ >ARRAY underlying>> ] (>matrix)
<MATRIX> execute ; <MATRIX> ;
M: VECTOR n*M.V+n*V! M: VECTOR n*M.V+n*V!
[ TYPE>ARG execute ] (prepare-gemv) [ TYPE>ARG ] (prepare-gemv)
[ XGEMV execute ] dip ; [ XGEMV ] dip ;
M: MATRIX n*M.M+n*M! M: MATRIX n*M.M+n*M!
[ TYPE>ARG execute ] (prepare-gemm) [ TYPE>ARG ] (prepare-gemm)
[ XGEMM execute ] dip ; [ XGEMM ] dip ;
M: MATRIX n*V(*)V+M! M: MATRIX n*V(*)V+M!
[ TYPE>ARG execute ] (prepare-ger) [ TYPE>ARG ] (prepare-ger)
[ XGERU execute ] dip ; [ XGERU ] dip ;
M: MATRIX n*V(*)Vconj+M! M: MATRIX n*V(*)Vconj+M!
[ TYPE>ARG execute ] (prepare-ger) [ TYPE>ARG ] (prepare-ger)
[ XGERC execute ] dip ; [ XGERC ] dip ;
;FUNCTOR ;FUNCTOR

View File

@ -1,3 +1,2 @@
math math
bindings bindings
unportable

View File

@ -1,5 +1,5 @@
USING: kernel math.blas.vectors math.blas.matrices parser USING: kernel math.blas.vectors math.blas.matrices parser
arrays prettyprint.backend sequences ; arrays prettyprint.backend prettyprint.custom sequences ;
IN: math.blas.syntax IN: math.blas.syntax
: svector{ : svector{

View File

@ -1,2 +1 @@
math math
unportable

View File

@ -1,2 +1 @@
math math
unportable

View File

@ -144,26 +144,26 @@ TUPLE: VECTOR < blas-vector-base ;
: <VECTOR> ( underlying length inc -- vector ) VECTOR boa ; inline : <VECTOR> ( underlying length inc -- vector ) VECTOR boa ; inline
: >VECTOR ( seq -- v ) : >VECTOR ( seq -- v )
[ >ARRAY execute underlying>> ] [ length ] bi 1 <VECTOR> execute ; [ >ARRAY underlying>> ] [ length ] bi 1 <VECTOR> ;
M: VECTOR clone M: VECTOR clone
TYPE heap-size (prepare-copy) TYPE heap-size (prepare-copy)
[ XCOPY execute ] 3dip <VECTOR> execute ; [ XCOPY ] 3dip <VECTOR> ;
M: VECTOR element-type M: VECTOR element-type
drop TYPE ; drop TYPE ;
M: VECTOR Vswap M: VECTOR Vswap
(prepare-swap) [ XSWAP execute ] 2dip ; (prepare-swap) [ XSWAP ] 2dip ;
M: VECTOR Viamax M: VECTOR Viamax
(prepare-nrm2) IXAMAX execute ; (prepare-nrm2) IXAMAX ;
M: VECTOR (blas-vector-like) M: VECTOR (blas-vector-like)
drop <VECTOR> execute ; drop <VECTOR> ;
M: VECTOR (blas-direct-array) M: VECTOR (blas-direct-array)
[ underlying>> ] [ underlying>> ]
[ [ length>> ] [ inc>> ] bi * ] bi [ [ length>> ] [ inc>> ] bi * ] bi
<DIRECT-ARRAY> execute ; <DIRECT-ARRAY> ;
;FUNCTOR ;FUNCTOR
@ -180,17 +180,17 @@ XSCAL IS cblas_${T}scal
WHERE WHERE
M: VECTOR V. M: VECTOR V.
(prepare-dot) XDOT execute ; (prepare-dot) XDOT ;
M: VECTOR V.conj M: VECTOR V.conj
(prepare-dot) XDOT execute ; (prepare-dot) XDOT ;
M: VECTOR Vnorm M: VECTOR Vnorm
(prepare-nrm2) XNRM2 execute ; (prepare-nrm2) XNRM2 ;
M: VECTOR Vasum M: VECTOR Vasum
(prepare-nrm2) XASUM execute ; (prepare-nrm2) XASUM ;
M: VECTOR n*V+V! M: VECTOR n*V+V!
(prepare-axpy) [ XAXPY execute ] dip ; (prepare-axpy) [ XAXPY ] dip ;
M: VECTOR n*V! M: VECTOR n*V!
(prepare-scal) [ XSCAL execute ] dip ; (prepare-scal) [ XSCAL ] dip ;
;FUNCTOR ;FUNCTOR
@ -207,13 +207,13 @@ COMPLEX>ARG DEFINES ${TYPE}-complex>arg
WHERE WHERE
: <DIRECT-COMPLEX-ARRAY> ( alien len -- sequence ) : <DIRECT-COMPLEX-ARRAY> ( alien len -- sequence )
1 shift <DIRECT-ARRAY> execute <complex-sequence> ; 1 shift <DIRECT-ARRAY> <complex-sequence> ;
: >COMPLEX-ARRAY ( sequence -- sequence ) : >COMPLEX-ARRAY ( sequence -- sequence )
<complex-components> >ARRAY execute ; <complex-components> >ARRAY ;
: COMPLEX>ARG ( complex -- alien ) : COMPLEX>ARG ( complex -- alien )
>rect 2array >ARRAY execute underlying>> ; >rect 2array >ARRAY underlying>> ;
: ARG>COMPLEX ( alien -- complex ) : ARG>COMPLEX ( alien -- complex )
2 <DIRECT-ARRAY> execute first2 rect> ; 2 <DIRECT-ARRAY> first2 rect> ;
;FUNCTOR ;FUNCTOR
@ -234,22 +234,22 @@ WHERE
M: VECTOR V. M: VECTOR V.
(prepare-dot) TYPE <c-object> (prepare-dot) TYPE <c-object>
[ XDOTU_SUB execute ] keep [ XDOTU_SUB ] keep
ARG>TYPE execute ; ARG>TYPE ;
M: VECTOR V.conj M: VECTOR V.conj
(prepare-dot) TYPE <c-object> (prepare-dot) TYPE <c-object>
[ XDOTC_SUB execute ] keep [ XDOTC_SUB ] keep
ARG>TYPE execute ; ARG>TYPE ;
M: VECTOR Vnorm M: VECTOR Vnorm
(prepare-nrm2) XXNRM2 execute ; (prepare-nrm2) XXNRM2 ;
M: VECTOR Vasum M: VECTOR Vasum
(prepare-nrm2) XXASUM execute ; (prepare-nrm2) XXASUM ;
M: VECTOR n*V+V! M: VECTOR n*V+V!
[ TYPE>ARG execute ] 2dip [ TYPE>ARG ] 2dip
(prepare-axpy) [ XAXPY execute ] dip ; (prepare-axpy) [ XAXPY ] dip ;
M: VECTOR n*V! M: VECTOR n*V!
[ TYPE>ARG execute ] dip [ TYPE>ARG ] dip
(prepare-scal) [ XSCAL execute ] dip ; (prepare-scal) [ XSCAL ] dip ;
;FUNCTOR ;FUNCTOR

View File

@ -49,9 +49,9 @@ M: A set-nth-unsafe underlying>> SET-NTH call ;
: >A ( seq -- specialized-array ) A new clone-like ; inline : >A ( seq -- specialized-array ) A new clone-like ; inline
M: A like drop dup A instance? [ >A execute ] unless ; M: A like drop dup A instance? [ >A ] unless ;
M: A new-sequence drop (A) execute ; M: A new-sequence drop (A) ;
M: A equal? over A instance? [ sequence= ] [ 2drop f ] if ; M: A equal? over A instance? [ sequence= ] [ 2drop f ] if ;
@ -70,7 +70,7 @@ M: A >pprint-sequence ;
M: A pprint* pprint-object ; M: A pprint* pprint-object ;
: A{ \ } [ >A execute ] parse-literal ; parsing : A{ \ } [ >A ] parse-literal ; parsing
INSTANCE: A sequence INSTANCE: A sequence

View File

@ -18,16 +18,16 @@ WHERE
TUPLE: V { underlying A } { length array-capacity } ; TUPLE: V { underlying A } { length array-capacity } ;
: <V> ( capacity -- vector ) <A> execute 0 V boa ; inline : <V> ( capacity -- vector ) <A> 0 V boa ; inline
M: V like M: V like
drop dup V instance? [ drop dup V instance? [
dup A instance? [ dup length V boa ] [ >V execute ] if dup A instance? [ dup length V boa ] [ >V ] if
] unless ; ] unless ;
M: V new-sequence drop [ <A> execute ] [ >fixnum ] bi V boa ; M: V new-sequence drop [ <A> ] [ >fixnum ] bi V boa ;
M: A new-resizable drop <V> execute ; M: A new-resizable drop <V> ;
M: V equal? over V instance? [ sequence= ] [ 2drop f ] if ; M: V equal? over V instance? [ sequence= ] [ 2drop f ] if ;
@ -39,7 +39,7 @@ M: V >pprint-sequence ;
M: V pprint* pprint-object ; M: V pprint* pprint-object ;
: V{ \ } [ >V execute ] parse-literal ; parsing : V{ \ } [ >V ] parse-literal ; parsing
INSTANCE: V growable INSTANCE: V growable