-! (c)Joe Groff bsd license
-USING: accessors alien alien.c-types alien.data alien.parser arrays
-byte-arrays combinators effects.parser fry generalizations grouping kernel
-lexer locals macros make math math.ranges parser sequences
+! Copyright (C) 2009, 2010 Joe Groff.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien alien.arrays alien.c-types alien.data
+alien.parser arrays byte-arrays combinators effects.parser fry
+generalizations grouping kernel make math sequences
sequences.generalizations sequences.private ;
FROM: alien.arrays => array-length ;
IN: alien.data.map
[ iter-length>> * >fixnum ]
[ bytes>> ]
[ count>> ]
- [ c-type>> ]
+ [ c-type>> ]
} cleave <displaced-direct-array> ; inline
INSTANCE: data-map-param immutable-sequence
] ;
: [>object-param] ( class count -- quot )
- nip '[ _ <sliced-groups> ] ;
+ nip '[ _ <groups> ] ;
: [>param] ( type -- quot )
c-type-count over c-type-name?
- [ [>c-type-param] ] [ [>object-param] ] if ;
+ [ [>c-type-param] ] [ [>object-param] ] if ;
MACRO: >param ( in -- quot: ( array -- param ) )
[>param] ;
: [alloc-param] ( type -- quot )
c-type-count over c-type-name?
- [ [alloc-c-type-param] ] [ [alloc-object-param] ] if ;
+ [ [alloc-c-type-param] ] [ [alloc-object-param] ] if ;
MACRO: alloc-param ( out -- quot: ( len -- param ) )
[alloc-param] ;
-MACRO: unpack-params ( ins -- )
+MACRO: unpack-params ( ins -- quot )
[ c-type-count nip '[ _ firstn-unsafe ] ] map '[ _ spread ] ;
-MACRO: pack-params ( outs -- )
- [ ] [ c-type-count nip dup [ [ ndip _ ] dip set-firstn ] 3curry ] reduce
+MACRO: pack-params ( outs -- quot )
+ [ ] [ c-type-count nip dup
+ [ [ ndip POSTPONE: _ ] dip set-firstn ] 3curry ] reduce
fry [ call ] compose ;
:: [data-map] ( ins outs param-quot -- quot )
[ orig>> ] , #outs , \ napply ,
] [ ] make fry \ call suffix ;
-MACRO: data-map ( ins outs -- )
+MACRO: data-map ( ins outs -- quot )
2dup
[
[ [ '[ _ >param ] ] map '[ _ spread ] ]
[ [ '[ _ alloc-param ] ] map '[ _ cleave ] ] bi* compose
[data-map] ;
-MACRO: data-map! ( ins outs -- )
+MACRO: data-map! ( ins outs -- quot )
2dup append [ '[ _ >param ] ] map '[ _ spread ] [data-map] ;
: parse-data-map-effect ( accum -- accum )
SYNTAX: data-map!(
parse-data-map-effect \ data-map! suffix! ;
-