tweak parse-c-type so data-map can parse non-c-types
parent
2ae8edeb9d
commit
21b289e836
|
@ -10,16 +10,22 @@ IN: alien.parser
|
|||
: parse-c-type-name ( name -- word )
|
||||
dup search [ ] [ no-word ] ?if ;
|
||||
|
||||
: parse-c-type ( string -- type )
|
||||
: (parse-c-type) ( string -- type )
|
||||
{
|
||||
{ [ dup "void" = ] [ drop void ] }
|
||||
{ [ CHAR: ] over member? ] [ parse-array-type parse-c-type-name prefix ] }
|
||||
{ [ dup search c-type-word? ] [ parse-c-type-name ] }
|
||||
{ [ "**" ?tail ] [ drop void* ] }
|
||||
{ [ "*" ?tail ] [ parse-c-type-name resolve-pointer-type ] }
|
||||
[ dup search [ no-c-type ] [ no-word ] ?if ]
|
||||
{ [ dup "void" = ] [ drop void ] }
|
||||
{ [ CHAR: ] over member? ] [ parse-array-type parse-c-type-name prefix ] }
|
||||
{ [ dup search ] [ parse-c-type-name ] }
|
||||
{ [ "**" ?tail ] [ drop void* ] }
|
||||
{ [ "*" ?tail ] [ parse-c-type-name resolve-pointer-type ] }
|
||||
[ dup search [ ] [ no-word ] ?if ]
|
||||
} cond ;
|
||||
|
||||
: valid-c-type? ( c-type -- ? )
|
||||
{ [ array? ] [ c-type-name? ] } 1|| ;
|
||||
|
||||
: parse-c-type ( string -- type )
|
||||
(parse-c-type) dup valid-c-type? [ no-c-type ] unless ;
|
||||
|
||||
: scan-c-type ( -- c-type )
|
||||
scan dup "{" =
|
||||
[ drop \ } parse-until >array ]
|
||||
|
|
|
@ -13,6 +13,17 @@ IN: alien.data.map.tests
|
|||
byte-array>float-array
|
||||
] unit-test
|
||||
|
||||
[
|
||||
float-4-array{
|
||||
float-4{ 0.0 0.0 0.0 0.0 }
|
||||
float-4{ 1.0 1.0 1.0 1.0 }
|
||||
float-4{ 2.0 2.0 2.0 2.0 }
|
||||
}
|
||||
] [
|
||||
3 iota [ float-4-with ] data-map( object -- float-4 )
|
||||
byte-array>float-4-array
|
||||
] unit-test
|
||||
|
||||
[
|
||||
float-4-array{
|
||||
float-4{ 0.0 1.0 2.0 3.0 }
|
||||
|
|
|
@ -117,8 +117,8 @@ MACRO: data-map! ( ins outs -- )
|
|||
|
||||
: 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 parsed ]
|
||||
[ out>> [ (parse-c-type) ] map parsed ] bi ;
|
||||
|
||||
PRIVATE>
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ TUPLE: grid-mesh dim buffer row-length ;
|
|||
|
||||
: vertex-array-row ( range z0 z1 -- vertices )
|
||||
'[ _ _ [ 0.0 swap 1.0 float-4-boa ] bi-curry@ bi ]
|
||||
data-map( void -- float-4[2] ) ; inline
|
||||
data-map( object -- float-4[2] ) ; inline
|
||||
|
||||
: vertex-array ( dim -- vertices )
|
||||
first2 [ [ 0.0 1.0 1.0 ] dip /f <range> ] bi@
|
||||
|
|
Loading…
Reference in New Issue