]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/alien/data/map/map.factor
factor: trim using lists
[factor.git] / extra / alien / data / map / map.factor
index 72f5cb5517ecf55cb46e3a5c6bae83655fc4888f..a7a50f57622b08ed957b69bf25d2a4106449f3e0 100644 (file)
@@ -1,7 +1,9 @@
-! (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 sequences.private ;
+! 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
 
@@ -27,7 +29,7 @@ M: data-map-param nth-unsafe
         [ iter-length>> * >fixnum ]
         [ bytes>> ]
         [ count>> ]
-        [ c-type>> ] 
+        [ c-type>> ]
     } cleave <displaced-direct-array> ; inline
 
 INSTANCE: data-map-param immutable-sequence
@@ -50,11 +52,11 @@ 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] ;
@@ -74,16 +76,17 @@ MACRO: >param ( in -- quot: ( array -- 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 )
@@ -103,7 +106,7 @@ MACRO: pack-params ( outs -- )
         [ orig>> ] , #outs , \ napply ,
     ] [ ] make fry \ call suffix ;
 
-MACRO: data-map ( ins outs -- )
+MACRO: data-map ( ins outs -- quot )
     2dup
     [
         [ [ '[ _ >param ] ] map '[ _ spread ] ]
@@ -112,19 +115,18 @@ MACRO: data-map ( ins outs -- )
     [ [ '[ _ 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 )
     ")" parse-effect
-    [ in>>  [ (parse-c-type) ] map parsed ]
-    [ out>> [ (parse-c-type) ] map parsed ] bi ;
+    [ in>>  [ (parse-c-type) ] map suffix! ]
+    [ out>> [ (parse-c-type) ] map suffix! ] bi ;
 
 PRIVATE>
 
 SYNTAX: data-map(
-    parse-data-map-effect \ data-map parsed ;
+    parse-data-map-effect \ data-map suffix! ;
 
 SYNTAX: data-map!(
-    parse-data-map-effect \ data-map! parsed ;
-
+    parse-data-map-effect \ data-map! suffix! ;