]> gitweb.factorcode.org Git - factor.git/commitdiff
alien.libraries, stack-checker.alien: check user inputs more carefully to ensure...
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 18 May 2010 22:46:31 +0000 (18:46 -0400)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 18 May 2010 22:46:31 +0000 (18:46 -0400)
basis/alien/libraries/libraries.factor
basis/compiler/tests/alien.factor
basis/stack-checker/alien/alien.factor

index 86249436aa2a675fe8aaf2bc4451b0bfda76d8cc..a3f52df09858237d0eed78251ec41f7b06d43f89 100755 (executable)
@@ -1,7 +1,8 @@
 ! Copyright (C) 2009, 2010 Slava Pestov, Joe Groff.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors alien alien.strings assocs io.backend
-kernel namespaces destructors sequences system io.pathnames ;
+kernel namespaces destructors sequences strings
+system io.pathnames ;
 IN: alien.libraries
 
 : dlopen ( path -- dll ) native-string>alien (dlopen) ;
@@ -12,7 +13,7 @@ SYMBOL: libraries
 
 libraries [ H{ } clone ] initialize
 
-TUPLE: library path abi dll ;
+TUPLE: library { path string } { abi abi initial: cdecl } dll ;
 
 ERROR: no-library name ;
 
index b8c48abfc3f57b3e2ef594f4663b5f37453baa53..fc7e740de3621ec53b5f548f761567212e8ec8e4 100755 (executable)
@@ -11,6 +11,13 @@ SPECIALIZED-ARRAY: float
 SPECIALIZED-ARRAY: char
 IN: compiler.tests.alien
 
+! 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
+
 <<
 : libfactor-ffi-tests-path ( -- string )
     "resource:" absolute-path
index 4147f8f29f01580ef12ae6891faa3dff0a39cdb3..97b821225bfcf92bb35a640871bc4ee419a09ae3 100644 (file)
@@ -1,21 +1,25 @@
 ! Copyright (C) 2008, 2010 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel sequences accessors combinators math namespaces
-init sets words assocs alien.libraries alien alien.private
-alien.c-types fry quotations stack-checker.backend
-stack-checker.errors stack-checker.visitor
+USING: kernel arrays sequences accessors combinators math
+namespaces init sets words assocs alien.libraries alien
+alien.private alien.c-types fry quotations strings
+stack-checker.backend stack-checker.errors stack-checker.visitor
 stack-checker.dependencies compiler.utilities ;
 IN: stack-checker.alien
 
-TUPLE: alien-node-params return parameters abi in-d out-d ;
+TUPLE: alien-node-params
+return parameters
+{ abi abi initial: cdecl }
+in-d
+out-d ;
 
-TUPLE: alien-invoke-params < alien-node-params library function ;
+TUPLE: alien-invoke-params < alien-node-params library { function string } ;
 
 TUPLE: alien-indirect-params < alien-node-params ;
 
-TUPLE: alien-assembly-params < alien-node-params quot ;
+TUPLE: alien-assembly-params < alien-node-params { quot quotation } ;
 
-TUPLE: alien-callback-params < alien-node-params quot xt ;
+TUPLE: alien-callback-params < alien-node-params { quot quotation } xt ;
 
 : param-prep-quot ( params -- quot )
     parameters>> [ c-type c-type-unboxer-quot ] map spread>quot ;