1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
[Line]
This page is not finished yet
Cecil
Here is the information you need if you want to call some Eiffel
features from C code. To call C functions/macros from Eiffel see the
documentation about [1]externals (man/external in the distribution).
In order to call some Eiffel feature from C, you must use the -cecil
<cecil_file> option with command compile or compile_to_c. The
<cecil_file> allows you to give the list of features you want to call
from C. The corresponding stub routines will be automatically
generated by SmartEiffel.
When the -cecil option is used, command compile_to_c also produces an
additional C heading file which includes the needed C prototypes.
Your <cecil_file> must contain at least two lines. The first line is
the name of the C heading file to produce (it may be useful if you
need to create a C library). Other lines have the following structure:
<c_name> <live_eiffel_type> <feature_name>
The <c_name> is the name of the C function defined by compile_to_c to
wrap the Eiffel call. The couple <live_eiffel_type> <feature_name>
gives the complete name of the Eiffel feature to call. For example:
IsEiffelStringEmpty STRING empty
STRINGitem STRING item
strgrtr STRING infix ">"
array_of_int_count ARRAY[INTEGER] count
X_f X f
Keep in mind that the <live_eiffel_type> must be really live: if
<live_eiffel_type> is ARRAY[INTEGER] for example, your Eiffel program
is supposed to create at least one ARRAY[INTEGER].
The name of the feature to call, <feature_name> may even be an infix
or a prefix feature name. The syntax is the same as the one used in
Eiffel source.
Since attributes are features, if is of course possible to access them
with this mechanism.
A call to X_f in the C code is equivalent to a call to x.f in Eiffel,
with x of type X or any descendant of X. Indeed, X_f takes care of
late binding. This means that X_f can be called on any (Current)
argument of type X or heir of X.
As <cecil_file> is parsed by the SmartEiffel parser, it may contain
Eiffel comments.
Here is one example of a Cecil file (others can be found in
directories SmartEiffel/tutorial/cecil/example*):
-- The name of the include C file :
eiffel.h
-- The features you want to call from C :
array_of_animal_item ARRAY[ANIMAL] item
array_of_animal_lower ARRAY[ANIMAL] lower
array_of_animal_upper ARRAY[ANIMAL] upper
cry ANIMAL cry
string_to_external STRING to_external
People who tinker with the C code generated by SmartEiffel, not
limiting themselves to the Cecil and/or external interfaces, should
also read [2]this page about the C code generated by SmartEiffel.
Otherwise they might get into trouble.
[Line]
Copyright Dominique COLNET and Suzanne COLLIN -
[3]<SmartEiffel@loria.fr>
Last modified: Tue Feb 11 12:10:59 CET 2003
References
1. file://localhost/users/miro/colnet/SmartEiffel/man/external.html
2. file://localhost/users/miro/colnet/SmartEiffel/man/c_code.html
3. mailto:SmartEiffel@loria.fr
|