]> gitweb.factorcode.org Git - factor.git/blob - extra/size-of/size-of.factor
Update 'size-of' and move to extra from unmaintained
[factor.git] / extra / size-of / size-of.factor
1
2 USING: io io.encodings.ascii io.files io.files.temp io.launcher
3        locals math.parser sequences sequences.deep ;
4
5 IN: size-of
6
7 ! Use 'size-of' to find out the size in bytes of a C type.
8 !
9 ! The 'headers' argument is a list of header files to use. You may
10 ! pass 'f' to only use 'stdio.h'.
11 !
12 ! Examples:
13
14 !   f "int" size-of .
15
16 !   { "X11/Xlib.h" } "XAnyEvent" size-of .
17
18 :: size-of ( HEADERS TYPE -- n )
19
20   [let | C-FILE   [ "size-of.c" temp-file ]
21          EXE-FILE [ "size-of"   temp-file ]
22          INCLUDES [ HEADERS [| FILE | { "#include <" FILE ">" } concat ] map ] |
23
24     {
25       "#include <stdio.h>"
26       INCLUDES
27       "main() { printf( \"%i\" , sizeof( " TYPE " ) ) ; }"
28     }
29
30     flatten C-FILE  ascii  set-file-lines
31
32     { "gcc" C-FILE "-o" EXE-FILE } try-process
33
34     EXE-FILE ascii <process-reader> contents string>number ] ;
35
36 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
37
38