diff --git a/basis/classes/struct/struct-tests.factor b/basis/classes/struct/struct-tests.factor index 86ac0c657a..b31d8473ab 100644 --- a/basis/classes/struct/struct-tests.factor +++ b/basis/classes/struct/struct-tests.factor @@ -184,6 +184,14 @@ STRUCT: struct-test-equality-2 ] with-destructors ] unit-test +[ t ] [ + [ + struct-test-equality-1 5 >>x + struct-test-equality-1 malloc-struct &free 5 >>x + [ hashcode ] bi@ = + ] with-destructors +] unit-test + STRUCT: struct-test-ffi-foo { x int } { y int } ; diff --git a/basis/classes/struct/struct.factor b/basis/classes/struct/struct.factor index 45dd8405dc..87813f792f 100644 --- a/basis/classes/struct/struct.factor +++ b/basis/classes/struct/struct.factor @@ -6,7 +6,7 @@ combinators combinators.short-circuit combinators.smart functors.backend fry generalizations generic.parser kernel kernel.private lexer libc locals macros make math math.order parser quotations sequences slots slots.private struct-arrays vectors -words compiler.tree.propagation.transforms ; +words compiler.tree.propagation.transforms specialized-arrays.direct.uchar ; FROM: slots => reader-word writer-word ; IN: classes.struct @@ -35,7 +35,10 @@ M: struct equal? { [ [ class ] bi@ = ] [ [ >c-ptr ] [ [ >c-ptr ] [ byte-length ] bi ] bi* memory= ] - } 2&& ; + } 2&& ; inline + +M: struct hashcode* + [ >c-ptr ] [ byte-length ] bi hashcode* ; inline : struct-prototype ( class -- prototype ) "prototype" word-prop ; foldable