diff --git a/basis/classes/struct/struct-tests.factor b/basis/classes/struct/struct-tests.factor index 52e766a682..0cd91da370 100644 --- a/basis/classes/struct/struct-tests.factor +++ b/basis/classes/struct/struct-tests.factor @@ -1,5 +1,5 @@ ! (c)Joe Groff bsd license -USING: accessors alien.c-types alien.libraries +USING: accessors alien alien.c-types alien.libraries alien.structs.fields alien.syntax ascii classes.struct combinators destructors io.encodings.utf8 io.pathnames io.streams.string kernel libc literals math multiline namespaces prettyprint @@ -203,3 +203,5 @@ STRUCT: struct-test-optimization ] unit-test [ f ] [ [ memory>struct y>> ] { memory>struct y>> } inlined? ] unit-test + +[ f ] [ struct-test-foo dup clone [ >c-ptr ] bi@ eq? ] unit-test diff --git a/basis/classes/struct/struct.factor b/basis/classes/struct/struct.factor index 94eebca081..4cb275f86f 100644 --- a/basis/classes/struct/struct.factor +++ b/basis/classes/struct/struct.factor @@ -46,6 +46,9 @@ M: struct equal? dup struct-class? [ '[ _ boa ] ] [ drop f ] if ] 1 define-partial-eval +M: struct clone + [ >c-ptr ] [ byte-length memory>byte-array ] [ class memory>struct ] tri ; + : (init-struct) ( class with-prototype: ( prototype -- alien ) sans-prototype: ( class -- alien ) -- alien ) '[ dup struct-prototype _ _ ?if ] keep memory>struct ; inline