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) ()
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;
00034 char *field_type;
00035 int field_size;
00036 int field_offset;
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