2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								USING:  accessors  alien  alien.c-types  alien.libraries 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								alien.syntax arrays classes.struct combinators
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 21:48:12 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								compiler continuations effects generalizations io
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								io.backend io.pathnames io.streams.string kernel
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								math memory namespaces namespaces.private parser
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								quotations sequences specialized-arrays stack-checker
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								stack-checker.errors system threads tools.test words
							 
						 
					
						
							
								
									
										
										
										
											2010-05-19 01:53:32 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								alien.complex concurrency.promises alien.data
							 
						 
					
						
							
								
									
										
										
										
											2010-09-30 23:48:52 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte-arrays classes compiler.test libc ;
 
							 
						 
					
						
							
								
									
										
										
										
											2009-09-16 10:20:47 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								FROM:  alien.c-types  => float  short  ;
 
							 
						 
					
						
							
								
									
										
										
										
											2009-09-09 23:33:34 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								SPECIALIZED-ARRAY: float
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								SPECIALIZED-ARRAY: char
							 
						 
					
						
							
								
									
										
										
										
											2009-04-26 01:51:47 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								IN:  compiler.tests.alien 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-18 18:46:31 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								! Make sure that invalid inputs don't pass the stack checker 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ [ void { } "cdecl"  alien-indirect ] infer ] must-fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ [ "void"  { } cdecl alien-indirect ] infer ] must-fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ [ void* 3  cdecl alien-indirect ] infer ] must-fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ [ void* { "int"  } cdecl alien-indirect ] infer ] must-fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ [ void* { int } cdecl { } alien-callback ] infer ] must-fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-25 14:05:34 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								<<
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  libfactor-ffi-tests-path  (  --  string  )
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-28 18:25:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    "resource:"  absolute-path
							 
						 
					
						
							
								
									
										
										
										
											2009-03-25 14:05:34 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    {
							 
						 
					
						
							
								
									
										
										
										
											2009-03-26 19:56:10 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        { [ os winnt? ]  [ "libfactor-ffi-test.dll"  ] }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        { [ os macosx? ] [ "libfactor-ffi-test.dylib"  ] }
							 
						 
					
						
							
								
									
										
										
										
											2009-03-28 15:41:48 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        { [ os unix?  ]  [ "libfactor-ffi-test.so"  ] }
							 
						 
					
						
							
								
									
										
										
										
											2009-03-26 19:56:10 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    } cond  append-path ;
 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-25 14:05:34 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  mingw?  (  --  ?  )  os windows? vm-compiler "GCC"  head?  and  ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								"f-cdecl"  libfactor-ffi-tests-path mingw? mingw cdecl ?  add-library
							 
						 
					
						
							
								
									
										
										
										
											2009-03-25 14:05:34 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:29:04 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								"f-stdcall"  libfactor-ffi-tests-path stdcall add-library
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 05:22:42 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								"f-fastcall"  libfactor-ffi-tests-path fastcall add-library
							 
						 
					
						
							
								
									
										
										
										
											2009-03-25 14:05:34 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								>>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-27 18:58:31 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								LIBRARY: f-cdecl
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: void ffi_test_0 ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ ] [ ffi_test_0 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: int ffi_test_1 ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 3  ] [ ffi_test_1 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-28 00:49:26 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ ] [ \ ffi_test_1  def>> [ drop  ] append  compile-call ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: int ffi_test_2 int x int y ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 5  ] [ 2  3  ffi_test_2 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ "hi"  3  ffi_test_2 ] must-fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: int ffi_test_3 int x int y int z int t  ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 25  ] [ 2  3  4  5  ffi_test_3 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: float  ffi_test_4 ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1.5  ] [ ffi_test_4 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: double ffi_test_5 ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1.5  ] [ ffi_test_5 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: int ffi_test_9 int a int b int c int d int e int f  int g ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 28  ] [ 1  2  3  4  5  6  7  ffi_test_9 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ "a"  2  3  4  5  6  7  ffi_test_9 ] must-fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1  2  3  4  5  6  "a"  ffi_test_9 ] must-fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  FOO  { x int } { y int } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  make-FOO  (  x  y  --  FOO  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    FOO <struct> swap  >>y swap  >>x ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								FUNCTION: int ffi_test_11 int a FOO b int c ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 14  ] [ 1  2  3  make-FOO 4  ffi_test_11 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: int ffi_test_13 int a int b int c int d int e int f  int g int h int i int j int k ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 66  ] [ 1  2  3  4  5  6  7  8  9  10  11  ffi_test_13 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								FUNCTION: FOO ffi_test_14 int x int y ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 11  6  ] [ 11  6  ffi_test_14 [ x>> ] [ y>> ] bi  ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 14:42:02 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								FUNCTION: c-string ffi_test_15 c-string x c-string y ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ "foo"  ] [ "xy"  "zt"  ffi_test_15 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ "bar"  ] [ "xy"  "xy"  ffi_test_15 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1  2  ffi_test_15 ] must-fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  BAR  { x long } { y long } { z long } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								FUNCTION: BAR ffi_test_16 long x long y long z ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 11  6  -7  ] [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    11  6  -7  ffi_test_16 [ x>> ] [ y>> ] [ z>> ] tri
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  TINY  { x int } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								FUNCTION: TINY ffi_test_17 int x ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 11  ] [ 11  ffi_test_17 x>> ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ [ alien-indirect ] infer ] [ inference-error? ] must-fail-with
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  indirect-test-1  (  ptr  --  result  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    int { } cdecl alien-indirect ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 1  1  } [ indirect-test-1 ] must-infer-as
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-11 01:03:58 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 3  ] [ &: ffi_test_1 indirect-test-1 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-09-01 03:04:42 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  indirect-test-1'  (  ptr  --  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    int { } cdecl alien-indirect drop  ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-01 03:04:42 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 1  0  } [ indirect-test-1' ] must-infer-as
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-11 01:03:58 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ ] [ &: ffi_test_1 indirect-test-1' ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-09-01 03:04:42 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								[ -1  indirect-test-1 ] must-fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  indirect-test-2  (  x  y  ptr  --  result  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    int { int int } cdecl alien-indirect gc ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 3  1  } [ indirect-test-2 ] must-infer-as
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 5  ]
							 
						 
					
						
							
								
									
										
										
										
											2008-12-11 01:03:58 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 2  3  &: ffi_test_2 indirect-test-2 ]
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  indirect-test-3  (  a  b  c  d  ptr  --  result  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:29:04 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    int { int int int int } stdcall alien-indirect
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    gc ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-25 14:05:34 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ f  ] [ "f-stdcall"  load-library f  =  ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:29:04 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ stdcall ] [ "f-stdcall"  library abi>> ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  ffi_test_18  (  w  x  y  z  --  int  )
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-21 19:44:00 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    int "f-stdcall"  "ffi_test_18"  { int int int int }
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    alien-invoke gc ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 25  ] [ 2  3  4  5  ffi_test_18 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  ffi_test_19  (  x  y  z  --  BAR  )
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-21 19:44:00 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    BAR "f-stdcall"  "ffi_test_19"  { long long long }
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    alien-invoke gc ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 11  6  -7  ] [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    11  6  -7  ffi_test_19 [ x>> ] [ y>> ] [ z>> ] tri
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 21:48:12 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  multi_ffi_test_18  (  w  x  y  z  w'  x'  y'  z'  --  int  int  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    [ int "f-stdcall"  "ffi_test_18"  { int int int int } alien-invoke ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    4  ndip
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int "f-stdcall"  "ffi_test_18"  { int int int int } alien-invoke
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    gc ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 25  85  ] [ 2  3  4  5  6  7  8  9  multi_ffi_test_18 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: double ffi_test_6 float  x float  y ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 6.0  ] [ 3.0  2.0  ffi_test_6 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ "a"  "b"  ffi_test_6 ] must-fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: double ffi_test_7 double x double y ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 6.0  ] [ 3.0  2.0  ffi_test_7 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: double ffi_test_8 double x float  y double z float  t  int w ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 19.0  ] [ 3.0  2.0  1.0  6.0  7  ffi_test_8 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: int ffi_test_10 int a int b double c int d float  e int f  int g int h ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ -34  ] [ 1  2  3.0  4  5.0  6  7  8  ffi_test_10 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: void ffi_test_20 double x1, double x2, double x3,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    double y1, double y2, double y3,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    double z1, double z2, double z3 ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ ] [ 1.0  2.0  3.0  4.0  5.0  6.0  7.0  8.0  9.0  ffi_test_20 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								! Make sure XT doesn't get clobbered in stack frame 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-11-17 13:23:44 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  ffi_test_31  (  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  --  result  y  )
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-21 19:44:00 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    int
							 
						 
					
						
							
								
									
										
										
										
											2009-03-27 15:39:45 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    "f-cdecl"  "ffi_test_31" 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-21 19:44:00 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { int int int int int int int int int int int int int int int int int int int int int int int int int int int int int int int int int int int int int int int int int int }
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    alien-invoke gc 3  ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-14 10:10:13 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 861  3  ] [ 42  [ ] each-integer  ffi_test_31 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-11-17 13:23:44 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  ffi_test_31_point_5  (  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  a  --  result  )
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-21 19:44:00 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    float
 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-27 18:58:31 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    "f-cdecl"  "ffi_test_31_point_5" 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-21 19:44:00 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  float  }
							 
						 
					
						
							
								
									
										
										
										
											2008-11-17 13:23:44 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    alien-invoke ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-14 10:10:13 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 861.0  ] [ 42  [ >float  ] each-integer  ffi_test_31_point_5 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: longlong ffi_test_21 long x long y ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 121932631112635269  ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 123456789  987654321  ffi_test_21 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: long ffi_test_22 long x longlong y longlong z ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 987655432  ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1111  121932631112635269  123456789  ffi_test_22 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1111  f  123456789  ffi_test_22 ] must-fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  RECT 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 13:00:06 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { x float  } { y float  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { w float  } { h float  } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  <RECT>  (  x  y  w  h  --  rect  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    RECT <struct>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        swap  >>h
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        swap  >>w
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        swap  >>y
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        swap  >>x ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								FUNCTION: int ffi_test_12 int a int b RECT c int d int e int f  ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 45  ] [ 1  2  3.0  4.0  5.0  6.0  <RECT> 7  8  9  ffi_test_12 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1  2  { 1  2  3  } 7  8  9  ffi_test_12 ] must-fail
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION:  float ffi_test_23  ( float[3] x, float[3] y ) ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-11-14 21:18:16 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 32.0  ] [
							 
						 
					
						
							
								
									
										
										
										
											2009-02-06 05:37:28 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { 1.0  2.0  3.0  } >float-array
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 4.0  5.0  6.0  } >float-array
							 
						 
					
						
							
								
									
										
										
										
											2008-11-14 21:18:16 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ffi_test_23
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								! Test odd-size structs 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test-struct-1  { x char[1] } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: test-struct-1 ffi_test_24 ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ S{ test-struct-1 { x char-array{ 1  } } } ] [ ffi_test_24 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test-struct-2  { x char[2] } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: test-struct-2 ffi_test_25 ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ S{ test-struct-2 { x char-array{ 1  2  } } } ] [ ffi_test_25 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test-struct-3  { x char[3] } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: test-struct-3 ffi_test_26 ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ S{ test-struct-3 { x char-array{ 1  2  3  } } } ] [ ffi_test_26 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test-struct-4  { x char[4] } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: test-struct-4 ffi_test_27 ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ S{ test-struct-4 { x char-array{ 1  2  3  4  } } } ] [ ffi_test_27 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test-struct-5  { x char[5] } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: test-struct-5 ffi_test_28 ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ S{ test-struct-5 { x char-array{ 1  2  3  4  5  } } } ] [ ffi_test_28 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test-struct-6  { x char[6] } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: test-struct-6 ffi_test_29 ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ S{ test-struct-6 { x char-array{ 1  2  3  4  5  6  } } } ] [ ffi_test_29 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test-struct-7  { x char[7] } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: test-struct-7 ffi_test_30 ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-26 12:01:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ S{ test-struct-7 { x char-array{ 1  2  3  4  5  6  7  } } } ] [ ffi_test_30 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 13:00:06 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test-struct-8  { x double } { y double } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: double ffi_test_32 test-struct-8 x int y ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 9.0  ] [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test-struct-8 <struct>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    1.0  >>x
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    2.0  >>y
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    3  ffi_test_32
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 13:00:06 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test-struct-9  { x float  } { y float  } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: double ffi_test_33 test-struct-9 x int y ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 9.0  ] [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test-struct-9 <struct>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    1.0  >>x
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    2.0  >>y
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    3  ffi_test_33
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 13:00:06 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test-struct-10  { x float  } { y int } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: double ffi_test_34 test-struct-10 x int y ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 9.0  ] [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test-struct-10 <struct>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    1.0  >>x
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    2  >>y
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    3  ffi_test_34
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test-struct-11  { x int } { y int } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: double ffi_test_35 test-struct-11 x int y ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 9.0  ] [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test-struct-11 <struct>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    1  >>x
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    2  >>y
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    3  ffi_test_35
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 13:00:06 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test-struct-12  { a int } { x double } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-09-09 04:10:43 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  make-struct-12  (  x  --  alien  )
 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test-struct-12 <struct>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        swap  >>x ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION:  double ffi_test_36  ( test-struct-12 x ) ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1.23456  ] [ 1.23456  make-struct-12 ffi_test_36 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION:  ulonglong ffi_test_38  ( ulonglong x, ulonglong y ) ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ t  ] [ 31  2^  32  2^  ffi_test_38 63  2^  =  ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								! Test callbacks 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  callback-1  (  --  callback  )  void { } cdecl [ ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-14 10:10:13 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 0  1  ] [ [ callback-1 ] infer [ in>> length  ] [ out>> length  ] bi  ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ t  ] [ callback-1 alien? ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  callback_test_1  (  ptr  --  )  void { } cdecl alien-indirect ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ ] [ callback-1 callback_test_1 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  callback-2  (  --  callback  )  void { } cdecl [ [ 5  throw  ] ignore-errors  ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ ] [ callback-2 callback_test_1 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  callback-3  (  --  callback  )  void { } cdecl [ 5  "x"  set  ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-03-18 05:06:00 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ t  3  5  ] [
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    [
							 
						 
					
						
							
								
									
										
										
										
											2010-03-18 05:06:00 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        namestack*
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        3  "x"  set  callback-3 callback_test_1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        namestack* eq?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        "x"  get  "x"  get-global
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    ] with-scope
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  callback-5  (  --  callback  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    void { } cdecl [ gc ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ "testing"  ] [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "testing"  callback-5 callback_test_1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-16 12:39:22 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  callback-5b  (  --  callback  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    void { } cdecl [ compact-gc ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-16 12:39:22 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ "testing"  ] [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "testing"  callback-5b callback_test_1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  callback-6  (  --  callback  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    void { } cdecl [ [ continue  ] callcc0  ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1  2  3  ] [ callback-6 callback_test_1 1  2  3  ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  callback-7  (  --  callback  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    void { } cdecl [ 1000000  sleep ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1  2  3  ] [ callback-7 callback_test_1 1  2  3  ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ f  ] [ namespace  global  eq?  ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  callback-8  (  --  callback  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    void { } cdecl [ [ ] in-thread yield ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ ] [ callback-8 callback_test_1 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  callback-9  (  --  callback  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    int { int int int } cdecl [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-13 20:21:44 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        +  +  1  +
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 16:30:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    ] alien-callback ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: void ffi_test_36_point_5 (  )  ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ ] [ ffi_test_36_point_5 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION:  int ffi_test_37  ( void* func ) ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1  ] [ callback-9 ffi_test_37 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 7  ] [ callback-9 ffi_test_37 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-09-09 04:10:43 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test_struct_13 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 13:00:06 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								{ x1 float  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ x2 float  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ x3 float  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ x4 float  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ x5 float  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ x6 float  } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-09 04:10:43 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  make-test-struct-13  (  --  alien  )
 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test_struct_13 <struct>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        1.0  >>x1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        2.0  >>x2
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        3.0  >>x3
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        4.0  >>x4
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        5.0  >>x5
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        6.0  >>x6 ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-09 04:10:43 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION:  int ffi_test_39  ( long a, long b, test_struct_13 s ) ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 21  ] [ 12347  12347  make-test-struct-13 ffi_test_39 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-09-12 01:04:56 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								! Joe Groff found this problem 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  double-rect 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 13:00:06 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								{ a double }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ b double }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ c double }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ d double } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-12 01:04:56 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  <double-rect>  (  a  b  c  d  --  foo  )
 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    double-rect <struct>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        swap  >>d
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        swap  >>c
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        swap  >>b
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        swap  >>a ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-12 01:04:56 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  >double-rect<  (  foo  --  a  b  c  d  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    {
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        [ a>> ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        [ b>> ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        [ c>> ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        [ d>> ]
							 
						 
					
						
							
								
									
										
										
										
											2008-09-12 01:04:56 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    } cleave  ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  double-rect-callback  (  --  alien  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    void { void* void* double-rect } cdecl
							 
						 
					
						
							
								
									
										
										
										
											2008-09-12 01:04:56 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    [ "example"  set-global  2drop  ] alien-callback ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-10 03:41:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  double-rect-test  (  arg  callback  --  arg'  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 20:06:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    [ f  f  ] 2dip
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    void { void* void* double-rect } cdecl alien-indirect
							 
						 
					
						
							
								
									
										
										
										
											2008-09-12 01:04:56 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    "example"  get-global  ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-19 01:53:32 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ byte-array 1.0  2.0  3.0  4.0  ]
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 20:06:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    1.0  2.0  3.0  4.0  <double-rect>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    double-rect-callback double-rect-test
							 
						 
					
						
							
								
									
										
										
										
											2010-05-19 01:53:32 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    [ >c-ptr class ] [ >double-rect< ] bi
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 20:06:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test_struct_14 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 13:00:06 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { x1 double }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { x2 double } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION:  test_struct_14 ffi_test_40  ( double x1, double x2 ) ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1.0  2.0  ] [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    1.0  2.0  ffi_test_40 [ x1>> ] [ x2>> ] bi
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  callback-10  (  --  callback  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test_struct_14 { double double } cdecl
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        test_struct_14 <struct>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            swap  >>x2
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            swap  >>x1
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ] alien-callback ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  callback-10-test  (  x1  x2  callback  --  result  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test_struct_14 { double double } cdecl alien-indirect ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1.0  2.0  ] [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    1.0  2.0  callback-10 callback-10-test
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    [ x1>> ] [ x2>> ] bi
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION:  test-struct-12 ffi_test_41  ( int a, double x ) ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1  2.0  ] [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    1  2.0  ffi_test_41
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    [ a>> ] [ x>> ] bi
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  callback-11  (  --  callback  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test-struct-12 { int double } cdecl
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        test-struct-12 <struct>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            swap  >>x
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            swap  >>a
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ] alien-callback ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  callback-11-test  (  x1  x2  callback  --  result  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test-struct-12 { int double } cdecl alien-indirect ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1  2.0  ] [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    1  2.0  callback-11 callback-11-test
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    [ a>> ] [ x>> ] bi
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test_struct_15 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 13:00:06 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { x float  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { y float  } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION:  test_struct_15 ffi_test_42  ( float x, float y ) ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 1.0  2.0  ] [ 1.0  2.0  ffi_test_42 [ x>> ] [ y>> ] bi  ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  callback-12  (  --  callback  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test_struct_15 { float  float  } cdecl
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        test_struct_15 <struct>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            swap  >>y
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            swap  >>x
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ] alien-callback ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  callback-12-test  (  x1  x2  callback  --  result  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test_struct_15 { float  float  } cdecl alien-indirect ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1.0  2.0  ] [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    1.0  2.0  callback-12 callback-12-test [ x>> ] [ y>> ] bi
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  test_struct_16 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 13:00:06 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { x float  }
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { a int } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION:  test_struct_16 ffi_test_43  ( float x, int a ) ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 1.0  2  ] [ 1.0  2  ffi_test_43 [ x>> ] [ a>> ] bi  ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  callback-13  (  --  callback  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test_struct_16 { float  int } cdecl
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        test_struct_16 <struct>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            swap  >>a
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            swap  >>x
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ] alien-callback ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  callback-13-test  (  x1  x2  callback  --  result  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test_struct_16 { float  int } cdecl alien-indirect ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 1.0  2  ] [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    1.0  2  callback-13 callback-13-test
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    [ x>> ] [ a>> ] bi
 
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION: test_struct_14 ffi_test_44 (  )  ;  inline
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 1.0  2.0  ] [ ffi_test_44 [ x1>> ] [ x2>> ] bi  ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-09-13 21:28:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  stack-frame-bustage  (  --  a  b  )  ffi_test_44 gc 3  ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ ] [ stack-frame-bustage 2drop  ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2009-02-06 05:02:00 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-02 05:01:12 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								! C99 tests 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								os windows? [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-02-06 13:21:53 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								FUNCTION:  complex-float ffi_test_45  ( int x ) ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-02-06 13:30:11 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ C{ 3.0  0.0  } ] [ 3  ffi_test_45 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2009-02-06 13:21:53 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION:  complex-double ffi_test_46  ( int x ) ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-02-06 13:30:11 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ C{ 3.0  0.0  } ] [ 3  ffi_test_46 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2009-02-06 13:21:53 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION:  complex-float ffi_test_47  ( complex-float x, complex-double y ) ;
 
							 
						 
					
						
							
								
									
										
										
										
											2009-02-06 05:02:00 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ C{ 4.0  4.0  } ] [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    C{ 1.0  2.0  }
							 
						 
					
						
							
								
									
										
										
										
											2009-02-06 13:21:53 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    C{ 1.5  1.0  } ffi_test_47
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2009-05-05 19:37:40 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								! Reported by jedahu 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								STRUCT:  bool-field-test 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-23 14:42:02 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { name c-string }
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 17:31:58 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { on  bool }
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { parents short  } ;
 
							 
						 
					
						
							
								
									
										
										
										
											2009-05-05 19:37:40 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FUNCTION:  short ffi_test_48  ( bool-field-test x ) ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 123  ] [
							 
						 
					
						
							
								
									
										
										
										
											2009-08-25 11:59:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    bool-field-test <struct>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        123  >>parents
							 
						 
					
						
							
								
									
										
										
										
											2009-05-05 19:37:40 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ffi_test_48
							 
						 
					
						
							
								
									
										
										
										
											2009-08-13 20:21:44 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2009-09-25 19:08:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-02-02 05:01:12 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								] unless
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-03-26 22:44:43 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								! Test interaction between threads and callbacks 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  thread-callback-1  (  --  callback  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    int { } cdecl [ yield 100  ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-26 22:44:43 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  thread-callback-2  (  --  callback  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    int { } cdecl [ yield 200  ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-26 22:44:43 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  thread-callback-invoker  (  callback  --  n  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    int { } cdecl alien-indirect ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-26 22:44:43 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								<promise> "p"  set
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ thread-callback-1 thread-callback-invoker "p"  get  fulfill ] in-thread
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 200  ] [ thread-callback-2 thread-callback-invoker ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 100  ] [ "p"  get  ?promise ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-06 23:39:22 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								! More alien-assembly tests are in cpu.* vocabs 
							 
						 
					
						
							
								
									
										
										
										
											2010-03-31 22:20:35 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  assembly-test-1  (  --  )  void { } cdecl [ ] alien-assembly ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-06 23:39:22 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ ] [ assembly-test-1 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 05:22:42 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 17:15:34 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ f  ] [ "f-fastcall"  load-library f  =  ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ fastcall ] [ "f-fastcall"  library abi>> ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 05:22:42 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 17:15:34 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  ffi_test_49  (  x  --  int  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int "f-fastcall"  "ffi_test_49"  { int }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    alien-invoke gc ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  ffi_test_50  (  x  y  --  int  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int "f-fastcall"  "ffi_test_50"  { int int }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    alien-invoke gc ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  ffi_test_51  (  x  y  z  --  int  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int "f-fastcall"  "ffi_test_51"  { int int int }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    alien-invoke gc ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 21:48:12 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  multi_ffi_test_51  (  x  y  z  x'  y'  z'  --  int  int  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    [ int "f-fastcall"  "ffi_test_51"  { int int int } alien-invoke ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    3dip
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int "f-fastcall"  "ffi_test_51"  { int int int } alien-invoke gc ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 17:15:34 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 05:22:42 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 4  ] [ 3  ffi_test_49 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 8  ] [ 3  4  ffi_test_50 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 13  ] [ 3  4  5  ffi_test_51 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-04-01 21:48:12 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 13  22  ] [ 3  4  5  6  7  8  multi_ffi_test_51 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 01:47:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  ffi_test_52  (  x  y  z  --  int  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int "f-fastcall"  "ffi_test_52"  { int float  int }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    alien-invoke gc ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  ffi_test_53  (  x  y  z  w  --  int  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int "f-fastcall"  "ffi_test_53"  { int float  int int }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    alien-invoke gc ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:52:56 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  ffi_test_57  (  x  y  --  test-struct-11  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    test-struct-11 "f-fastcall"  "ffi_test_57"  { int int }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    alien-invoke gc ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  ffi_test_58  (  x  y  z  --  test-struct-11  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    test-struct-11 "f-fastcall"  "ffi_test_58"  { int int int }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    alien-invoke gc ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 01:47:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								! GCC bugs 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								mingw? [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    [ 13  ] [ 3  4.0  5  ffi_test_52 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    [ 19  ] [ 3  4.0  5  6  ffi_test_53 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unless
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:52:56 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ S{ test-struct-11 f  7  -1  } ] [ 3  4  ffi_test_57 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:52:56 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ S{ test-struct-11 f  7  -3  } ] [ 3  4  7  ffi_test_58 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:43:55 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  fastcall-ii-indirect  (  x  y  ptr  --  result  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int { int int } fastcall alien-indirect ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  fastcall-iii-indirect  (  x  y  z  ptr  --  result  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int { int int int } fastcall alien-indirect ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:43:55 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  fastcall-ifi-indirect  (  x  y  z  ptr  --  result  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int { int float  int } fastcall alien-indirect ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  fastcall-ifii-indirect  (  x  y  z  w  ptr  --  result  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int { int float  int int } fastcall alien-indirect ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  fastcall-struct-return-ii-indirect  (  x  y  ptr  --  result  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:00:34 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    test-struct-11 { int int } fastcall alien-indirect ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  fastcall-struct-return-iii-indirect  (  x  y  z  ptr  --  result  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    test-struct-11 { int int int } fastcall alien-indirect ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:43:55 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-13 02:24:04 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  win32?  (  --  ?  )  os windows? cpu x86.32? and  ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 8  ] [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    3  4
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-13 02:24:04 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    win32? [ &: @ffi_test_50@8 ] [ &: ffi_test_50 ] if
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    fastcall-ii-indirect
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 13  ] [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    3  4  5
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-13 02:24:04 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    win32? [ &: @ffi_test_51@12 ] [ &: ffi_test_51 ] if
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    fastcall-iii-indirect
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								mingw? [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    [ 13  ] [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        3  4.0  5
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-13 02:24:04 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        win32? [ &: @ffi_test_52@12 ] [ &: ffi_test_52 ] if
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        fastcall-ifi-indirect
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    [ 19  ] [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        3  4.0  5  6
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-13 02:24:04 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        win32? [ &: @ffi_test_53@16 ] [ &: ffi_test_53 ] if
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        fastcall-ifii-indirect
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unless
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ S{ test-struct-11 f  7  -1  } ]
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    3  4
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-13 02:24:04 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    win32? [ &: @ffi_test_57@8 ] [ &: ffi_test_57 ] if
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    fastcall-struct-return-ii-indirect
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ S{ test-struct-11 f  7  -3  } ]
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    3  4  7
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-13 02:24:04 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    win32? [ &: @ffi_test_58@12 ] [ &: ffi_test_58 ] if
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    fastcall-struct-return-iii-indirect
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  fastcall-ii-callback  (  --  ptr  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int { int int } fastcall [ +  1  +  ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  fastcall-iii-callback  (  --  ptr  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int { int int int } fastcall [ +  +  1  +  ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  fastcall-ifi-callback  (  --  ptr  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int { int float  int } fastcall
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    [ [ >integer  ] dip  +  +  1  +  ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  fastcall-ifii-callback  (  --  ptr  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int { int float  int int } fastcall
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    [ [ >integer  ] 2dip  +  +  +  1  +  ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  fastcall-struct-return-ii-callback  (  --  ptr  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    test-struct-11 { int int } fastcall
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    [ [ +  ] [ -  ] 2bi  test-struct-11 <struct-boa> ] alien-callback ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  fastcall-struct-return-iii-callback  (  --  ptr  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    test-struct-11 { int int int } fastcall
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    [ [ drop  +  ] [ -  nip  ] 3bi  test-struct-11 <struct-boa> ] alien-callback ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 8  ] [ 3  4  fastcall-ii-callback fastcall-ii-indirect ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 13  ] [ 3  4  5  fastcall-iii-callback fastcall-iii-indirect ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 13  ] [ 3  4.0  5  fastcall-ifi-callback fastcall-ifi-indirect ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-04-12 19:14:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 03:23:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 19  ] [ 3  4.0  5  6  fastcall-ifii-callback fastcall-ifii-indirect ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ S{ test-struct-11 f  7  -1  } ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 3  4  fastcall-struct-return-ii-callback fastcall-struct-return-ii-indirect ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ S{ test-struct-11 f  7  -3  } ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 3  4  7  fastcall-struct-return-iii-callback fastcall-struct-return-iii-indirect ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-05-19 00:33:36 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-23 03:00:53 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  x64-regression-1  (  --  c  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int { int int int int int } cdecl [ +  +  +  +  ] alien-callback ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  x64-regression-2  (  x  x  x  x  x  c  --  y  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int { int int int int int } cdecl alien-indirect ;  inline
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 661  ] [ 100  500  50  10  1  x64-regression-1 x64-regression-2 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-19 00:33:36 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								! Stack allocation 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  blah  (  --  x  )  { RECT } [ 1.5  >>x 2.0  >>y [ x>> ] [ y>> ] bi  *  >fixnum  ] with-scoped-allocation ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 3  ] [ blah ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-05-22 01:25:10 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-16 17:13:38 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								:  out-param-test-1  (  --  b  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-16 17:32:05 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { int } [ [ 12  ] dip  0  int set-alien-value ] with-out-parameters ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-22 01:25:10 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-16 17:13:38 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								[ 12  ] [ out-param-test-1 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  out-param-test-2  (  --  b  )
 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-16 17:32:05 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { { int initial: 12  } } [ drop  ] with-out-parameters ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-16 17:13:38 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 12  ] [ out-param-test-2 ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  out-param-test-3  (  --  x  y  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { { RECT initial: S{ RECT { x 3  } { y 4  } } } } [ drop  ]
							 
						 
					
						
							
								
									
										
										
										
											2010-07-16 17:32:05 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    with-out-parameters
							 
						 
					
						
							
								
									
										
										
										
											2010-07-16 17:13:38 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    [ x>> ] [ y>> ] bi  ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 3.0  4.0  ] [ out-param-test-3 ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-05-22 01:25:10 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  out-param-callback  (  --  a  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    void { int pointer: int } cdecl
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    [ [ 2  *  ] dip  0  int set-alien-value ] alien-callback ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  out-param-indirect  (  a  a  --  b  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { int } [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        swap  void { int pointer: int } cdecl
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        alien-indirect
							 
						 
					
						
							
								
									
										
										
										
											2010-07-16 17:32:05 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ] with-out-parameters ;
 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-22 01:25:10 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ 12  ] [ 6  out-param-callback out-param-indirect ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-07-19 19:56:00 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								! Alias analysis regression 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  aa-callback-1  (  --  c  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    double { } cdecl [ 5.0  ] alien-callback ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  aa-indirect-1  (  c  --  x  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    double { } cdecl alien-indirect ;  inline
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								TUPLE:  some-tuple  x  ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ T{ some-tuple f  5.0  } ] [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        some-tuple new
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        aa-callback-1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        aa-indirect-1 >>x
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ] compile-call
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2010-09-30 23:48:52 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								! GC maps regression 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								:  anton's-regression  (  --  )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    f  (free) f  (free) ;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[ ] [ anton's-regression ] unit-test