Main Page   Compound List   File List   Compound Members   File Members  

ecl.h

Go to the documentation of this file.
00001 #ifndef __ECL__H__
00002 #define __ECL__H__
00003 
00005 #if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
00006 #ifndef ARGS
00007 #define ARGS(args) args
00008 #endif
00009 #else
00010 #ifndef ARGS
00011 #define ARGS(args) (/*args*/)
00012 #endif
00013 #endif
00014 
00023 typedef struct parse_struct *ecl_parse_context;
00024 
00029 typedef struct sm_struct *sm_ref;
00030 
00031 #ifndef IOOffset
00032 typedef struct _IOField {
00033     char *field_name;           /* Field name */
00034     char *field_type;           /* Representation type desired */
00035     int field_size;             /* Size in bytes of representation */
00036     int field_offset;           /* Offset from base to put field value */
00037 } IOField, *IOFieldList;
00038 
00039 #define IOOffset(p_type,field) \
00040         ((int) (((char *) (&(((p_type)0)->field))) - ((char *) 0)))
00041 #if defined(__STDC__) || defined(__ANSI_CPP__) || defined(_MSC_VER)
00042 #define IOstr(s) #s
00043 #else
00044 #define IOstr(s) "s"
00045 #endif
00046 #define IOArrayDecl(type, size) IOstr(type[size])
00047 #define IOArrayDecl2(type, size, size2) IOstr(type[size][size2])
00048 #endif
00049 
00055 typedef struct extern_entry {
00057     char *extern_name;
00059     void *extern_value;
00060 } ecl_extern_entry;
00061 
00066 typedef ecl_extern_entry *ecl_extern_list;
00067 
00076 extern ecl_parse_context new_ecl_parse_context();
00077 
00085 extern void ecl_free_parse_context ARGS((ecl_parse_context context));
00086 
00099 extern void ecl_assoc_externs ARGS((ecl_parse_context context,
00100                                     ecl_extern_list externs));
00114 extern void ecl_add_decl_to_parse_context ARGS((const char *id, sm_ref node,
00115                                                 ecl_parse_context context));
00116 
00126 extern void ecl_add_struct_type ARGS((const char *name, 
00127                                       IOFieldList field_list, 
00128                                       ecl_parse_context context));
00129 
00144 extern sm_ref ecl_build_type_node ARGS((const char *name, 
00145                                         IOFieldList field_list));
00146 
00158 extern sm_ref
00159 ecl_build_param_node ARGS((const char *id, sm_ref typ, int param_num));
00160 
00174 extern void
00175 ecl_add_param ARGS((const char *id, const char *typ, int param_num,
00176                     ecl_parse_context context));
00177 
00186 extern void
00187 ecl_set_return_type ARGS((char *typ, ecl_parse_context context));
00188 
00193 typedef struct _ecl_code_struct {
00195     void (*func)();
00197     void *code_memory_block;
00199     void *data;
00201     int static_size_required;
00204     void *drisc_context;
00205 } *ecl_code;
00206 
00213 ecl_code ecl_code_gen ARGS((char *code, ecl_parse_context context));
00214 
00222 int ecl_code_verify ARGS((char *code, ecl_parse_context context));
00223 
00230 extern void ecl_code_free ARGS((ecl_code code));
00231 
00242 int ecl_parse_for_context ARGS((char *code, ecl_parse_context context));
00243 
00249 extern ecl_parse_context ecl_copy_context ARGS((ecl_parse_context context));
00250 
00258 typedef void (*err_out_func_t) ARGS((void *client_data, char *string));
00268 void ecl_set_error_func ARGS((ecl_parse_context context, 
00269                               err_out_func_t err_func));
00275 void ecl_dump ARGS((ecl_code code));
00276 
00277 #endif

Generated on Mon Feb 10 15:50:33 2003 for E-Code Dynamic Code Generation by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002