Merge branch 'master' of git://factorcode.org/git/factor
[factor/jcg.git] / basis / alien / arrays / arrays.factor
blob727492edb1567a44905df3ce9893c02ed94b9b3d
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien arrays alien.c-types alien.structs
4 sequences math kernel namespaces make libc cpu.architecture ;
5 IN: alien.arrays
7 UNION: value-type array struct-type ;
9 M: array c-type ;
11 M: array c-type-class drop object ;
13 M: array heap-size unclip heap-size [ * ] reduce ;
15 M: array c-type-align first c-type-align ;
17 M: array c-type-stack-align? drop f ;
19 M: array unbox-parameter drop "void*" unbox-parameter ;
21 M: array unbox-return drop "void*" unbox-return ;
23 M: array box-parameter drop "void*" box-parameter ;
25 M: array box-return drop "void*" box-return ;
27 M: array stack-size drop "void*" stack-size ;
29 M: value-type c-type-reg-class drop int-regs ;
31 M: value-type c-type-boxer-quot drop f ;
33 M: value-type c-type-unboxer-quot drop f ;
35 M: value-type c-type-getter
36     drop [ swap <displaced-alien> ] ;
38 M: value-type c-type-setter ( type -- quot )
39     [
40         dup c-type-getter % \ swap , heap-size , \ memcpy ,
41     ] [ ] make ;