/* licomsym.h Symbol table common for sharing between LTX2X & code interp */ #ifndef licomsym_h #define licomsym_h #include "l2xicmon.h" /* value structure */ typedef union { XPRSAINT integer; XPRSAREAL real; char character; char *stringp; } VALUE; /* definition structure */ typedef enum { #define dfntc(a, b) a, #include "l2xidftc.h" #undef dfntc } DEFN_KEY; typedef enum { DECLARED, FORWARD, READ, READLN, WRITE, WRITELN, ABS, COS, EOFF, EOLN, EXP, ODD, ROUND, SIN, SQRT, TRUNC, L2XPRINT, L2XPRINTLN, L2XSYSTEM, L2XREXPR, XACOS, XASIN, XATAN, XBLENGTH, XEXISTS, XFORMAT, XHIBOUND, XHIINDEX, XLENGTH, XLOBOUND, XLOG, XLOG2, XLOG10, XLOINDEX, XNVL, XROLESOF, XSIZEOF, XTAN, XTYPEOF, XUSEDIN, XVALUE, XVALUE_IN, XVALUE_UNIQUE, XINSERT, XREMOVE, } ROUTINE_KEY; typedef struct { DEFN_KEY key; union { struct { VALUE value; } constant; struct { ROUTINE_KEY key; int parm_count; int total_parm_size; int total_local_size; struct symtab_node *parms; struct symtab_node *locals; struct symtab_node *local_symtab; ICT *code_segment; } routine; struct { int offset; struct symtab_node *entity_idp; } data; } info; } DEFN_STRUCT; /* type structure */ typedef enum { #define fotc(a, b, c, d) c, #define sotc(a, b, c, d) #define sftc(a, b, c, d) c, #include "l2xisftc.h" #undef fotc #undef sotc #undef sftc } TYPE_FORM; typedef struct type_struct { TYPE_FORM form; int size; struct symtab_node *type_idp; union { struct { struct symtab_node *const_idp; int max; } enumeration; struct { struct type_struct *range_typep; int min; int max; } subrange; struct { struct type_struct *bound_typep; int min; int max; } bound; struct { struct type_struct *index_typep; struct type_struct *elmt_typep; int min_index; int max_index; int elmt_count; } array; struct { struct type_struct *index_typep; struct type_struct *elmt_typep; int min_index; int max_index; int elmt_count; } dynagg; struct { struct symtab_node *attribute_symtab; } entity; struct { int max_length; int length; } string; } info; } TYPE_STRUCT, *TYPE_STRUCT_PTR; /* symbol table node */ typedef struct symtab_node { struct symtab_node *left, *right; /* ptrs to subtrees */ struct symtab_node *next; /* for chaining nodes */ char *name; /* name string */ char *info; /* ptr to generic info */ DEFN_STRUCT defn; /* definition struct */ TYPE_STRUCT_PTR typep; /* ptr to type struct */ int level; /* nesting level */ int label_index; /* index for code label */ } SYMTAB_NODE, *SYMTAB_NODE_PTR; typedef int LOGICAL_REP; #endif