Merge branch 'master' of git://factorcode.org/git/factor

db4
Slava Pestov 2008-02-04 12:59:21 -06:00
commit 81098989ec
5 changed files with 25 additions and 15 deletions

View File

@ -270,6 +270,16 @@ FUNCTION: double ffi_test_35 test-struct-11 x int y ;
3 ffi_test_35
] unit-test
C-STRUCT: test-struct-12 { "int" "a" } { "double" "x" } ;
: make-struct-12
"test-struct-12" <c-object>
[ set-test-struct-12-x ] keep ;
FUNCTION: double ffi_test_36 ( test-struct-12 x ) ;
[ 1.23456 ] [ 1.23456 make-struct-12 ffi_test_36 ] unit-test
! Test callbacks
: callback-1 "void" { } "cdecl" [ ] alien-callback ;

View File

@ -118,23 +118,11 @@ TUPLE: CreateProcess-args
: inherited-stderr ( args -- handle )
drop STD_ERROR_HANDLE GetStdHandle ;
: duplicate-handle ( handle -- handle )
GetCurrentProcess
swap
GetCurrentProcess
f <void*> [
0
TRUE
DUPLICATE_SAME_ACCESS
DuplicateHandle win32-error=0/f
] keep *void* ;
: redirect-stderr ( args -- handle )
+stderr+ get
dup +stdout+ eq? [
drop
CreateProcess-args-lpStartupInfo duplicate-handle
STARTUPINFO-hStdOutput
CreateProcess-args-lpStartupInfo STARTUPINFO-hStdOutput
] [
GENERIC_WRITE CREATE_ALWAYS redirect
swap inherited-stderr ?closed

View File

@ -16,8 +16,11 @@ IN: tools.deploy.backend
: copy-lines ( stream -- )
[ (copy-lines) ] with-disposal ;
: run-with-output ( descriptor -- )
<process-stream>
: run-with-output ( arguments -- )
[
+arguments+ set
+stdout+ +stderr+ set
] H{ } make-assoc <process-stream>
dup duplex-stream-out dispose
copy-lines ;

5
vm/ffi_test.c Normal file → Executable file
View File

@ -245,3 +245,8 @@ double ffi_test_35(struct test_struct_11 x, int y)
{
return (x.x + x.y) * y;
}
double ffi_test_36(struct test_struct_12 x)
{
return x.x;
}

4
vm/ffi_test.h Normal file → Executable file
View File

@ -57,3 +57,7 @@ struct test_struct_10 { float x; int y; };
DLLEXPORT double ffi_test_34(struct test_struct_10 x, int y);
struct test_struct_11 { int x; int y; };
DLLEXPORT double ffi_test_35(struct test_struct_11 x, int y);
struct test_struct_12 { int a; double x; };
DLLEXPORT double ffi_test_36(struct test_struct_12 x);