From 3a7e6b157f0b798403f36efecfdffab074603fd5 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sat, 29 Aug 2009 22:54:56 -0500 Subject: [PATCH] implement clone on struct classes to copy the struct contents --- basis/classes/struct/struct-tests.factor | 4 +++- basis/classes/struct/struct.factor | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) 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