
   Externals
   
   
   
   
   Here is the information you need 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 the book "Eiffel The
   Language". See also the SmallEiffel directory "lib_show/external" to
   have some examples.
   
   Below is the current list of SmallEiffel external specifications.
   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". 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. 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.
   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. external "SmallEiffel"
   
   This external specification is reserved to the SmallEiffel compiler
   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. 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 :
          alias "<JavaClassPath>.<MethodName> <Descriptor>"
          
   A dot is the separator between <JavaClassPath> and <MethodName>.
   A blank character is the separator between <MethodName> and
   <Descriptor>.
   The <JavaClassPath> uses the JVM internal notation as described in
   JVMS(*). For example, when one wants to use java.lang.Math, the
   <JavaClassPath> is "java/lang/Math". The <MethodName> gives the Java
   method name. The <Descriptor> gives the internal Java bytecode
   descriptor as described in JVMS(*). 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). 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.

   
   
   [Line]
   Copyright &copy; Dominique COLNET and Suzanne COLLIN -
   <colnet@loria.fr>
   Last update: Wednesday June 10th, 1998 
