diff --git a/basis/classes/struct/prettyprint/prettyprint.factor b/basis/classes/struct/prettyprint/prettyprint.factor index feeecd881b..6368424ec6 100644 --- a/basis/classes/struct/prettyprint/prettyprint.factor +++ b/basis/classes/struct/prettyprint/prettyprint.factor @@ -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 > 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 diff --git a/basis/classes/struct/struct-tests.factor b/basis/classes/struct/struct-tests.factor index 64b8ba83e2..2995e9d6d6 100644 --- a/basis/classes/struct/struct-tests.factor +++ b/basis/classes/struct/struct-tests.factor @@ -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 ] [ diff --git a/basis/classes/struct/struct.factor b/basis/classes/struct/struct.factor index 52f3b7df9f..2cafb5e8fe 100644 --- a/basis/classes/struct/struct.factor +++ b/basis/classes/struct/struct.factor @@ -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? )