diff --git a/basis/alien/inline/inline-tests.factor b/basis/alien/inline/inline-tests.factor index 837f27ceb7..2092800c7d 100644 --- a/basis/alien/inline/inline-tests.factor +++ b/basis/alien/inline/inline-tests.factor @@ -1,20 +1,31 @@ ! Copyright (C) 2009 Jeremy Hughes. ! See http://factorcode.org/license.txt for BSD license. USING: alien.inline alien.inline.private io.directories io.files -kernel namespaces tools.test ; +kernel namespaces tools.test alien.c-types ; IN: alien.inline.tests -C-LIBRARY: const +C-LIBRARY: test C-FUNCTION: const-int add ( int a, int b ) return a + b; ; +C-TYPEDEF: double bigfloat + +C-FUNCTION: bigfloat smaller ( bigfloat a ) + return a / 10; +; + ;C-LIBRARY { 2 1 } [ add ] must-infer-as [ 5 ] [ 2 3 add ] unit-test +{ 1 1 } [ smaller ] must-infer-as +[ 1.0 ] [ 10 smaller ] unit-test + +[ t ] [ "double" "bigfloat" [ resolve-typedef ] bi@ = ] unit-test + DELETE-C-LIBRARY: const diff --git a/basis/alien/inline/inline.factor b/basis/alien/inline/inline.factor index 07f4693446..0f05488917 100644 --- a/basis/alien/inline/inline.factor +++ b/basis/alien/inline/inline.factor @@ -5,7 +5,8 @@ alien.libraries alien.parser arrays assocs effects fry generalizations grouping io.directories io.files io.files.info io.files.temp kernel lexer math math.order math.ranges multiline namespaces sequences source-files -splitting strings system vocabs.loader vocabs.parser words ; +splitting strings system vocabs.loader vocabs.parser words +alien.c-types make ; IN: alien.inline : define-c-include ( str -- ) "#include " prepend c-strings get push ; +: define-c-typedef ( old new -- ) + [ typedef ] [ + [ swap "typedef " % % " " % % ";" % ] + "" make c-strings get push + ] 2bi ; + : delete-inline-library ( str -- ) library-path dup exists? [ delete-file ] [ drop ] if ; @@ -104,6 +111,8 @@ SYNTAX: C-INCLUDE: scan define-c-include ; SYNTAX: C-FUNCTION: function-types-effect define-c-function ; +SYNTAX: C-TYPEDEF: scan scan define-c-typedef ; + SYNTAX: ;C-LIBRARY compile-c-library ; SYNTAX: DELETE-C-LIBRARY: scan delete-inline-library ;