From d450d12b2b86091482bcc5d9acf0a53ae6028194 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 15 Aug 2010 02:44:21 -0700 Subject: [PATCH] classes.struct: fields with a type that's an array of pointers (eg int*[3]) now work --- basis/alien/data/data.factor | 9 +++++++++ basis/classes/struct/struct-tests.factor | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/basis/alien/data/data.factor b/basis/alien/data/data.factor index d755ac387b..52ccf6f6d1 100644 --- a/basis/alien/data/data.factor +++ b/basis/alien/data/data.factor @@ -22,16 +22,25 @@ GENERIC: ( len c-type -- array ) M: word c-array-constructor execute( len -- array ) ; inline +M: pointer + drop void* ; + GENERIC: (c-array) ( len c-type -- array ) M: word (c-array) c-(array)-constructor execute( len -- array ) ; inline +M: pointer (c-array) + drop void* (c-array) ; + GENERIC: ( alien len c-type -- array ) M: word c-direct-array-constructor execute( alien len -- array ) ; inline +M: pointer + drop void* ; + : malloc-array ( n type -- array ) [ heap-size calloc ] [ ] 2bi ; inline diff --git a/basis/classes/struct/struct-tests.factor b/basis/classes/struct/struct-tests.factor index b42684806b..90f60a4205 100644 --- a/basis/classes/struct/struct-tests.factor +++ b/basis/classes/struct/struct-tests.factor @@ -476,3 +476,9 @@ CONSULT: struct-test-delegate struct-test-delegator del>> ; 7 >>a 8 >>b ] unit-test + +SPECIALIZED-ARRAY: void* + +STRUCT: silly-array-field-test { x int*[3] } ; + +[ t ] [ silly-array-field-test x>> void*-array? ] unit-test