support { type dimension } c-type syntax in STRUCT: definitions

db4
Joe Groff 2009-08-27 21:39:43 -05:00
parent c3002ed0f0
commit 80a5bf7138
3 changed files with 7 additions and 4 deletions

View File

@ -1,7 +1,7 @@
! (c)Joe Groff bsd license
USING: accessors assocs classes classes.struct combinators
kernel math prettyprint.backend prettyprint.custom
prettyprint.sections see.private sequences words ;
prettyprint.sections see.private sequences strings words ;
IN: classes.struct.prettyprint
<PRIVATE
@ -18,7 +18,7 @@ IN: classes.struct.prettyprint
<flow \ { pprint-word
{
[ name>> text ]
[ c-type>> text ]
[ c-type>> dup string? [ text ] [ pprint* ] if ]
[ read-only>> [ \ read-only pprint-word ] when ]
[ initial>> [ \ initial: pprint-word pprint* ] when* ]
} cleave

View File

@ -187,7 +187,7 @@ STRUCT: struct-test-array-slots
] unit-test
STRUCT: struct-test-optimization
{ x int[3] } { y int } ;
{ x { "int" 3 } } { y int } ;
[ t ] [ [ struct-test-optimization memory>struct y>> ] { memory>struct y>> } inlined? ] unit-test
[ t ] [

View File

@ -232,10 +232,13 @@ ERROR: invalid-struct-slot token ;
c-type c-type-boxed-class
dup \ byte-array = [ drop \ c-ptr ] when ;
: scan-c-type ( -- c-type )
scan dup "{" = [ drop \ } parse-until >array ] when ;
: parse-struct-slot ( -- slot )
struct-slot-spec new
scan >>name
scan [ >>c-type ] [ struct-slot-class >>class ] bi
scan-c-type [ >>c-type ] [ struct-slot-class >>class ] bi
\ } parse-until [ dup empty? ] [ peel-off-attributes ] until drop ;
: parse-struct-slots ( slots -- slots' more? )