make classes.struct work with string pointer slots

Joe Groff 2009-08-25 13:18:20 -05:00
parent 01552987c7
commit e2b444c8bd
2 changed files with 14 additions and 3 deletions

View File

@ -1,7 +1,7 @@
! (c)Joe Groff bsd license ! (c)Joe Groff bsd license
USING: accessors alien.c-types alien.libraries USING: accessors alien.c-types alien.libraries
alien.structs.fields alien.syntax classes.struct combinators alien.structs.fields alien.syntax classes.struct combinators
io.pathnames io.streams.string kernel libc literals math destructors io.pathnames io.streams.string kernel libc literals math
multiline namespaces prettyprint prettyprint.config see system multiline namespaces prettyprint prettyprint.config see system
tools.test ; tools.test ;
IN: classes.struct.tests IN: classes.struct.tests
@ -54,7 +54,18 @@ UNION-STRUCT: struct-test-float-and-bits
[ 1.0 ] [ struct-test-float-and-bits <struct> 1.0 float>bits >>bits f>> ] unit-test [ 1.0 ] [ struct-test-float-and-bits <struct> 1.0 float>bits >>bits f>> ] unit-test
[ 4 ] [ struct-test-float-and-bits heap-size ] unit-test [ 4 ] [ struct-test-float-and-bits heap-size ] unit-test
[ ] [ struct-test-foo malloc-struct free ] unit-test [ ] [ [ struct-test-foo malloc-struct &free drop ] with-destructors ] unit-test
STRUCT: struct-test-string-ptr
{ x char* } ;
[ "hello world" ] [
[
struct-test-string-ptr <struct>
"hello world" utf8 malloc-string &free >>x
x>>
] with-destructors
] unit-test
[ "S{ struct-test-foo { y 7654 } }" ] [ "S{ struct-test-foo { y 7654 } }" ]
[ [

View File

@ -204,7 +204,7 @@ M: struct-class heap-size
ERROR: invalid-struct-slot token ; ERROR: invalid-struct-slot token ;
: struct-slot-class ( c-type -- class' ) : struct-slot-class ( c-type -- class' )
c-type boxed-class>> c-type c-type-boxed-class
dup \ byte-array = [ drop \ c-ptr ] when ; dup \ byte-array = [ drop \ c-ptr ] when ;
: parse-struct-slot ( -- slot ) : parse-struct-slot ( -- slot )