Read this file if you want to call C or Java code from Eiffel
code (to call Eiffel feature from C or Java see
cecil
file).
The most common way to call external code from Eiffel is to use the external feature definition as described in ETL. See also the SmallEiffel directory "lib_show/external" to have some examples.
Here is the current list of SmallEiffel external specifications.
1. external "C_WithoutCurrent"
Simple call to a C function (or procedure). The external called
routine does not get Current. A C prototype is automatically added
in generated header C file.
Note: for compatibility with other Eiffel compilers external "C" is
treated exactly as external "C_WithoutCurrent".
2. external "C_WithCurrent"
C call with Current. The external called routine get Current as
first argument. A C prototype is automatically added in generated
heading C file.
3. external "C_InlineWithoutCurrent"
Inlined C call. As for "C_WithoutCurrent", the external called
routine does not get Current. No prototype produced in the header
file.
4. external "C_InlineWithCurrent"
Inlined C call with Current. As for "C_WithCurrent", the called
routine get Current as a first argument. No prototype produced in
the header file.
5. external "SmallEiffel"
This external specification is reserved for SmallEiffel itself.
Such a feature is directly supported both by compile_to_c and
compile_to_jvm. For example, infix "+" of INTEGER is direcly
mapped as C '+' by compile_to_c. For the same infix "+", command
compile_to_jvm produce the appropriate Java virtual machine
byte code.
6. external "JVM_invokestatic"
Calling a Java static method. As it is a static Java call, the
Eiffel receiver is not used. The "alias" field of the feature is
used to indicate the Java class, the Java function name and the
corresponding Java bytecode descriptor.
Syntax to use in the alias string is :
7. external "JVM_invokevirtual"
Calling a Java virtual method. As for "JVM_invokestatic", the
alias string gives all needed information to call the virtual
function. The Current Eiffel target is not used (only arguments
and the result are considered).
8. Inlining C code
Another way to call C code from Eiffel is to use "c_inline_c" or
"c_inline_h" as defined in GENERAL. The argument of "c_inline_c"
(or "c_inline_h") must always be a manifest string which may
contains the C code you want to put inlieu.
Using c_inline_[c/h] also suppose you know exactly the C code
SmallEiffel produce. For portability, it is better to use previous
solutions.
(*) - JVMS - "The Java Virtual Machine Specification", Tim Lindholm and Frank Yellin, The Java Series, Addison-Wesley, ISBN 0-201-63452-X.