1 USING: accessors alien alien.c-types alien.strings assocs compiler.cfg
2 compiler.cfg.builder compiler.cfg.builder.alien
3 compiler.cfg.builder.alien.params compiler.cfg.builder.blocks
4 compiler.cfg.instructions compiler.cfg.registers compiler.cfg.stacks
5 compiler.errors compiler.test compiler.tree.builder
6 compiler.tree.optimizer cpu.architecture cpu.x86.assembler
7 cpu.x86.assembler.operands kernel literals make namespaces sequences
8 stack-checker.alien system tools.test words ;
9 IN: compiler.cfg.builder.alien.tests
11 : dummy-assembly ( -- ass )
17 <basic-block> dup set-basic-block dup
18 \ dummy-assembly build-tree optimize-tree first
19 [ emit-node ] V{ } make drop eq?
22 : dummy-callback ( -- cb )
23 void { } cdecl [ ] alien-callback ;
26 \ dummy-callback build-tree optimize-tree gensym build-cfg
27 [ length ] [ second frame-pointer?>> ] bi
32 T{ ##load-reference { dst 1 } { obj t } }
33 T{ ##load-integer { dst 2 } { val 3 } }
34 T{ ##copy { dst 4 } { src 1 } { rep any-rep } }
35 T{ ##copy { dst 3 } { src 2 } { rep any-rep } }
36 T{ ##inc { loc D: 2 } }
40 <basic-block> dup set-basic-block
41 \ dummy-callback build-tree optimize-tree 3 swap nth child>>
42 [ emit-callback-body drop ] V{ } make
48 os windows? "msvcrt.dll" f ?
50 f f cdecl f "libc" "malloc" alien-invoke-params boa
52 dup [ path>> alien>native-string ] when
58 begin-stack-analysis \ foo f begin-cfg drop
59 f f cdecl f f "fdkjlsdflfd" alien-invoke-params boa
61 linkage-errors get foo of error>>
62 [ no-such-symbol? ] [ name>> ] bi
85 void { int float double char } cdecl f f "func"
86 alien-invoke-params boa caller-parameters
90 ! caller-stack-cleanup
92 alien-node-params new long >>return cdecl >>abi 25
98 "malloc" f check-dlsym
101 ! prepare-caller-return
103 cpu x86.32? { { 1 int-rep EAX } } { { 1 int-rep RAX } } ?
104 cpu x86.32? { { 2 double-rep ST0 } } { { 2 double-rep XMM0 } } ?
106 T{ alien-invoke-params { return int } } prepare-caller-return
107 T{ alien-invoke-params { return double } } prepare-caller-return
112 ! unboxing ints is only needed on 32bit archs
116 { { int-rep f f } { int-rep f f } }
118 T{ ##unbox-any-c-ptr { dst 2 } { src 1 } }
122 { unboxer "to_fixnum" }
129 { { int-rep f f } { int-rep f f } }
130 V{ T{ ##unbox-any-c-ptr { dst 2 } { src 1 } } }
132 [ { c-string int } unbox-parameters ] V{ } make
141 cdecl [ ] with-param-regs
142 reg-values get stack-values get