Tue, 2 Jan 2001 22:28:02 +1100, Fergus Henderson <fjh@cs.mu.oz.au> pisze:
Doing it in a separate tool will lose efficiency in some important cases. If the compiler is compiling via C, then it can insert inline C code directly in the generated code, and thus get inlining. But I think a separate tool would have to put the C code in a separate C file, which would prevent inlining.
hsc2hs creates a .c file and a .h file for snippets of C code. The .h file is included into the .hc file generated by ghc. If you mark functions as inline, they will be really inlined. BTW. gcc understoods the word "inline" differently than ISO/ANSI C99 defines it. The following files are produced from a simple source: #include <errno.h> #def inline HsInt get_errno (void) {return errno;} It works with gcc and should work with a hypothetical C compiler which understands inline correctly. -------- .h file -------- #ifndef TEST_HS_H #define TEST_HS_H #if __GLASGOW_HASKELL__ && __GLASGOW_HASKELL__ < 409 #include <Rts.h> #endif #include <HsFFI.h> #include <errno.h> #ifdef __GNUC__ extern #endif inline HsInt get_errno (void) {return errno;} #endif -------- .c file -------- #include "Test.hs.h" #ifndef __GNUC__ extern #endif inline HsInt get_errno (void) #ifndef __GNUC__ ; #else {return errno;} #endif -- __("< Marcin Kowalczyk * qrczak@knm.org.pl http://qrczak.ids.net.pl/ \__/ ^^ SYGNATURA ZASTÊPCZA QRCZAK