/* 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