finalyze moving
This commit is contained in:
225
projects/dvm/fdvm/trunk/Sage/h/symb.h
Normal file
225
projects/dvm/fdvm/trunk/Sage/h/symb.h
Normal file
@@ -0,0 +1,225 @@
|
||||
/*********************************************************************/
|
||||
/* pC++/Sage++ Copyright (C) 1993 */
|
||||
/* Indiana University University of Oregon University of Rennes */
|
||||
/*********************************************************************/
|
||||
|
||||
/* VPC Version modified by Jenq-Kuen Lee Nov 15 , 1987 */
|
||||
/* Original Filename : symb.h */
|
||||
/* New filename : vsymb.h */
|
||||
|
||||
/************************************************************************
|
||||
* *
|
||||
* hash and symbol table entries *
|
||||
* *
|
||||
************************************************************************/
|
||||
|
||||
|
||||
struct hash_entry
|
||||
{
|
||||
char *ident;
|
||||
struct hash_entry *next_entry;
|
||||
PTR_SYMB id_attr;
|
||||
};
|
||||
|
||||
struct symb {
|
||||
int variant;
|
||||
int id;
|
||||
char *ident;
|
||||
struct hash_entry *parent;
|
||||
PTR_SYMB outer; /* pointer to symbol in enclosing block */
|
||||
PTR_SYMB next_symb; /* pointer to next symbol in same block */
|
||||
PTR_SYMB id_list; /* used for making lists of ids */
|
||||
PTR_SYMB thread; /* list of all allocated symbol pointers */
|
||||
PTR_TYPE type; /* data type of this identifier */
|
||||
PTR_BFND scope; /* level at which ident is declared */
|
||||
PTR_BLOB ud_chain; /* use_definition chain */
|
||||
int attr; /* attributes of the variable */
|
||||
int dovar; /* set if used as loop's control variable */
|
||||
int decl; /* field that the parser use in keeping track
|
||||
of declarations */
|
||||
|
||||
union symb_union {
|
||||
PTR_LLND const_value; /* for constants */
|
||||
|
||||
struct { /* for enum-field and record field */
|
||||
int tag;
|
||||
int offset;
|
||||
PTR_SYMB declared_name ; /* used for friend construct */
|
||||
PTR_SYMB next;
|
||||
PTR_SYMB base_name; /* name of record or enumerated type */
|
||||
PTR_LLND restricted_bit ; /* Used by VPC++ for restricted bit number */
|
||||
} field;
|
||||
|
||||
struct { /* for variant fields */
|
||||
int tag;
|
||||
int offset;
|
||||
PTR_SYMB next;
|
||||
PTR_SYMB base_name;
|
||||
PTR_LLND variant_list;
|
||||
} variant_field;
|
||||
|
||||
|
||||
struct { /* for program */
|
||||
PTR_SYMB symb_list;
|
||||
PTR_LABEL label_list;
|
||||
PTR_BFND prog_hedr;
|
||||
} prog_decl;
|
||||
|
||||
struct { /* for PROC */
|
||||
int seen;
|
||||
int num_input, num_output, num_io;
|
||||
PTR_SYMB in_list;
|
||||
PTR_SYMB out_list;
|
||||
PTR_SYMB symb_list;
|
||||
int local_size;
|
||||
PTR_LABEL label_list;
|
||||
PTR_BFND proc_hedr;
|
||||
PTR_LLND call_list;
|
||||
} proc_decl;
|
||||
|
||||
struct { /* for FUNC */
|
||||
int seen;
|
||||
int num_input, num_output, num_io;
|
||||
PTR_SYMB in_list;
|
||||
PTR_SYMB out_list;
|
||||
PTR_SYMB symb_list;
|
||||
int local_size;
|
||||
PTR_LABEL label_list;
|
||||
PTR_BFND func_hedr;
|
||||
PTR_LLND call_list;
|
||||
} func_decl;
|
||||
|
||||
struct { /* for variable declaration */
|
||||
int local; /* local or input or output or both param*/
|
||||
int num1, num2, num3 ; /*24.02.03*/
|
||||
PTR_SYMB next_out; /* for list of output parameters*//*perestanovka c next_out *24.02.03*/
|
||||
PTR_SYMB next_in; /* for list of input parameters*/
|
||||
int offset;
|
||||
int dovar; /* set if being used as DO control var */
|
||||
} var_decl;
|
||||
|
||||
struct {
|
||||
int seen ;
|
||||
int num_input, num_output, num_io ;
|
||||
PTR_SYMB in_list ;
|
||||
PTR_SYMB out_list ;
|
||||
PTR_SYMB symb_list;
|
||||
int local_size;
|
||||
PTR_LABEL label_list ;
|
||||
PTR_BFND func_hedr ;
|
||||
PTR_LLND call_list ;
|
||||
/* the following information for field */
|
||||
int tag ;
|
||||
int offset ;
|
||||
PTR_SYMB declared_name; /* used for friend construct */
|
||||
PTR_SYMB next ;
|
||||
PTR_SYMB base_name ;
|
||||
/* the following is newly added */
|
||||
|
||||
} member_func ; /* New one for VPC */
|
||||
|
||||
|
||||
/* an attempt to unify the data structure */
|
||||
struct {
|
||||
int seen ;
|
||||
int num_input, num_output, num_io ;
|
||||
PTR_SYMB in_list ;
|
||||
PTR_SYMB out_list ;
|
||||
PTR_SYMB symb_list;
|
||||
int local_size;
|
||||
PTR_LABEL label_list ;
|
||||
PTR_BFND func_hedr ;
|
||||
PTR_LLND call_list ;
|
||||
/* the following information for field */
|
||||
int tag ;
|
||||
int offset ;
|
||||
PTR_SYMB declared_name; /* used for friend construct */
|
||||
PTR_SYMB next ;
|
||||
PTR_SYMB base_name ;
|
||||
|
||||
/* the following is newly added */
|
||||
} Template ; /* New one for VPC */
|
||||
|
||||
} entry;
|
||||
};
|
||||
|
||||
struct data_type {
|
||||
int variant;
|
||||
int id;
|
||||
int length;
|
||||
PTR_TYPE thread; /* list of all allocated symbol pointers */
|
||||
PTR_SYMB name; /* type name */
|
||||
PTR_BLOB ud_chain; /* use_definition chain */
|
||||
union type_union {
|
||||
/* no entry needed for T_INT, T_CHAR, T_FLOAT, T_DOUBLE, T_VOID T_BOOL */
|
||||
|
||||
|
||||
|
||||
struct { /* for T_SUBRANGE */
|
||||
PTR_TYPE base_type; /* = to T_INT, T_CHAR, T_FLOAT */
|
||||
PTR_LLND lower, upper;
|
||||
} subrange;
|
||||
|
||||
struct { /* for T_ARRAY */
|
||||
PTR_TYPE base_type; /* New order */
|
||||
int num_dimensions;
|
||||
PTR_LLND ranges;
|
||||
} ar_decl;
|
||||
|
||||
struct {
|
||||
PTR_TYPE base_type ;
|
||||
int dummy1;
|
||||
PTR_LLND ranges ;
|
||||
PTR_LLND kind_len ;
|
||||
int dummy3;
|
||||
int dummy4;
|
||||
int dummy5;
|
||||
} Template ; /* for T_DESCRIPT,T_ARRAY,T_FUNCTION,T_POINTER */
|
||||
PTR_TYPE base_type; /* for T_LIST */
|
||||
|
||||
struct { /* for T_RECORD or T_ENUM */
|
||||
int num_fields;
|
||||
int record_size;
|
||||
PTR_SYMB first;
|
||||
} re_decl;
|
||||
/* the following is added fro VPC */
|
||||
|
||||
struct {
|
||||
PTR_SYMB symbol;
|
||||
PTR_SYMB scope_symbol;
|
||||
} derived_type ; /* for type name deriving type */
|
||||
|
||||
struct { /* for class T_CLASS T_UNION T_STRUCT */
|
||||
int num_fields;
|
||||
int record_size;
|
||||
PTR_SYMB first;
|
||||
PTR_BFND original_class ;
|
||||
PTR_TYPE base_type; /* base type or inherited collection */
|
||||
} derived_class ;
|
||||
|
||||
struct { /* for class T_DERIVED_TEMPLATE */
|
||||
PTR_SYMB templ_name;
|
||||
PTR_LLND args; /* argument list for templ */
|
||||
} templ_decl ;
|
||||
|
||||
/* for T_MEMBER_POINTER and */
|
||||
struct { /* for class T_DERIVED_COLLECTION */
|
||||
PTR_SYMB collection_name;
|
||||
PTR_TYPE base_type; /* base type or inherited collection */
|
||||
} col_decl ;
|
||||
|
||||
struct { /* for T_DESCRIPT */
|
||||
PTR_TYPE base_type ;
|
||||
int signed_flag ;
|
||||
PTR_LLND ranges ;
|
||||
int long_short_flag ;
|
||||
int mod_flag ;
|
||||
int storage_flag;
|
||||
int access_flag;
|
||||
} descriptive ;
|
||||
|
||||
} entry;
|
||||
};
|
||||
|
||||
|
||||
#define __SYMB_DEF__
|
||||
Reference in New Issue
Block a user