Classes (excluding class C):

ANY_DECLOB, AREF_EXPROB, AREF_EXPROB_S, ARRAY, ARRAY2, ARRAY3, ARRAY4,
ARRAY_TEST, ASSERT_STMTOB, ASSERT_STMTOB_S, ASSIGN_STMTOB,
ASSIGN_STMTOB_S, ATTR_DECL_FEATOB, ATTR_DECL_FEATOB_S, BASE_TEST,
BOOL, BOOL_CONST_EXPROB, BOOL_CONST_EXPROB_S, BREAK_STMTOB,
BREAK_STMTOB_S, CALL_STMTOB, CALL_STMTOB_S, CFILEENT, CHAR,
CHAR_CONST_EXPROB, CHAR_CONST_EXPROB_S, CINH_FEATOB, CINH_FEATOB_S,
CLASSOB, CLASSOB_S, CLASSOB_S_TABLE, CLASSOB_TABLE, CLASS_KEY_SET,
CLASS_STAT, CLASS_STAT_TBL, CODEOB, COMPILER_ACTIONS,
COMPILER_OPTIONS, COMPILE_KEYOB, COMPILE_KEYS_CONST, COND_STMTOB,
COND_STMTOB_S, CONST_DECL_FEATOB, CONST_DECL_FEATOB_S, CONST_EXPROB,
CONST_EXPROB_S, CS, C_FILESTAT, C_FILES_KEYOB, C_MACRO_KEYOB,
C_MAKEFILE_KEYOB, C_NAME_KEYOB, C_TYPE_CONST, DBTABLE, DEBUG_STMTOB,
DEBUG_STMTOB_S, DECLOB, DECLOB_S, DEEP_COPY, DISPATCH_TYPEOB,
DOT_SATHER_HANDLER, DOUBLE, DTABLE_TST, ELSIF_STMTOB, ELSIF_STMTOB_S,
ERR, ERR_INFO, EXPROB, EXPROB_S, EXPR_ARGS_EXPROB, EXPR_ARGS_EXPROB_S,
FEATOB, FEATOB_S, FILE, FILE_DESCRIPTOR, FILE_STAT, GENERIC_KEYOB,
GLOBALS, GLOBAL_PROC, HASH, HASH_TABLE, ID_ARGS_EXPROB,
ID_ARGS_EXPROB_S, ID_EXPROB, ID_EXPROB_S, IN, INSTALL_CONSTS,
INSTANT_TYPEOB_S, INT, INT_CONST_EXPROB, INT_CONST_EXPROB_S,
INT_HASH_ELT, INT_TO_INTSET, KEY, LIST, LOCAL_DECL_STMTOB,
LOOP_STMTOB, LOOP_STMTOB_S, LSTINT_KEY, LST_DECLOB, LST_DECLOB_S,
LST_EXPROB, LST_EXPROB_S, LST_FEATOB, LST_FEATOB_S, LST_PARSEROB,
LST_SEMANTOB, LST_STMTOB, LST_STMTOB_S, LST_TYPEOB, LST_TYPEOB_S,
LST_WHEN_STMTOB, LST_WHEN_STMTOB_S, LVAR_DECL_STMTOB,
LVAR_DECL_STMTOB_S, OLDNEW_HANDLER, OPT_STMTOB, OPT_STMTOB_S,
OP_EXPROB, OP_EXPROB_S, OP_INDICES, OUT, OUTFILE, PARAM_DECLOB,
PARAM_DECLOB_S, PARAM_TYPEOB, PARSEROB, PERSIST_OB, PRINT_C_CODE,
REAL, REAL_CONST_EXPROB, REAL_CONST_EXPROB_S, RESERVED_CLASSES,
RESERVED_CLASS_NAMES, RESERVED_FEAT_NAMES, RESERVED_KEYWORD_NAMES,
RESERVED_WORDS, RETURN_STMTOB, RETURN_STMTOB_S, ROUT_FEATOB,
ROUT_FEATOB_S, ROUT_TYPEOB_S, SATFILEENT, SATHER_SEMANT, SATLINEENT,
SATLINEEXP, SAT_CMDFILE, SAT_OUTFILE, SEMANTOB, SHARED_DECL_FEATOB,
SHARED_DECL_FEATOB_S, SIMPLE_TYPEOB, SORTER, SORTOB, STMTOB, STMTOB_S,
STR, STR2INT2STR, STRINT_HASH_ELT, STRINT_TO_INT, STR_BUFFER,
STR_CONST_EXPROB, STR_CONST_EXPROB_S, STR_CURSOR, STR_SET,
STR_SET_CURS, STR_TABLE, STR_TAB_FILE, STR_TEST, SWITCH_STMTOB,
SWITCH_STMTOB_S, SYMBOL_TABLE, TEXTFILE, TIMER, TIME_INT, TIME_VAL,
TWOINTS, TYPEOB, TYPEOB_S, TYPESPEC_ARGS_EXPROB,
TYPESPEC_ARGS_EXPROB_S, WHEN_STMTOB, WHEN_STMTOB_S.

Excluding matches to doc-tag-table-classes-exclude =
""

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ANY_DECLOB is                                                  [class]

   Temporary object to hold list of name indices and a type
     (inherited from DECLOB).  


Public definitions of class ANY_DECLOB: 

Inherits from: DECLOB

names:LIST{INT};
   This is guaranteed to be non-void from the parse-tree construction.

create(nms:LIST{INT}; tp:$TYPEOB):SELF_TYPE is
   Undocumented.

size:INT is
   Undocumented.

get_type_spec:$TYPEOB is
   Undocumented.

ith_name(i:INT):INT is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

AREF_EXPROB is                                                 [class]

   Array references.  


Public definitions of class AREF_EXPROB: 

Inherits from: EXPROB

array:$EXPROB;
   Undocumented.

indices:LST_EXPROB;
   Undocumented.

create(arr:$EXPROB; inds:LST_EXPROB):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):AREF_EXPROB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

AREF_EXPROB_S is                                               [class]

   Array references.  


Public definitions of class AREF_EXPROB_S: 

Inherits from: EXPROB_S

array:$EXPROB_S;
   An ID_EXPROB_S is created if the construct is of the form "[i]".

indices:LST_EXPROB_S;
   This is guaranteed to be non-void from the construction of the
   parse tree.

ind_temp_names:ARRAY{INT};
   Undocumented.

temp_name:INT;
   Undocumented.

temp_ctype:INT;
   Temporary variable to hold the value of object returned before
   array access, ie value and type of the array object.

typeholder_name:INT;
   Undocumented.

typeholder_ctype:INT;
   Static variable to hold the Sather type of last accessed object

dispval_name:INT;
   Undocumented.

dispval_ctype:INT;
   Static variable to hold the base size of the type of object

temp_name_tpchk:INT;
   Undocumented.

temp_ctype_tpchk:INT;
   Temporary variable (and C type of temporary variable) to hold result
   of array access so that the type of the result can be checked (if
   runtime type-checking is requested).

temp_indices_val:ARRAY{INT};
   List of temporaries to hold the index values for indexing into
   array.  (All the values have integer type, so we do not need
   an array to hold the type.)  Since the maximum size is 4, we
   create an array of size 4, when the "create" routine is called.

has_pre_eval_indices:BOOL;
   A simple flag which when set to "false", will allow operations
   involving the operations on temporary variables (for index values)
   kept in "temp_indices_val" to be bypassed.

printed_times:INT;
   The value is greater than 0 if the runtime type-checking code is already
   generated, ie the code to compute value of the expression is already 
   generated.  This is the number of times this node has been printed; it
   should be less than or equal than the global variable "g_tag".

create(arr:$EXPROB_S; inds:LST_EXPROB_S; ln:INT):SELF_TYPE is
   Undocumented.

sather_code:STR is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

valid_init_expr:BOOL is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

assignable_p:BOOL is
   All array references are assignable.

gen_temps:LIST{INT} is
   This routine should only be called after the type has been 
     resolved, so that the value of "res_type" is correct.

get_ext_strs is
   Undocumented.

to_be_pre_evaluated:BOOL is
   This array expression must be pre-evaluated, if the object type is
   the type of the array is dispatched.  Eg, if we have x:$FOO and
   x[1,2] used in f(x[1,2]), then this expression must be pre-evaluated.

access_value_only:BOOL is
   The array expression "expr[...]" is value-access only to the extent
   that "expr" is value-access only.

cprint_pre_code(outfile:SAT_OUTFILE) is
   Undocumented.

cont1:INT := 1;                                             [constant]
   Access to 1-dimensional array element of any type

cont6:INT := 6;                                             [constant]
   Access to 2-dimensional array element of any type

cont11:INT := 11;                                           [constant]
   Access to base of array storing 2nd dimension (of 2-dimensional array)

cont12:INT := 12;                                           [constant]
   Access to 3-dimensional array element of any type

cont17:INT := 17;                                           [constant]
   Access to base of array storing 3rd dimension (of 3-dimensional array)

cont18:INT := 18;                                           [constant]
   Access to base of 1st-dimensional array storing 2nd-dimension base 
   offsets (of 3-dimensional array)

cont19:INT := 19;                                           [constant]
   Access to 4-dimensional array element of any type

cont24:INT := 24;                                           [constant]
   Access to base of array storing 4th dimension (of 4-dimensional array)

cont25:INT := 25;                                           [constant]
   Access to base of 2nd-dimensional array storing 3rd-dimension base 
   offsets (of 4-dimensional array)

cont26:INT := 26;                                           [constant]
   Access to base of 1st-dimensional array storing 2nd-dimension base 
   offsets (of 4-dimensional array)

cont27:INT := 27;                                           [constant]
   Access to 1-dimensional array element of any type

cont32:INT := 32;                                           [constant]
   Access to 2-dimensional array element of any type

cont37:INT := 37;                                           [constant]
   Access to base of array storing 2nd dimension (of 2-dimensional array)

cont38:INT := 38;                                           [constant]
   Access to 3-dimensional array element of any type

cont43:INT := 43;                                           [constant]
   Access to base of array storing 3rd dimension (of 3-dimensional array)

cont44:INT := 44;                                           [constant]
   Access to base of 1st-dimensional array storing 2nd-dimension base 
   offsets (of 3-dimensional array)

cont45:INT := 45;                                           [constant]
   Access to 4-dimensional array element of any type

cont50:INT := 50;                                           [constant]
   Access to base of array storing 4th dimension (of 4-dimensional array)

cont51:INT := 51;                                           [constant]
   Access to base of 2nd-dimensional array storing 3rd-dimension base 
   offsets (of 4-dimensional array)

cont52:INT := 52;                                           [constant]
   Access to base of 1st-dimensional array storing 2nd-dimension base 
   offsets (of 4-dimensional array)

cont53:INT := 53;                                           [constant]
   Print parameters for getting base size of array

cont54:INT := 54;                                           [constant]
   Print temporary variable name

cont55:INT := 55;                                           [constant]
   Access to "asize1" of dispatched array

cont56:INT := 56;                                           [constant]
   Access to "asize2" of dispatched array

cont57:INT := 57;                                           [constant]
   Access to "asize3" of dispatched array

cont58:INT := 58;                                           [constant]
   Access to "asize4" of dispatched array

cont59:INT := 59;                                           [constant]
   Access to "asize1" of non-dispatched array

cont60:INT := 60;                                           [constant]
   Access to "asize2" of non-dispatched array

cont61:INT := 61;                                           [constant]
   Access to "asize3" of non-dispatched array

cont62:INT := 62;                                           [constant]
   Access to "asize4" of non-dispatched array

cont_cprint_code(outfile:SAT_OUTFILE; cont:INT) is
   Undocumented.

cprint_act_code(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_init_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ARRAY{T} is                                                    [class]

   asize:INT: Implemented by the compiler.


Public definitions of class ARRAY: 

clear is
   Clear out the array. 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ARRAY2{T} is                                                   [class]

   asize1:INT, asize2:INT: Implemented by the compiler.


Public definitions of class ARRAY2: 

asize:INT is
   Undocumented.

clear is
   Clear out the array. 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ARRAY3{T} is                                                   [class]

   asize1:INT, asize2:INT, asize3:INT: Implemented by the compiler.


Public definitions of class ARRAY3: 

asize:INT is
   Undocumented.

clear is
   Clear out the array. 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ARRAY4{T} is                                                   [class]

   asize1:INT,asize2:INT, asize3:INT, asize4:INT: Implemented
   by the compiler.


Public definitions of class ARRAY4: 

asize:INT is
   Undocumented.

clear is
   Clear out the array. 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ARRAY_TEST is                                                  [class]

   A quick check that the array classes work.


Public definitions of class ARRAY_TEST: 

main is
   Undocumented.

array_test is
   Test of one-dimensional arrays.

array2_test is
   Test of two-dimensional arrays.

array3_test is
   Test of three-dimensional arrays.

array4_test is
   Test of four-dimensional arrays. 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ASSERT_STMTOB is                                               [class]

   Assertions can be turned on/off by a key


Public definitions of class ASSERT_STMTOB: 

Inherits from: OPT_STMTOB

as_exp:$EXPROB;
   Assertion

create(k:INT; a:$EXPROB; ln:INT):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):ASSERT_STMTOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ASSERT_STMTOB_S is                                             [class]

   Undocumented.


Public definitions of class ASSERT_STMTOB_S: 

Inherits from: COMPILE_KEYS_CONST

Inherits from: OPT_STMTOB_S

as_exp:$EXPROB_S;
   Assertion

create(k:INT; a:$EXPROB_S; ln:INT):SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

gen_temps:LIST{INT} is
   Undocumented.

validate_dispatches_and_get_ext_strs is
   There is no type definition to be checked, so the only thing
   to do is to record references to external strings.

cprint_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ASSIGN_STMTOB is                                               [class]

   Assignments.


Public definitions of class ASSIGN_STMTOB: 

Inherits from: STMTOB

lval:$EXPROB;
   Left side of assignment

expr:$EXPROB;
   Right side of assignment

create(lv:$EXPROB; exp:$EXPROB; ln:INT ):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):ASSIGN_STMTOB_S is
   The parameters are a list of indices for type parameter
     names and a list of keys for the type instantiations.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ASSIGN_STMTOB_S is                                             [class]

   Assignments.


Public definitions of class ASSIGN_STMTOB_S: 

Inherits from: STMTOB_S

lval:$EXPROB_S;
   Left side of assignment

expr:$EXPROB_S;
   Right side of assignment

create(lv:$EXPROB_S; exp:$EXPROB_S; ln:INT):SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

gen_temps:LIST{INT} is
   Undocumented.

validate_dispatches_and_get_ext_strs is
   We do not need to check type dispatches in an assignment statement.
   The only thing to do is to get references to external strings.

cprint_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ATTR_DECL_FEATOB is                                            [class]

   Attributes.


Public definitions of class ATTR_DECL_FEATOB: 

Inherits from: FEATOB

Inherits from: DECLOB

pte:BOOL;
   "true" if attribute is private

create(nm:INT; t:$TYPEOB; ln:INT):SELF_TYPE is
   Undocumented.

mark_private is
   Undocumented.

create_lst(do:ANY_DECLOB):LST_FEATOB is
   Given a ANY_DECLOB, take the list of identifiers in
     ANY_DECLOB, and make a list of $FEATOB's (in
     particular a list of ATTR_DECL_FEATOB's).

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):ATTR_DECL_FEATOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ATTR_DECL_FEATOB_S is                                          [class]

   Attributes.


Public definitions of class ATTR_DECL_FEATOB_S: 

Inherits from: C_TYPE_CONST

Inherits from: FEATOB_S

Inherits from: DECLOB_S

name:INT;
   Undocumented.

pte:BOOL;
   "true" if attribute is invisible outside

ctype:INT;
   C type of attribute

off:INT;
   the offset in the object
   Calculated in "compute_own_offset"
   If it is -1 (in the case of "asize", "asize1" etc), we need
   to handle the case differently.  

disp:BOOL;
   True if dispatched anywhere.

create(nm:INT; t:$TYPEOB_S; priv:BOOL; c_def:CLASSOB; ln:INT):SELF_TYPE is
   Undocumented.

sather_code:STR is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

featob_s_name:INT is
   Undocumented.

declob_s_name:INT is
   Undocumented.

compute_own_offset(nextloc:INT):INT is
   Size of allocated space depends on the type

get_offset:INT is
   Undocumented.

compatible_des_feat(feat:SELF_TYPE; lval_p:BOOL):BOOL is
   "lval_p" is true when we are using the attribute as the LHS of
   an assignment statement.  "feat" is guaranteed to be non-void.

semant(symtab:SYMBOL_TABLE) is
   Refer to note in "do_update_info" routine.

cprint_offset(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_cname(outfile:SAT_OUTFILE) is
   Should never be used, but just in case.

cont1:INT := 1;                                             [constant]
   Print reference to attribute in self

cont_cprint_code(outfile:SAT_OUTFILE; cont:INT) is
   "cont" represents the continuation of printing the
   attribute access code.  In this case, there is only
   one choice.

cprint_access_value(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_store_dispval(outfile:SAT_OUTFILE) is
   Print offset of attribute

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

BASE_TEST is                                                   [class]

   Test of the base classes.


Public definitions of class BASE_TEST: 

Inherits from: TEST

main is
   Test `BOOL', `CHAR', `INT', `REAL', and `DOUBLE'.

bool_test is
   Test `BOOL'.

char_test is
   Test `CHAR'.

int_test is
   Test `INT'.

real_test is
   Test `REAL'.

double_test is
   Test `DOUBLE'.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

BOOL is                                                        [class]

   `BOOL' defines the routines which are applicable to boolean expressions.
   In addition to `and', `or' and `not' which are built into the Sather
   language, it defines several additional standard binary operations.


Public definitions of class BOOL: 

xor(b:BOOL):BOOL is
   The truth value of `self' exclusive or `b'.

xnor(b:BOOL):BOOL is
   The truth value of `self' exclusive nor `b'.

nand(b:BOOL):BOOL is
   The truth value of `self' nand `b'.

nor(b:BOOL):BOOL is
   The truth value of `self' nor `b'.

implies(b:BOOL):BOOL is
   The truth value of `self' implies `b'.

to_s:STR is
   The string representation of `self'.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

BOOL_CONST_EXPROB is                                           [class]

   Undocumented.


Public definitions of class BOOL_CONST_EXPROB: 

Inherits from: CONST_EXPROB

boolval:INT;
   Undocumented.

create(v:INT):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):BOOL_CONST_EXPROB_S is
   We need to replicate nodes for constants.  
   *! May want to optimize this later.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

BOOL_CONST_EXPROB_S is                                         [class]

   Undocumented.


Public definitions of class BOOL_CONST_EXPROB_S: 

Inherits from: CONST_EXPROB_S

boolval:INT;
   Undocumented.

create(v:INT; ln:INT):SELF_TYPE is
   Undocumented.

sather_code:STR is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

val:STR_CURSOR is
   Undocumented.

expr_eval_constant:$CONST_EXPROB_S is
   Undocumented.

cprint_act_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

BREAK_STMTOB is                                                [class]

   Break statements.


Public definitions of class BREAK_STMTOB: 

Inherits from: STMTOB

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):BREAK_STMTOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

BREAK_STMTOB_S is                                              [class]

   Break statements.


Public definitions of class BREAK_STMTOB_S: 

Inherits from: STMTOB_S

tag:INT;
   This is > 0 if goto tag

gen_goto_tags(loop_stmt:LOOP_STMTOB_S) is
   Undocumented.

cprint_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CALL_STMTOB is                                                 [class]

   Calls.


Public definitions of class CALL_STMTOB: 

Inherits from: STMTOB

expr:$EXPROB;
   EXPROB representation of the call

create(exp:$EXPROB):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):CALL_STMTOB_S is
   The parameters are a list of indices for type parameter
     names and a list of keys for the type instantiations.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CALL_STMTOB_S is                                               [class]

   Calls.


Public definitions of class CALL_STMTOB_S: 

Inherits from: STMTOB_S

expr:$EXPROB_S;
   EXPROB_S representation of the call

create(exp:$EXPROB_S; ln:INT):SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

gen_temps:LIST{INT} is
   Undocumented.

validate_dispatches_and_get_ext_strs is
   There is no type definition to be checked, so the only thing
   to do is to record references to external strings.

cprint_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CFILEENT is                                                    [class]

   Undocumented.


Public definitions of class CFILEENT: 

cFileName:STR;
   Undocumented.

cLineNo:INT;
   Undocumented.

create(s:STR;i:INT):CFILEENT is
   

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CHAR is                                                        [class]

   `CHAR' defines operations on characters. The operations with names of
   the form `is_foo' are predicates which return a boolean value
   depending on whether the character has the specified characteristic.
   This is a general naming convention throughout the Sather libraries.
   As in C, white space characters include space, tab, carriage return,
   newline, vertical tab, or form feed. Printing characters are all
   characters except control characters. Punctuation characters are those
   which are neither control characters nor alphanumeric characters. The
   function `to_i' returns the ASCII value corresponding the character.
   The case conversion routines `to_upper_case' and `to_lower_case' work
   on all characters unlike the versions in many C libraries.


Public definitions of class CHAR: 

is_alphabetic:BOOL is
   True if `self' is an alphabetic character.

is_upper_case:BOOL is
   True if `self' is uppercase.

is_lower_case:BOOL is
   True if `self' is lowercase.

is_digit:BOOL is
   True if `self' is a digit.

is_alphanumeric:BOOL is
   True if `self' is alphanumeric.

is_space:BOOL is
   True if `self' is whitespace.

is_print:BOOL is
   True if `self' is a printing character.

is_punctuation:BOOL is
   True if `self' is punctuation.

is_control:BOOL is
   True if `self' is a control character.

to_i:INT is
   Convert `self' to an integer.

to_s:STR is
   The string representation of `self'.

to_upper_case:CHAR is
   Convert `self' to upper case (always works, unlike the C library).

to_lower_case:CHAR is
   Convert `self' to lower case (always works, unlike the C library).

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CHAR_CONST_EXPROB is                                           [class]

   Undocumented.


Public definitions of class CHAR_CONST_EXPROB: 

Inherits from: CONST_EXPROB

charval:STR;
   Pointer to string representation of character

create(v:STR):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):CHAR_CONST_EXPROB_S is
   We need to replicate nodes for constants.  
   *! May want to optimize this later.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CHAR_CONST_EXPROB_S is                                         [class]

   Undocumented.


Public definitions of class CHAR_CONST_EXPROB_S: 

Inherits from: CONST_EXPROB_S

charval:STR;
   Pointer to string representation of character

create(v:STR; ln:INT):SELF_TYPE is
   Undocumented.

sather_code:STR is
   Undocumented.

val:STR_CURSOR is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

expr_eval_constant:$CONST_EXPROB_S is
   Undocumented.

cprint_act_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CINH_FEATOB is                                                 [class]

   Inherited classes.


Public definitions of class CINH_FEATOB: 

Inherits from: FEATOB

cls:$TYPEOB;
   The inherited class specification

create(cls:$TYPEOB):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):CINH_FEATOB_S is
   Perform the following check:
   a. The name of inherited class should not be in the type 
      parameters list.
   b. The inherited class must not be dispatched.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CINH_FEATOB_S is                                               [class]

   Inherited classes.


Public definitions of class CINH_FEATOB_S: 

Inherits from: FEATOB_S

cls:$TYPEOB_S;
   The inherited class specification

create(tp:$TYPEOB_S; ln:INT; c_def:CLASSOB):SELF_TYPE is
   The type specification is guaranteed to be non-dispatched because
   CINH_FEATOB will check for that.

dup:SELF_TYPE is
   Undocumented.

class_inst_ind:INT is
   Undocumented.

featob_s_name:INT is
   Names of inherited classes are in a separate name-space
     from other features.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CLASSOB is                                                     [class]

   Classes possibly with type parameters.


Public definitions of class CLASSOB: 

lineno:INT;
   Line number at end of class definition

print_indent:INT := 2;                                      [constant]
   Indentation for printing class

index:INT;
   Index of the class name

fname:STR;
   Name of file the class is in

flst:LST_FEATOB;
   List of features

plst:LIST{INT};
   List of type parameter name indices
   It is void if not parameterized

more_fnames:LIST{STR};
   Other file names in which class is found

time_stamp:TIME_INT;
   The time-stamp is taken from the time the file was last updated.
   This value is updated in the "create" routine.

Inherits from: RESERVED_CLASS_NAMES

Inherits from: RESERVED_WORDS

create(index:INT; pl:LIST{INT}; fl:LST_FEATOB):CLASSOB is
   Create a CLASSOB with `fl' a list of features, `pl' a list
   of type parameter names.
   NOTE:
   a.  If class name is repeated as a type parameter, the class
       name will be overshadowed by type parameter within the
       definition.
   b.  Similarly if type parameter name is the same as predefined type.

num_params:INT is
   Number of type parameters in class definition.

non_param_p:BOOL is
   Returns "true" if class definition is not parametrized.

name_str:STR is
   Name of class.

filename:STR is
   Name of files in which class definition is found.
   `C' class is the only one that can span multiple files.

change_name(new_nm:STR) is
   Change class name.  New name has to be inserted into
   string table.

add_features(nflst:LST_FEATOB) is
   Add a list of features.  Caller must verify that it is
   alright to add the list of features.

features:LST_FEATOB is
   Returns a list of features of current class.

unique_key:INT is
   Returns a unique key to identify CLASSOB.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CLASSOB_S is                                                   [class]

   Undocumented.


Public definitions of class CLASSOB_S: 

Inherits from: RESERVED_WORDS

Inherits from: C_TYPE_CONST

Inherits from: COMPILE_KEYS_CONST

index:INT;
   Index to global semantic table; updated by insert procedures
   in CLASSOB_S_TABLE

lineno:INT;
   Undocumented.

print_indent:INT := 2;                                      [constant]
   Undocumented.

def:CLASSOB;
   CLASSOB of origin

flst:LST_FEATOB_S;
   List of features.  This list may contain empty entries after
     duplicates are eliminated.  But before exiting from
     "expand_cinh", we compact the new list of features so that
     there will not be any void entry.

pinst:LST_TYPEOB_S;
   Instantiations of type parameters stored as $TYPEOB_S's, and
   hence FOO{X} and FOO{$X} are both installed in the global class
   instance table.

is_parametrized:BOOL;
   Set to "true" is this is an instantiated class.  Computed when
   the object is created.

key:LSTINT_KEY;
   Holds a unique key

cinh_done:BOOL;
   Set to "true" when class inheritance finished

symtab:SYMBOL_TABLE;
   Contains (feature, name-index) pair after expanding class and
     feature inheritance, and eliminating duplicates (including
     UNDEFINE's).  The features are also stored in "flst".
     It is organized as a symbol table, so that later semantic
     can use the same table.

my_inh:LIST{CLASSOB_S};
   CLASSOB_S inherited from
   Computed in "eliminate_dup".  Note that this must be a pointer
   to a CLASSOB_S object, rather than an integer, because positions
   of CLASSOB_S's may change. 
   NOTE: In the current implementation, the positions of CLASSOB_S's
         remain the same (in different incremental compilations)
         because if not, the required changes to the compiler structure
         will be large.

num_attrs:INT;
   Number of attributes
   Computed in "resolve_predef_types_and_compute_num_attrs"

atomic_p:INT;
   This attribute is "0" if an object of this class contains
   pointers; computed in "compute_attr_offsets".  For non-pointer
   classes (eg INT), this attribute is irrelevant but set to "1".

anc:LIST{INT};
   Ancestors
   Computed in "compute_anc"

des:INT_HASH_SET;
   Descendents by inheritance
   Created in "create" but computed in "compute_des"

pdes:INT_HASH_SET;
   Descendents via parametrization; computed in "compute_pdes"

alldes:INT_HASH_SET;
   All descendents via parametrization; computed in "compute_des"
   and "compute_pdes".  This is guaranteed to be non-void after 
   "compute_pdes" (because it is copied from "des" which is non-void).

pdepth:INT;
   Depth of class instance; updated by semantic routine operating
   directly on the class intance

prefix:STR;
   Prefix of the form FOO123_
   Computed in "update_ind" which is called when class instance 
     has been inserted into global table.

my_strname:STR;
   Full name of Sather class (with parametrization)

cfilename:STR;
   Name of C file (without suffix)
   Computed in "update_ind" which is called when class instance 
     has been inserted into global table.

basic_type:INT;
   Contains index to the global table of basic type (if any) 
     inherited from.  If this class instance does not inherit
     from any basic type, then it is 0.  Updated in "compute_anc".
   NOTE: The computation is quite subtle.  There are two cases to be
   considered: 
   (1) BOOL, CHAR, INT, REAL, DOUBLE, F_OB (*)
   In this case, the descendents' basic type are updated in 
   "add_unique_anc".  For the (*) classes, their basic_types are
   updated "update_ctype" (if it's not already updated).
  
   (2) Array classes (**)
   We distinguish between two kinds of descendents.
   (a) Parametrized descendent (eg ARRAY{FOO}).  The basic type
   is updated at the end of "compute_anc" when the dimension is
   computed.
   (b) Mixed descendent (eg BAR inherits from ARRAY{FOO}).  The basic
   type is updated in "add_unique_anc".

arrdim:INT;
   1,2,3,4 or 0 if no array, no value needed for "unsure".
   Updated in "compute_anc".

ctype:INT;
   Updated in "compute_anc".  This is the C type for something
     declared to be of this class.

base_size:INT;
   Size in bytes without array stuff
   Calculated in "compute_attr_offsets" 

cnames:INT_HASH_SET;
   C names used in this class

externs:INT_HASH_SET;
   Names and class instance of features used
   Computed in "semant" phase (specifically TYPESPEC_ARGS_EXPROB_S node)

ext_strs:INT_HASH_SET;
   Global names of string constants
   Computed in "semant" phase
   NOTE:
   "ext_strs", "cnames" and "externs" are initialized when the CLASSOB_S 
   object is created (ie "create" routine) and all guaranteed to be non-void.

elem_type:$TYPEOB_S;
   Contains information about whether dispatched and index to 
   class instance which is type of element.  This is updated in 
   "compute_anc".

is_used_p:BOOL;
   This flag is "true" if eg this class is used elsewhere besides in
   class inheritance.  
   IMPORTANT:  This flag is used only for determining if the C code
               for a class is to be generated (more generally, for 
               any printing of code associated with that class).
               Semantic check for all classes are done independent of 
               this value.  This is because of the possible conflict 
               with the use of "f.expr" (f:$OB).  (Ref: Implementation 
               of routine call on general objects in general document).

found_classes_used:BOOL;
   This flag is "true" if the internal features of this class have been
   scanned to gather used classes.

cp_feats_from_def:BOOL;
   This flag is "true" if the features of the class definition have
   been copied using "copy_features" routine.

structure_updated:BOOL;
   Undocumented.

internal_updated:BOOL;
   These two values indicate how drastically the class has changed.
   If the class C1's interface has changed, then any other class C2
   that uses C1 (eg by inheritance, variable/attribute of type C1 or
   $C1 etc) must be changed.  

c_type_updated:BOOL;
   This indicate if the C type of this class has changed from previous
   compilation.  It affects the interface of other classes whose 
   attributes/shareds etc uses this class.  (Refer to note in 
   "do_update_info" in ATTR_DECL_FEATOB_S.)  This is computed in 
   "compute_anc" after "ctype" has been found.
   NOTE: "c_type_updated" = "true" => "structure_updated" = "true"

def_time_stamp:TIME_INT;
   Time-stamp for this particular instantiated class; this value is
   computed from the time-stamp of class definition.

time_stamp:TIME_INT;
   This value is initialized from "def_time_stamp" (in "create" routine)
   and updated in "compute_time_stamp".  This is recursively defined
   as the largest of:
   1.  "time_stamp" of all ancestors
   2.  "time_stamp" of all type parameters.

time_stamp_done:BOOL;
   The value is "true" if the attribute "time_stamp" has been updated
   properly.

callees:INT_HASH_SET;
   Indices of class whose features (ie shareds/constants etc) are
   called by this particular class.  The called classes (callees)
   are marked "internal_updated".  If we have eg:
        x:$P;
        x.f;
   then this set includes all the descendents of P.
   This value is created in the "create" routine, updated in the "semant"
   routines of EXPR_ARGS_EXPROB_S and TYPESPEC_ARGS_EXPROB_S.  The
   classes are marked in the "misc_info" routine.

callers:INT_HASH_SET;
   Refer to implementation note for use of this attribute.

semant_done:BOOL;
   The caller of "semant" should set this to "true" when it is done.

prefix_size:INT := 3;                                       [constant]
   Number of characters from class name to use for prefix

filename_size:INT := 6;                                     [constant]
   Number of characters from class name to use for file name containing
   class code

create(d:CLASSOB; k:LSTINT_KEY; pi:LST_TYPEOB_S):SELF_TYPE is
   Creates an object representing an (actualized) Sather class.

copy_features is
   Copy all the features in CLASSOB, installing new CLASSOB_S as
   necessary.  Caller must determine if there is any type
   instantiations.

update_ind(i:INT) is
   An interface routine to update Sather class index, so that
   any necessary house-keeping code is executed whenever the index
   updated.

mark_is_used is
   Interface routine to update usage of Sather class (`is_used_p'
   attribute) together with other house-keeping code.

make_prefix:STR is
   Make a string to be used in C code generation (illustrates
   use of various string routines).

make_cfilename:STR is
   Name of C file name to contain code for this Sather class.

parametrized_p:BOOL is
   Returns `true' if definition of current Sather class is
   parametrized.

name_str:STR is
   Returned string should not be modified.  This is the name
   of the class definition, not the full name (eg parametrized class).

full_name:STR is
   Full name of the class, whether parametrized or not

update_ctype is
   The current class is not a pointer as long as the correponding
   C type is either "char", "int", "float", or "double".

get_feature(index:INT):$SEMANTOB is
   This routine should only be used after class inheritance
     have been fully expanded and duplicates eliminated, because
     "symtab" is non-void only after these operations.

store_feature_unique(new_flst:LST_FEATOB_S; fo:$FEATOB_S):LST_FEATOB_S is
   Stores a feature uniquely into both the given feature list and the 
   symbol table of this Sather class.

eliminate_dup is
   Eliminate attributes declared as UNDEFINE, leaving only
   the latest feature with the same name.  (This does not 
   apply to inherited class features.)  This assumes that
   at any time, there is only one feature with a certain
   time.

expand_cinh:BOOL is
   First make sure the class that is inherited has already been expanded.
   After expansion immediately eliminate features with duplicate names
     and deal with UNDEFINE declarations.
   Perform the following checks:
   a.  No cycle in class inheritance graph
   b.  "UNDEFINE" and "OB" are not inheritable.
   The line numbers of duplicate (inherited) features are obtained from
   line number of the current feature that is being expanded.  This is
   done by having "dup" routine of "LST_FEATOB_S" update all the line
   numbers of duplicated features from the line number of 
   "GLOBALS::curr_feature".

resolve_predef_types_and_compute_num_attrs is
   Now that we have all the features of a class instance, we can
   a.  resolve SELF_TYPE
   b.  check that "C", "SYS", "UNDEFINE" is not used in any 
       declaration
   c.  check that "OB" is used only in a dispatched fashion.	    
   Also, since we have all the features of a class instance and eliminated
   duplicates, we can count the number of attributes for each class. 
   This also reduce the number of passes.
   Another function of this function is to mark those classes whose code
   will not be used anywhere. 

compute_pdepth:INT is
   Level of parametrization of this (actualized) Sather class.
   Non-parametrized classes are at level 0.

add_unique_anc(anc_index:INT) is
   Add index of an ancestor to the list of ancestor indices.

compute_anc is
   Compute list of all direct/indirect ancestor indices.

compute_des is
   Add self to the ancestors' descendent lists.  The list
   is created when the class instance is created.
   This routine computes the decendant relationship information based on
   inheritance information.

compute_pdes is
   This routine computes decendant information based on paramaterized
   actualization information.

adjust_parent_alldes is
   Now that all my descendents have been computed, add them
   to all my ancestors.

compute_time_stamp is
   Compute time-stamp of this Sather class; it is the largest
   times of all its direct/indirect ancestors and itself.

compute_attr_offsets is
   Group all attributes requiring less than 4 bytes together.
   Note that the compacting can be done only after all the C types
   of classes are done (ie after "compute_anc" where "ctype" is
   computed).

pre_semant is
   We perform the semantic check for constants/shareds first
   because the semantic check of routines may look for the
   values of constants.  Eg
        constant x:INT := FOO::y;
        f is .... SELF_TYPE::x .... end;
   In this case, when we want to check if `SELF_TYPE::x' is a constant,
   we need to know the referrent of `y' in FOO.

semant is
   Features have already been entered into symbol table in earlier
   phases.  Rather than using the general `semant' routine from
   LST_SEMANTOB class, since we need to update the global variable
   `GLOBALS::curr_feature', we explicitly cycle through the
   list of features. 

mark_callees_and_callers is
   Update which classes might have been changed and need to
   be regenerated using the following rules:

misc_info is
   Traverse the routines and perform the following function:
   a. Look for all required temporaries 
   b1. Generate goto-tags
   b2. Check that all "break" statements are inside loops
   c. Check that all dispatches are only on non-basic objects.
   d. Evaluate all value of constant features.
   e. Collect all the temporary names of strings constants
      which are constant features and in other classes.

cprint_macros(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_header_and_macros(outfile:SAT_OUTFILE) is
   Print out a header for a C file saying what class it is.
   !* Add in code later to put in name and date

cprint_externs(outfile:SAT_OUTFILE) is
   Print features which are referenced but not defined in this
   class.

cprint_ext_strs(outfile:SAT_OUTFILE) is
   Print extern declarations for references to strings constants
   in constant feature of other classes.

cprint_declns(outfile:SAT_OUTFILE) is
   Print out declarations of routines/shared/constants in this class.

cprint_attr_tbl(outfile:SAT_OUTFILE) is
   Print out an initialized array declaration which will eventually be
     an entry in the global table "attr_table_".  Here it will be named
     "attr_ent_FOO12_".  It has entries:  base-size (in bytes not
     including array stuff), array dimension, type of array element,
     number of attributes, the set of C types, and the set of offsets.

cprint_feat_tbl(outfile:SAT_OUTFILE) is
   Print out an initialized array declaration which will eventually be
   an entry in the global table "feat_table_".  Here it will be named
   "feat_ent_FOO12_".  It has entries:  number of features, C type
   of this class, Sather type (Class index) of array element (0 if this 
   class is not an array), the set of feature name indices, categories 
   of features, and the set of Sather types of features.

cprint_des_tbl(outfile:SAT_OUTFILE) is
   Print a list of integers (representing a bit-vector), indicating
   which classes are descendent of current class.

cprint_routines(outfile:SAT_OUTFILE) is
   Print out all routines in class.

cprint_ctype(outfile:SAT_OUTFILE) is
   Print out the C type names.

cprint_extern_feats(outfile:SAT_OUTFILE):INT is
   We print the extern declarations for all features that
   might possibly be used (regardless of whether feature might
   be used in a dispatch fashion).  

cprint_insert_feats(outfile:SAT_OUTFILE) is
   We insert a dispatch value into the dispatch table only if there
   is a chance that it might be used.

cprint_post_rtcode(outfile:SAT_OUTFILE) is
   Print any house-keeping code necessary just before quitting
   a routine (of this class).

cprint_pre_rtcode(outfile:SAT_OUTFILE) is
   Print any house-keeping code necessary just before starting
   to execute a routine (of this class).

cprint_init_shareds_and_consts(outfile:SAT_OUTFILE) is
   Print out the initialization code for constants and shareds which
   are globals.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CLASSOB_S_TABLE is                                             [class]

   We keep this inheritance, rather of directly accessing the constant
   features in `RESERVED_WORDS', in order to use as much of the language
   constructs as possible, so that the compiler can serve as a good test.


Public definitions of class CLASSOB_S_TABLE: 

Inherits from: RESERVED_WORDS

keys:ARRAY{LSTINT_KEY};
   Undocumented.

indices:ARRAY{INT};
   The key type used is LSTINT_KEY

instances:ARRAY{CLASSOB_S};
   Undocumented.

instances_size:INT;
   Undocumented.

keys_size:INT;
   Undocumented.

next_ind:INT;
   Undocumented.

def_table_size:INT := 50;                                   [constant]
   *! Random size, but must be be enough to accomodate at least the
   predefined classes.

error_msg(s:STR) is
   Print an error message.

error_exit(s:STR) is
   Print error message and quit.

expand(size:INT) is
   Increase the size of the table until it is larger than
   the required size.

create(size:INT):SELF_TYPE is
   Create a table to contain actualized class representations.

hash(k:LSTINT_KEY):INT is
   Hash function on actualized class representations.

get_obj(k:LSTINT_KEY):CLASSOB_S is
   Given a key (sequence of integers), return the corresponding
   actualized Sather class.

add_unique_obj(k:LSTINT_KEY; inst:CLASSOB_S) is
   Add the object and replace older object (with same key) if 
   one already exists.

add_unique_obj_at(k:LSTINT_KEY; inst:CLASSOB_S; loc:INT) is
   Add the object at a unique location.  If an object C2 (with different
   key) already exists at that location, move C2 to a new location.
   If an object C2' (with same key) already exists at that location,
   it is replaced by the new object.

double_tables is
   Double the size of actualized class table.

remove_obj(k:LSTINT_KEY):BOOL is
   Returns "true" if object exists and is removed, false otherwise

at_index(i:INT):CLASSOB_S is
   Returns an actualized class representation if it is within
   current range of table.

print_table(outfile:OUTFILE) is
   Print whatever class representations are currently in
   the table.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CLASSOB_TABLE is                                               [class]

   Encapsulates all routines on the class definition table.


Public definitions of class CLASSOB_TABLE: 

Inherits from: HASH_TABLE

def_table_size:INT := 50;                                   [constant]
   The size of the table must be at least 25 to accomodate the
   base classes.

Inherits from: RESERVED_WORDS

create(size:INT):SELF_TYPE is
   Undocumented.

uppercase_name_p(def:CLASSOB) is
   Checks that class name is upper, and change it if not.

install(new_def:CLASSOB) is
   Install object into class definition table if not previously defined.
   Semantic check:
   a)  All class names are upper-case. 
   b)  If duplicate class definition, add new features uniquely.

at_index(i:INT):CLASSOB is
        if (i < 0) or (i > next_ind) then

print_table(outfile:OUTFILE) is
   Undocumented.

print_def(outfile:OUTFILE; cnm:STR) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CLASS_KEY_SET is                                               [class]

   Uses linear search because presumably there are not many assert/debug
   keys.


Public definitions of class CLASS_KEY_SET: 

classes:LIST{INT};
   Undocumented.

keys:LIST{INT};
   Undocumented.

create(sz:INT):SELF_TYPE is
   "sz" (> 0) gives the number of <class index, key id> pairs this object
   must be prepared to hold.

insert(ci:INT; k:INT) is
   Insert the <class index, key id> pair if it does not exist.
   NOTE:  If key already exists with class index equal to 0, then
          it is not inserted.

display is
   Undocumented.

exists(ci:INT; k:INT):BOOL is
   Undocumented.

clear is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CLASS_STAT is                                                  [class]

   Undocumented.


Public definitions of class CLASS_STAT: 

index:INT;
   Class index

ctype:INT;
   C type of this class

def_time_stamp:TIME_INT;
   Time when the class was last changed.  This time is obtained
   from the time when the file containing the last is last changed.
   Since the C class may be distributed among several files, this
   value for the C class (or any class with multiple definitions) 
   is 0, and for instantiated classes, the time of the class
   class definition.

time_stamp:TIME_INT;
   Refer to description of "time_stamp" attribute in CLASSOB_S.

relevant:BOOL;
   This value is "true" if this class is used in current compilation.

filename:STR;
   Name of C file (without suffix) containing code for Sather class.

callees:INT_HASH_SET;
   Set of classes whose features is referred to by current class.

create(co:CLASSOB_S):SELF_TYPE is
   Undocumented.

update(co:CLASSOB_S) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CLASS_STAT_TBL is                                              [class]

   Undocumented.


Public definitions of class CLASS_STAT_TBL: 

version:INT := 15;                                            [shared]
   A new compilation will be started if the version is different.
   We only need to change the version if a newer data structure for
   incremental compilation is created.

map_str_to_int:STR_HASH_MAP{INT};
   Map full class name to class index.  This contains the mapping
   for all the class names whether they are marked used or not.

class_stats:ARRAY{CLASS_STAT};
   Each object in the list contains the update statistics of the
   corresponding instantiated class.

user_cfile_to_time:STR_HASH_MAP{INT};
   Keep track of user-specified C files and the corresponding time.
   Delete old user C files if necessary.

sather_home:STR;
   Updated from "COMPILER_OPTIONS::sather_home".

c_compiler:STR;
   Refer to "print_makefile" routine in SATHER_SEMANT for how
   the value is derived.  If this is void, the default C compiler 
   is used.

cc_flags:STR_SET;
   Set of C compiler flags specified by "(cc_flags)" compiler command.

keys_set:CLASS_KEY_SET;
   List of <class index, key id> pairs given in compiler commands
   "(debug_key)" in previous compilation.

c_macros:INT_TO_INTSET;
   Contains mapping <integer, integer set>.  The first integer is
   string index of the C name, and the set consists of indices of
   C macro strings for the C name.

c_to_sather_names:STR_HASH_MAP{INT};
   For each <string, integer> pair, the string is the C name of
   the feature, the integer is encoded from the <class index,
   index of feature name> pair.  This value is supposed to be
   non-void.

chk_opt:BOOL;
   Undocumented.

bro_opt:BOOL;
   Undocumented.

all_opt:BOOL;
   Undocumented.

gen_opt:BOOL;
   Undocumented.

ver_opt:BOOL;
   Undocumented.

prev_target_dir:STR;
   Undocumented.

new_p:BOOL;
   This table is new if there is no previous-compilation information
   when the table is created.

new_cfiles_recorded:BOOL;
   The value is "true" if the user C files for current compilation
   has been recorded.

cfiles_to_be_deleted:STR_HASH_MAP{INT};
   This consists of a list of user C file-names from previous compilation,
   but does not exist in current compilation.
   NOTE: If a C file is updated from previous compilation, then we do not
         want to delete it and we only make a symbolic link to it.

last_class_ind:INT;
   The last index in the global CLASSOB_S_TABLE.

create(fname:STR):SELF_TYPE is
   Read the tables from given file if it is applicable.  Otherwise,
   create empty tables.

alloc_create:SELF_TYPE is
   Allocate space for the tables.

display(f:FILE) is
   Display the information to verify them.

display_strings(f:FILE) is
   Undocumented.

persist(fname:STR) is
   Undocumented.

get_ind(cn:STR):INT is
   Undocumented.

get_cfile_time(fn:STR):INT is
   Undocumented.

mark_relevant(co:CLASSOB_S) is
   Undocumented.

irrelevant_classes:LIST{STR} is
   This routine guarantees to return a non-void list which may be
   empty.

irrelevant_cfiles:LIST{STR} is
   Returns a list of user C files to be deleted.      
   This routine guarantees a non-void LST being returned.

clear is
   Clear the table containing mapping of class names to indices, and
   delete all the CLASS_STAT objects.

record_mapping(fn:STR; index:INT) is
   Undocumented.

record_new_cfiles(cfiles:LIST{STR}):ARRAY{BOOL} is
   NOTE:  The records of user C files is based solely on file names.
          Hence if a file has been updated but exists in previous
          compilation, it is NOT recorded for deleting.

record_class_stat(co:CLASSOB_S) is
   Undocumented.

record_curr_compilation is
   Record the time-stamps information of current compilation.
   NOTE: Only generated classes are recorded.  The criteria
         is the same as that in "all_class_inst_cprint" in 
         SATHER_SEMANT.

at_index(i:INT):CLASS_STAT is
   Guarantee to return non-void object.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CODEOB is                                                      [class]

   This is the top-most ancestor class of all classes in the
   compiler which represent Sather code.


Public definitions of class CODEOB: 

lineno:INT;
   Line number is common to all constructs.

print_indent:INT := 2;                                      [constant]
   Undocumented.

create:SELF_TYPE is
   Create a parent object; this is never called if the compiler code
   is correct.

dup:SELF_TYPE is
   Duplicate a parent object.

sather_code:STR is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

COMPILER_ACTIONS is                                            [class]

   An integer is encoded in the message file read by the compiler,
   which will then take appropriate according to given code.


Public definitions of class COMPILER_ACTIONS: 

stop_compile:INT := 1;                                      [constant]
   Undocumented.

privilege_only:INT := 2;                                    [constant]
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

COMPILER_OPTIONS is                                            [class]

   Some tentative modes for the programming environment.


Public definitions of class COMPILER_OPTIONS: 

browser_mode:INT := 1;                                      [constant]
   Undocumented.

interpreter_mode:INT := 2;                                  [constant]
   Undocumented.

debugger_mode:INT := 4;                                     [constant]
   Undocumented.

target_dir:STR;                                               [shared]
   Undocumented.

cmdfile_name:STR;                                             [shared]
   Undocumented.

sather_home:STR := INSTALL_CONSTS::sather_home;               [shared]
   Undocumented.

all_np_classes:BOOL := false;                                 [shared]
   Undocumented.

void_needed:BOOL := false;                                    [shared]
   Undocumented.

verbose_code:BOOL := true;                                    [shared]
   Undocumented.

gen_base:BOOL := false;                                       [shared]
   Undocumented.

rt_code_check:BOOL := false;                                  [shared]
   Undocumented.

gen_all:BOOL := false;                                        [shared]
   Undocumented.

warn_rt_val:BOOL := false;                                    [shared]
   Undocumented.

compiler_mode:INT := 0;                                       [shared]
   Undocumented.

dbg_mode:BOOL := false;                                       [shared]
   Undocumented.

do_timing:BOOL := false;                                      [shared]
   Undocumented.

dont_compile_c:BOOL := false;                                 [shared]
   Undocumented.

use_pmake:BOOL := false;                                      [shared]
   Undocumented.

new_compilation:BOOL := false;                                [shared]
   Undocumented.

print_desinfo:BOOL := false;                                  [shared]
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

COMPILE_KEYOB is                                               [class]

   Undocumented.


Public definitions of class COMPILE_KEYOB: 

error_msg(s:STR) is
   Undocumented.

error_exit(s:STR) is
   Undocumented.

start(nm:STR) is
   Start of current command.  Only useful for C_MACRO_KEYOB

terminate is
   End of current command

cmacro_def(i:INT):STR is
   Only relevant for C_MACRO_KEYOB

insert(nm:STR) is
   Store string in "_KEYOB" objects

create:SELF_TYPE is
   Undocumented.

info_size:INT is
   All descendents must define amount of information they hold

ith_str(i:INT):STR is
   Only relevant for C_MAKEFILE_KEYOB, GENERIC_KEYOB, C_FILES_KEYOB

ith_info(i:INT):LIST{STR} is
   Relevant for C_NAME_KEYOB, C_MACRO_KEYOB 

cprint_self(outfile:OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

COMPILE_KEYS_CONST is                                          [class]

   Names of compilation keys and corresponding indices


Public definitions of class COMPILE_KEYS_CONST: 

source_files_kw:STR := "(source_files)";                    [constant]
   Undocumented.

c_files_kw:STR      := "(c_files)";                         [constant]
   Undocumented.

debug_keys_kw:STR   := "(debug_keys)";                      [constant]
   Undocumented.

cc_flags_kw:STR     := "(cc_flags)";                        [constant]
   Undocumented.

c_macro_kw:STR      := "(c_macro)";                         [constant]
   Undocumented.

c_name_kw:STR       := "(c_name)";                          [constant]
   Undocumented.

include_kw:STR      := "(include)";                         [constant]
   Undocumented.

sather_home_kw:STR  := "(sather_home)";                     [constant]
   Undocumented.

c_compiler_kw:STR   := "(c_compiler)";                      [constant]
   Undocumented.

c_makefile_kw:STR   := "(c_makefile)";                      [constant]
   Undocumented.

source_files_ind:INT := 0;                                  [constant]
   Undocumented.

c_files_ind:INT      := 1;                                  [constant]
   Undocumented.

debug_keys_ind:INT   := 2;                                  [constant]
   Undocumented.

cc_flags_ind:INT     := 3;                                  [constant]
   Undocumented.

c_macro_ind:INT      := 4;                                  [constant]
   Undocumented.

c_name_ind:INT       := 5;                                  [constant]
   Undocumented.

include_ind:INT      := 6;                                  [constant]
   Undocumented.

sather_home_ind:INT  := 7;                                  [constant]
   Undocumented.

c_compiler_ind:INT   := 8;                                  [constant]
   Undocumented.

c_makefile_ind:INT   := 9;                                  [constant]
   Undocumented.

compile_keys_fst_ind:INT := 0;                              [constant]
   Undocumented.

compile_keys_lst_ind:INT := 9;                              [constant]
   Undocumented.

num_compile_keys:INT := 10;                                 [constant]
   Undocumented.

non_compile_key_ind:INT := compile_keys_lst_ind + 1;        [constant]
   Undocumented.

eof_tok:INT   := -1;                                        [constant]
   Undocumented.

ident_tok:INT := -2;                                        [constant]
   Undocumented.

qexp_tok:INT  := -3;                                        [constant]
   Undocumented.

compile_key_p(i:INT):BOOL is
   Return "true" if integer is among the indices for command keywords

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

COND_STMTOB is                                                 [class]

   Conditionals.


Public definitions of class COND_STMTOB: 

Inherits from: STMTOB

test:$EXPROB;
   Boolean test.

then_part:LST_STMTOB;
   List of statements in then-clause.

elsif_part:LST_STMTOB;
   Elsif clauses, if any.  This should contain only ELSIF_STMTOB's.
   This is guaranteed to be non-null (by parser).

else_part:LST_STMTOB;
   List of statements in else-clause, if any.

create(t:$EXPROB; tp:LST_STMTOB; eip:LST_STMTOB; ep:LST_STMTOB; ln:INT):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):COND_STMTOB_S is
   The parameters are a list of indices for type parameter
     names and a list of keys for the type instantiations.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

COND_STMTOB_S is                                               [class]

   Conditionals.


Public definitions of class COND_STMTOB_S: 

Inherits from: STMTOB_S

test:$EXPROB_S;
   Boolean test.

then_part:LST_STMTOB_S;
   List of statements in then-clause.
   This value is guaranteed to be non-void.

elsif_part:LST_STMTOB_S;
   Elsif clauses, if any.  This should contain only ELSIF_STMTOB_S's.
   This value is guaranteed to be non-void.

else_part:LST_STMTOB_S;
   List of statements in else-clause, if any.

create(t:$EXPROB_S; tp:LST_STMTOB_S; eip:LST_STMTOB_S; ep:LST_STMTOB_S;
          ln:INT): SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

gen_temps:LIST{INT} is
   Undocumented.

gen_goto_tags(loop_stmt:LOOP_STMTOB_S) is
   Undocumented.

validate_dispatches_and_get_ext_strs is
   Undocumented.

cprint_elsif_code(outfile:SAT_OUTFILE; level:INT) is
   Undocumented.

cprint_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CONST_DECL_FEATOB is                                           [class]

   Constant attributes.


Public definitions of class CONST_DECL_FEATOB: 

Inherits from: FEATOB

Inherits from: DECLOB

pte:BOOL;
   "true" if constant feature is private

init_expr:$EXPROB;
   Initialization expression, this is guaranteed non-void from the 
     way the parser works.

create(nm:INT; t:$TYPEOB; e:$EXPROB; ln:INT):SELF_TYPE is
   Undocumented.

mark_private is
   Undocumented.

create_lst(do:ANY_DECLOB; exp:$EXPROB):LST_FEATOB is
   Given a ANY_DECLOB, take the list of identifiers in
     ANY_DECLOB, and make a list of $FEATOB's (in
     particular a list of CONST_DECL_FEATOB's).

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):CONST_DECL_FEATOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CONST_DECL_FEATOB_S is                                         [class]

   Constant attributes.


Public definitions of class CONST_DECL_FEATOB_S: 

Inherits from: FEATOB_S

Inherits from: DECLOB_S

name:INT;
   Undocumented.

init_expr:$EXPROB_S;
   Initialization expression, guaranteed non-void

pte:BOOL;
   "true" if constant is invisible to outsider

tmpct:LIST{INT};
   List of temporaries needed in initial expression

const_done:BOOL;
   "true" if constant has been evaluated

constval:$CONST_EXPROB_S;
   Value of constant
   "constval" contains an integer value only if constant has been
    declared to be an integer or a descendent of an integer.

seen:BOOL;
   For detecting loops

disp:BOOL;
   True if dispatched.

printed_p:BOOL;
   True if initialization code has been printed.

create(nm:INT; t:$TYPEOB_S; e:$EXPROB_S; priv:BOOL; c_def:CLASSOB; ln:INT):SELF_TYPE is
   Undocumented.

sather_code:STR is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

featob_s_name:INT is
   Undocumented.

declob_s_name:INT is
   Undocumented.

get_constval:$CONST_EXPROB_S is
   Undocumented.

eval_constant is
   Undocumented.

compatible_des_feat(feat:SELF_TYPE; lval_p:BOOL):BOOL is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

is_a_str_const:INT is
   Returns the temporary name of the variable associated with the
   Sather string if any.

do_gen_temps is
   Undocumented.

cprint_cname(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_extern(outfile:SAT_OUTFILE) is
   Print out the C "extern" declaration

cprint_decln_with_poss_init(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_decln(outfile:SAT_OUTFILE) is
   Print out the C "extern" declaration; caller is not responsible for
   checking that this does not have a constant value.

cprint_access_value(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_store_dispval(outfile:SAT_OUTFILE) is
   Print address of global C variable (with cast to "int")

cprint_init_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CONST_EXPROB is                                                [class]

   Parent class for boolean, character, integer, string or real Sather
   constants.


Public definitions of class CONST_EXPROB: 

Inherits from: EXPROB

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):$CONST_EXPROB_S is
   We need to replicate nodes for constants, because each 
     node has a different line number.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CONST_EXPROB_S is                                              [class]

   Parent class for boolean, character, integer, string or real Sather
   constants.


Public definitions of class CONST_EXPROB_S: 

Inherits from: EXPROB_S

dup:SELF_TYPE is
   Constant nodes are sharable.

val:STR_CURSOR is
   Default is to null string

semant(symtab:SYMBOL_TABLE) is
   Type is determinable during node creation; for a general constant
   node, we use $OB

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CS is                                                          [class]

   Undocumented.


Public definitions of class CS: 

outfile:OUTFILE;                                              [shared]
   Output file to print compiler progress.

stdin:FILE;                                                   [shared]
   User input (for initial debugging).

predef_ok:BOOL;                                               [shared]
   "true" if predefined classes have been installed without error.

error_msg(s:STR) is
   Print an error message and update error count.

error_exit(s:STR) is
   Print message and quit compilation.

warning_msg(s:STR) is
   Print warning message; this is not counted as an error.

error_cont_p(s:STR) is
   Prints error mesage, and continue or quit depending on
   user response.

read_commands:BOOL is
   Return "true" to indicate it is alright to continue and "false"
   otherwise.

init_parse is
   Initialize before reading in the source files.

read_source_files:BOOL is
   Returns "true" if the user classes are successfully read.

read_code is
   Read all Sather code source files, (after initializing
   scanner/parser).

process_classdef(def:CLASSOB) is
   This is called by parser to install a representation of
   Sather class definition in `GLOBALS::class_defs'.

main_init is
   Initialize all the global data structures

set_options(argv:ARRAY{STR}) is
   Set appropriate flags according to user-specified compiler
   options.

setup_dir is
   Create a directory name without trailing '/'s

process_classes is
   Start processing Sather code, after all class definitions
   have been read.

handle_c_files is
   Record C files used in current compilation, in addition to
   making/removing symbolic links to the correct C files.

main_end is
   After C code has been generated for Sather classes, the last
   thing to do is to manage the C files, and call the make command.

print_times is
   Print amount of time spent in different phases and
   the fraction amounts.

main(argv:ARRAY{STR}):INT is
   Top level routine of compiler.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

C_FILESTAT is                                                  [class]

   Constructor --


Public definitions of class C_FILESTAT: 

create:SELF_TYPE is
   Undocumented.

st_dev:INT is
   Undocumented.

st_ino:INT is
   Undocumented.

st_mode:INT is
   Undocumented.

st_nlink:INT is
   Undocumented.

st_uid:INT is
   Undocumented.

st_gid:INT is
   Undocumented.

st_rdev:INT is
   Undocumented.

st_size:INT is
   Undocumented.

st_atime:TIME_INT is
   Undocumented.

st_mtime:TIME_INT is
   Undocumented.

st_ctime:TIME_INT is
   Undocumented.

st_blksize:INT is
   Undocumented.

st_blocks:INT is
   Undocumented.

set_st_dev(x:INT) is
   Undocumented.

set_st_ino(x:INT) is
   Undocumented.

set_st_mode(x:INT) is
   Undocumented.

set_st_nlink(x:INT) is
   Undocumented.

set_st_uid(x:INT) is
   Undocumented.

set_st_gid(x:INT) is
   Undocumented.

set_st_rdev(x:INT) is
   Undocumented.

set_st_size(x:INT) is
   Undocumented.

set_st_atime(x:TIME_INT) is
   Undocumented.

set_st_mtime(x:TIME_INT) is
   Undocumented.

set_st_ctime(x:TIME_INT) is
   Undocumented.

set_st_blksize(x:INT) is
   Undocumented.

set_st_blocks(x:INT) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

C_FILES_KEYOB is                                               [class]

   Undocumented.


Public definitions of class C_FILES_KEYOB: 

Inherits from: COMPILE_KEYOB

info:LIST{STR};
   A list of C source file names to be compiled with Sather
     generated C files.

num_c_files:INT;
   Number of C source files

init_num_c_files:INT := 5;                                  [constant]
   Default initial number of C source files

create: SELF_TYPE is
   Undocumented.

insert(nm:STR) is
   Undocumented.

info_size:INT is
   Undocumented.

ith_str(i:INT):STR is
   Undocumented.

cprint_self(outfile:OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

C_MACRO_KEYOB is                                               [class]

   Undocumented.


Public definitions of class C_MACRO_KEYOB: 

Inherits from: COMPILE_KEYOB

info:LIST{LIST{STR}};
   Store macro entries

macro_ent:LIST{STR};
   Undocumented.

def_num_ent:INT := 10;                                      [constant]
   Expected number of macro entries

create:SELF_TYPE is
   Undocumented.

start(nm:STR) is
   Handle first string of macro command, which has been checked
   to be a quoted expression.

insert(nm:STR) is
   Insert identifiers after quoted expression

terminate is
   End of c_macro command

cmacro_def(i:INT):STR is
   Return the C macro definition at that index
   Note: Assume index is valid.

info_size:INT is
   Undocumented.

ith_info(i:INT):LIST{STR} is
   Undocumented.

cprint_self(outfile:OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

C_MAKEFILE_KEYOB is                                            [class]

   Undocumented.


Public definitions of class C_MAKEFILE_KEYOB: 

Inherits from: COMPILE_KEYOB

info:LIST{STR};
   A list of names for makefile called to compiler C code.  This
   is guaranteed to be non-void if "create" was called to allocate
   "C_MAKEFILE_KEYOB".

num_makefiles:INT;
   Number of makefiles

max_num_makefiles:INT := 1;                                 [constant]
   Maximum number of makefiles

create: SELF_TYPE is
   Undocumented.

insert(nm:STR) is
   Store makefile name.  This operation always succeeds.

info_size:INT is
   Undocumented.

ith_str(i:INT):STR is
   Undocumented.

cprint_self(outfile:OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

C_NAME_KEYOB is                                                [class]

   Undocumented.


Public definitions of class C_NAME_KEYOB: 

Inherits from: COMPILE_KEYOB

info:LIST{LIST{STR}};
   Stores name entries

name_ent:LIST{STR};
   Undocumented.

def_num_ent:INT := 20;                                      [constant]
   Expected number of c_name commands

create:SELF_TYPE is
   Undocumented.

insert(nm:STR) is
   There should be only two entries per c_name command. 

terminate is
   End of c_name command

info_size:INT is
   Undocumented.

ith_info(i:INT):LIST{STR} is
   Undocumented.

cprint_self(outfile:OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

C_TYPE_CONST is                                                [class]

   Interface to C types (size, string name).


Public definitions of class C_TYPE_CONST: 

c_ptr:INT    := 1;                                          [constant]
   Undocumented.

c_char:INT   := 2;                                          [constant]
   Undocumented.

c_int:INT    := 3;                                          [constant]
   Undocumented.

c_float:INT  := 4;                                          [constant]
   Undocumented.

c_double:INT := 5;                                          [constant]
   Undocumented.

c_void:INT   := 6;                                          [constant]
   Undocumented.

c_ptr_size:INT    := 4;                                     [constant]
   Undocumented.

c_char_size:INT   := 1;                                     [constant]
   Undocumented.

c_int_size:INT    := 4;                                     [constant]
   Undocumented.

c_float_size:INT  := 4;                                     [constant]
   Undocumented.

c_double_size:INT := 8;                                     [constant]
   Undocumented.

c_ptr_name:STR   := "ptr ";                                 [constant]
   Undocumented.

c_char_name:STR  := "char ";                                [constant]
   Undocumented.

c_int_name:STR   := "int ";                                 [constant]
   Undocumented.

c_float_name:STR := "float ";                               [constant]
   Undocumented.

c_double_name:STR := "double ";                             [constant]
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DBTABLE is                                                     [class]

   Undocumented.


Public definitions of class DBTABLE: 

defSize:INT := 20;                                          [constant]
   corresponds to avg number of files

entries:ARRAY{SATLINEEXP};                                    [shared]
   Undocumented.

curLength:INT := 0;                                           [shared]
   current length of entries

entryMap:STRINT_TO_INT;                                       [shared]
   map from <satherFileName,satherLineNo>
   to index in entries array

satherFiles:STR2INT2STR;                                      [shared]
   map from sather file name <--> index number

numSatherFiles:INT := 0;                                      [shared]
   Undocumented.

cFiles:STR2INT2STR;                                           [shared]
   map from C file name <--> index number

numCFiles:INT := 0;                                           [shared]
   Undocumented.

init is
   initialize all tables.

addCLine(satherFileName:STR;satherLineNo:INT;cFileName:STR;cClineNo:INT) is
   add to the global debugger table the cfile:lineno that corresponds
   to the given sather file name and line number

sort is
   Sort the information so that things get printed out in order
   in the debugger table. Then insert the Sather and C file names
   into str <--> int tables to the table will reference the strings
   as ints.

print is
   print out the debugger table in the form:
   
   <numSatherFiles>
   satherFile1
   ...
   <numCFiles>
   C file 1
   ...
   satherFileNum:satherFileLineNum cfileNum:cfilelineno ...
   ...

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DEBUG_STMTOB is                                                [class]

   Debug statements can be turned on/off by a key 


Public definitions of class DEBUG_STMTOB: 

Inherits from: OPT_STMTOB

stmts:LST_STMTOB;
   List of statements.

create(k:INT; s:LST_STMTOB; ln:INT):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):DEBUG_STMTOB_S is
   The parameters are a list of indices for type parameter
     names and a list of keys for the type instantiations.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DEBUG_STMTOB_S is                                              [class]

   Debug statements can be turned on/off by a key 


Public definitions of class DEBUG_STMTOB_S: 

Inherits from: OPT_STMTOB_S

stmts:LST_STMTOB_S;
   List of statements.

create(k:INT; s:LST_STMTOB_S; ln:INT):SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

gen_temps:LIST{INT} is
   Undocumented.

gen_goto_tags(loop_stmt:LOOP_STMTOB_S) is
   Undocumented.

validate_dispatches_and_get_ext_strs is
   Undocumented.

cprint_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DECLOB is                                                      [class]

   Parent class of declarations


Public definitions of class DECLOB: 

Inherits from: PARSEROB

type_spec:$TYPEOB;
   Undocumented.

create(t:$TYPEOB):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):DECLOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DECLOB_S is                                                    [class]

   Parent class of declarations


Public definitions of class DECLOB_S: 

Inherits from: SEMANTOB

type_spec:$TYPEOB_S;
   Undocumented.

create(t:$TYPEOB_S; ln:INT):SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

undefined_p:BOOL is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

typeof:$TYPEOB_S is
   Undocumented.

declob_s_name:INT is
   Name of declared parameter, local, attribute, shared or constant

validate_dispatches_and_get_ext_strs is
   Undocumented.

cprint_cname(outfile:SAT_OUTFILE) is
   Print out C name of declared variable.

cprint_code(outfile:SAT_OUTFILE) is
   The following will be printed for each kind of declaration.
   a.  ATTR_DECL_FEATOB_S :  Nothing
   b.  SHARED_DECL_FEATOB_S : The initialization code
   c.  CONST_DECL_FEATOB_S : Initialization code if not a constant
   d.  PARAM_DECLOB_S : Nothing
   e.  LVAR_DECLOB_S : Initialization of local variable if any.

cprint_decln(outfile:SAT_OUTFILE) is
   The following will be printed for each kind of declaration.
   a.  ATTR_DECL_FEATOB_S :  Nothing
   b.  SHARED_DECL_FEATOB_S : Declared as a C global
   c.  CONST_DECL_FEATOB_S : Declared as a C global if value cannot
                             be computed at compile time
   d.  PARAM_DECLOB_S : Just the parameter declaration
   e.  LVAR_DECLOB_S : Declaration of local variable.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DEEP_COPY is                                                   [class]

   Undocumented.


Public definitions of class DEEP_COPY: 

deep_copy(ob:$OB):$OB is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DISPATCH_TYPEOB is                                             [class]

   Dispatched types.


Public definitions of class DISPATCH_TYPEOB: 

Inherits from: TYPEOB

dt:$TYPEOB;
   TYPEOB dispatched from

create(t:$TYPEOB):SELF_TYPE is
   This checks for declarations of the form eg "$$FOO" which are not
     checked by parser.

disp_type:$TYPEOB is
   Undocumented.

name_str:STR is
   Undocumented.

get_key(pl:LIST{INT}; pi:LST_TYPEOB_S):LSTINT_KEY is
   Key of a DISPATCH_TYPEOB is the same as whatever type
     it is dispatched from.  Thus $FOO and FOO have the
     same key, but FOO{X} and FOO{$X} have different keys because
     we need to install two class instantiations.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):$TYPEOB_S is
   "create" ensures that the dispatch type is either SIMPLE_TYPEOB or
     PARAM_TYPEOB.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DOT_SATHER_HANDLER is                                          [class]

   Undocumented.


Public definitions of class DOT_SATHER_HANDLER: 

Inherits from: COMPILE_KEYS_CONST

def_cmdfile_name:STR := ".sather";                          [constant]
   Default command file to look for

err_unknown_file:INT := 1;                                  [constant]
   Undocumented.

inp:LIST{SAT_CMDFILE};
   List of compiler command files.  This value is guaranteed to
   be non-void if we use "create" routine.

cmdfile:SAT_CMDFILE;
   Current compiler command file

sat_info:ARRAY{$COMPILE_KEYOB};
   Each COMPILE_KEY (or a descendent class of COMPILE_KEY) stores
     info for a compile key.		

error_flag:BOOL;
   Set when an error occurs in reading or trying to read a command 
     file	

error_type:INT;
   Type of error if "error_flag" is set

error_msg(s:STR) is
   Undocumented.

error_exit(s:STR) is
   Undocumented.

create:SELF_TYPE is
   Undocumented.

init(cmdfile_name:STR) is
   Undocumented.

found_p(fname:STR):BOOL is
   Returns "true" if file exists in current stack

read_cmdfile:BOOL is
   First command file is provided when object is created.
   Returns "true" if cmdfile has been processed successfully.
   Otherwise, "error_flag" is false and "error_type" contains
     the type of error.

ith_source_file(i:INT):STR is
   Name of ith source file; returns void if none

adjust_path(s:STR):STR is
   adjust the path given by s

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DOUBLE is                                                      [class]

   `DOUBLE' defines operations on double-precision real numbers.
   It has routines corresponding to those in `REAL' and they obey
   the same restrictions.
   More exotic special functions are defined in the `MATH' class.
   `REAL''s and `DOUBLE''s are generally interchangable and the compiler
   will properly convert between them. `pow(x)' computes `self' raised to
   the power of `x'. It requires that `x' be larger than `0' if `self' is
   equal to zero and that `self' be non-negative if `x' is not an
   integer. `sqrt' computes the square root and requires that `self'
   be non-negative. `to_i', `floor', `ceiling', and `round' compute
   the four natural ways to approximate a floating point value by an
   integer. `mod(x)' computes the floating point remainder of `self'
   divided by `x' and has the same sign as self.


Public definitions of class DOUBLE: 

to_r:REAL is
   Convert to a `REAL'.

to_i:INT is
   Nearest integer toward zero (sometimes called "truncate").

to_s:STR is
   The string representation of `self'.

max(r:DOUBLE):DOUBLE is
   The maximum of `self' and `r'.

min(r:DOUBLE):DOUBLE is
   The minimum of `self' and `r'.

pow(x:DOUBLE):DOUBLE is
    Returns `self' raised to the power of `x'. Error if
   `self=0' and `x<=0' or if `self<0' and `x' is not an `INT'.

sqrt:DOUBLE is
   The square root of `self', `self>=0'.

floor:INT is
   Largest integer not greater than `self'.

ceiling:INT is
   Smallest integer not less than `self'.

round:INT is
   Closest integer to `self'.

abs:DOUBLE is
   The absolute value of `self'.

mod(x:DOUBLE):DOUBLE is
   The floating point remainder of `self/x' with the same sign
   as `self'.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DTABLE_TST is                                                  [class]

   Undocumented.


Public definitions of class DTABLE_TST: 

main(args:ARRAY{STR}) is
   

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ELSIF_STMTOB is                                                [class]

   An elsif clause.


Public definitions of class ELSIF_STMTOB: 

Inherits from: STMTOB

test:$EXPROB;
   Undocumented.

then_part:LST_STMTOB;
   List of statements in then-clause.

create(t:$EXPROB; tp:LST_STMTOB; ln:INT):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):ELSIF_STMTOB_S is
   The parameters are a list of indices for type parameter
     names and a list of keys for the type instantiations.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ELSIF_STMTOB_S is                                              [class]

   An elsif clause.


Public definitions of class ELSIF_STMTOB_S: 

Inherits from: STMTOB_S

test:$EXPROB_S;
   Undocumented.

then_part:LST_STMTOB_S;
   List of statements in then-clause.

create(t:$EXPROB_S; tp:LST_STMTOB_S; ln:INT):SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

validate_dispatches_and_get_ext_strs is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

gen_temps:LIST{INT} is
   Undocumented.

gen_goto_tags(loop_stmt:LOOP_STMTOB_S) is
   Undocumented.

cprint_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ERR is                                                         [class]

   Direct access to stderr.


Public definitions of class ERR: 

file:FILE := FILE::err;                                       [shared]
   A file object for stderr.

b(bo:BOOL):ERR is
   Undocumented.

c(ch:CHAR):ERR is
   Undocumented.

i(in:INT):ERR is
   Undocumented.

s(st:STR):ERR is
   Undocumented.

r(re:REAL):ERR is
   Undocumented.

d(do:DOUBLE):ERR is
   Undocumented.

nl:ERR is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ERR_INFO is                                                    [class]

   Different ways to print error messages, and whether to
   quit compilation or not.


Public definitions of class ERR_INFO: 

warning_msg(s:STR) is
   Print warning message; this is not counted as error.

error_msg(s:STR) is
   Print error message and increment error count.

error_exit(s:STR) is
   Print error message and exit compilation.

format_warning_msg(ln:INT; s:STR) is
   Print warning message about a certain line in current
   file, given by `def_filename'.

format_error_msg(ln:INT; s:STR) is
   Print message about error on a certain line in current
   file, given by `def_filename'.

format_error_exit(ln:INT; s:STR) is
   Print message about error on a certain line in current
   file, given by `def_filename', and exit from compilation.

filename:STR is
   Name of file containing the class currently being worked
   on by compiler.

def_filename:STR is
   Name of file containing the feature currently being worked
   on by compiler.  NOTE: If the feature is inherited, this
   gives the filename of the ancestor class in which the feature
   is first defined.

def_classname:STR is
   Name of class containing the feature currently being worked
   on by compiler.  NOTE: If the feature is inherited, this
   gives the filename of the ancestor class in which the feature
   is first defined.

feat_lineno:INT is
   Line number of current feature being worked on.

type_mismatch_err(where:STR; t1,t2:$TYPEOB_S; ln:INT) is
   Print out type mismatch error with a clearer message.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

EXPROB is                                                      [class]

   Expressions.


Public definitions of class EXPROB: 

Inherits from: PARSEROB

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):$EXPROB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

EXPROB_S is                                                    [class]

   Expression objects created during semantic phase.


Public definitions of class EXPROB_S: 

Inherits from: SEMANTOB

res_type:$TYPEOB_S;
   Actual resolved type of expression

c_type:INT;
   Correponding C type; refer to C_TYPE_CONST for different C types

cast_to_c_type:INT;
   If 'cast_to_c_type' is not zero, then cast the expression to this
   C type before printing via cprint_act_code. Refer to C_TYPE_CONST for
   different C types.
   This is set in 'semant'
   if this expression is an actual argument (of integer type) to a
   routine whos formal is 'float' or 'double'. This would not be
   necessary if we used ANSI C and C function prototyped headers.

rt_type:INT;
   The value is 0 if we do not need to generate the code for runtime
   type-checking.  Otherwise, if the value is negative, we need to 
   generate code for runtime type-checking for dispatched type (as
   per case (4)).  If the value is positive, we need to generate code
   for runtime type-checking as per cases (5b), (5d), (7) and (8).
   (The different cases are described in "conforms_to" routine for
   INSTANT_TYPEOB_S.)

create(ln:INT):SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Do nothing; ultimately, this is only relevant for 
   TYPESPEC_ARGS_EXPROB_S, but we need to recurse down the
   expressions.

valid_init_expr:BOOL is
   Default is valid

assignable_p:BOOL is
   Default is not assignable.

typeof:$TYPEOB_S is
   Undocumented.

gen_temps:LIST{INT} is
   Default is not to generate any temporaries

expr_eval_constant:$CONST_EXPROB_S is
   Default is no constant value.

get_ext_strs is
   This records references to external strings; the real work
   is done in EXPR_ARGS_EXPROB_S and TYPESPEC_ARGS_EXPROB_S.  
   The other kinds of objects just preform recursion on the
   subexpressions or do nothing.

to_be_pre_evaluated:BOOL is
   The default is to return "false".  The cases we have to check
   are described in the implementation of dispatching mechanism
   in the general document.

access_value_only:BOOL is
   This is generally true, except for function calls when we look at
   ID_EXPROB_S, ID_ARGS_EXPROB_S, EXPR_ARGS_EXPROB_S, 
   TYPESPEC_ARGS_EXPROB_S), and in the case of AREF_EXPROB_S, when
   if the array is value-access only.

fob_error(op_name:STR; cls_name:STR) is
   Give an error message when using a predefined routine on a 
   foreign object.

cprint_pre_code(outfile:SAT_OUTFILE) is
   Default is to do nothing

cprint_act_code(outfile:SAT_OUTFILE) is
   Default is to do nothing

cprint_init_code(outfile:SAT_OUTFILE) is
   If the referrents of the expressions are constants or shareds,
   check whether their initialization code have been printed, and
   call "cprint_init_code" for them if not. 

cprint_cast_code(outfile:SAT_OUTFILE) is
   if cast_to_c_type is non-zero, generate the C code to cast this
   expression to the specified C type.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

EXPR_ARGS_EXPROB is                                            [class]

   Dotted expressions with possibly arguments


Public definitions of class EXPR_ARGS_EXPROB: 

Inherits from: EXPROB

obj:$EXPROB;
   Undocumented.

feat:INT;
   Undocumented.

args:LST_EXPROB;
   Undocumented.

create(o:$EXPROB; f:INT; alst:LST_EXPROB):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):EXPR_ARGS_EXPROB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

EXPR_ARGS_EXPROB_S is                                          [class]

   Dotted expressions.


Public definitions of class EXPR_ARGS_EXPROB_S: 

Inherits from: EXPROB_S

obj:$EXPROB_S;
   Undocumented.

feat:INT;
   Undocumented.

args:LST_EXPROB_S;
   This is guaranteed to be non-void if it is created using the "create"
   routine.

referrent:$SEMANTOB;
   Referrent of the name 

temp_name:INT;
   Undocumented.

temp_ctype:INT;
   Temporary variable to hold the value of object returned.  The
   type of this variable should be consistent with the type of the
   object.

typeholder_name:INT;
   Undocumented.

typeholder_ctype:INT;
   Static variable to hold the Sather type of last accessed object

dispval_name:INT;
   Undocumented.

dispval_ctype:INT;
   If the feature accessed is a shared, constant (sometimes) or 
     routine, it is a pointer, else it is an offset to the attribute. 
     "dispval_ctype" refers to the type for which "dispval_name" is
     used.  For example, if it is an offset to the attribute, it
     refers to the C type of the attribute.  If it a pointer to a
     function, it refers to the type returned by the function.

temp_name_tpchk:INT;
   Undocumented.

temp_ctype_tpchk:INT;
   Temporary variable (and C type of temporary variable) to hold result
   of dotted expression so that the type of the result can be checked (if
   runtime type-checking is requested).

temp_args:ARRAY{INT};
   Undocumented.

temp_args_ctype:ARRAY{INT};
   List of variables to hold temporary variables that will contain
   result of argument evaluation, except for cases without side-
   effect.  (Ref: Implementation of dispatching mechanism in general
   document).  The values are guaranteed to be non-void and have
   the same length as the number of arguments.

has_pre_eval_args:BOOL;
   If this value is false, then any code involving pre-evaluating
   arguments can be avoided.  This is initialized to "false".

printed_times:INT;
   The value is greater than 0 if the runtime type-checking code is already
   generated, ie the code to compute value of the expression is already 
   generated.  This is the number of times this node has been printed; it
   should be less than or equal than the global variable "g_tag".

create(o:$EXPROB_S; f:INT; alst:LST_EXPROB_S; ln:INT):SELF_TYPE is
   Undocumented.

sather_code:STR is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

valid_init_expr:BOOL is
   Undocumented.

expr_eval_constant:$CONST_EXPROB_S is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

assignable_p:BOOL is
   A dot expression is assignable iff the referenced feature is
     assignable.

gen_temps:LIST{INT} is
   This routine should only be called after the type has been 
     resolved, so that the value of "res_type" is correct.

get_ext_strs is
   Undocumented.

to_be_pre_evaluated:BOOL is
   This expression must be pre-evaluated, if the object type is
   dispatched.  The arguments of this expression have been taken
   care of when we call "semant" on this expression.

access_value_only:BOOL is
   Default is to return "false" if we do not know the referrent;
   otherwise, return "true" if the referrent is not a routine. 

cprint_pre_code(outfile:SAT_OUTFILE) is
   Undocumented.

cont1:INT := 1;                                             [constant]
   Print access to attribute of object whose offset is stored in
   a temporary variable.

cont2:INT := 2;                                             [constant]
   Print access to "asize2" of array

cont3:INT := 3;                                             [constant]
   Print access to "asize3" of array

cont4:INT := 4;                                             [constant]
   Print access to "asize4" of array

cont5:INT := 5;                                             [constant]
   Print access to "asize" of ARRAY

cont6:INT := 6;                                             [constant]
   Print access to "asize2" of array

cont7:INT := 7;                                             [constant]
   Print access to "asize3" of array

cont8:INT := 8;                                             [constant]
   Print access to "asize4" of array

cont9:INT := 9;                                             [constant]
   Print access to attribute of object

cont10:INT := 10;                                           [constant]
   Undocumented.

cont11:INT := 11;                                           [constant]
   Undocumented.

cont12:INT := 12;                                           [constant]
   Undocumented.

cont13:INT := 13;                                           [constant]
   Undocumented.

cont14:INT := 14;                                           [constant]
   Dispatched array/non-array object

cont17:INT := 17;                                           [constant]
   Dispatched 1-dimensional object

cont19:INT := 19;                                           [constant]
   Dispatched 2-dimensional object

cont21:INT := 21;                                           [constant]
   Dispatched 3-dimensional object

cont23:INT := 23;                                           [constant]
   Dispatched 4-dimensional object

cont15:INT := 15;                                           [constant]
   Non-dispatched non-array object

cont16:INT := 16;                                           [constant]
   Non-dispatched 1-dimensional object

cont18:INT := 18;                                           [constant]
   Non-dispatched 2-dimensional object

cont20:INT := 20;                                           [constant]
   Non-dispatched 3-dimensional object

cont22:INT := 22;                                           [constant]
   Non-dispatched 4-dimensional object

cont24:INT := 24;                                           [constant]
   Dispatched object

cont25:INT := 25;                                           [constant]
   Non-dispatched object; generates actual code

cont_cprint_code(outfile:SAT_OUTFILE; cont:INT) is
   Undocumented.

cprint_act_code(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_init_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

FEATOB is                                                      [class]

   Features of a class.


Public definitions of class FEATOB: 

Inherits from: PARSEROB

cls_def:CLASSOB;
   Class definition in which this feature appears; this is updated
   by the caller who creates the feature.  In the compiler, this
   is updated by the class containing the features, when the class
   is created.

name:INT;
   Name (index) of feature

mark_private is
   Only relevant for ROUT_FEATOB, ATTR_DECL_FEATOB, SHARED_DECL_FEATOB,
   and CONST_DECL_FEATOB.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):$FEATOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

FEATOB_S is                                                    [class]

   Features of a class.


Public definitions of class FEATOB_S: 

Inherits from: SEMANTOB

cls_def:CLASSOB;
   For each feature, we only store the class definition from
     which the feature is derived.  There is a global variable
     "curr_class_inst" which gives the class instance we
     are currently traversing, but this is insufficient, because
     sometimes, we need to be able to find the class instance
     of a feature different from a class we are currently traversing. 
     This value is given by caller which creates the "FEATOB_S".

cls_inst:CLASSOB_S;
   Updated from "GLOBALS::curr_class_inst" when the feature is created

is_inherited:BOOL;
   Indicates if this feature is inherited; relevant only for routine/
   shared/constant/attribute.

used_in_dispatch:BOOL;
   Updated in "consistent_defs" when we check that all features (of the
   same name) in the descendents of a class have a consistent definition
   with the feature in the parent class.

maybe_used:BOOL;
   Updated whenever a look up is done on a feature; eg after calling
   "get_feature", "get_sym" on the SYMBOL_TABLE object.
   This attribute is initialized to "false" when feature object is first
   created.  ("maybe_used" = true) is a very loose condition.  
   A routine "f1" will be marked used once it is found in some routine
   even though the latter may never be used at all.

consistent_defs_checked:INT;
   The value is 0 if "consistent_defs" has not been called on the feature.
   Otherwise, the value is 1 if the last time "consistent_defs" was
   called, the parameter "lval_p" was false; otherwise, if the parameter 
   was true, the value is 2.  If both kinds of calls has been made, the 
   value is 3.

create(ln:INT; c_def:CLASSOB):SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

class_inst_ind:INT is
   Undocumented.

featob_s_name:INT is
   Name index of each feature

undefined_p:BOOL is
   Only relevant for ATTR_DECL_FEATOB, SHARED_DECL_FEATOB and
     CONST_DECL_FEATOB.

compute_own_offset(nextloc:INT):INT is
   Default is no space allocated

get_offset:INT is
   Default is no offset; this is relevant only for ATTR_DECL_FEATOB_S

cprint_offset(outfile:SAT_OUTFILE) is
   Default is to print nothing; this is relevant only for
   ATTR_DECL_FEATOB_S.

eval_constant is
   This is relevant only for expressions in constant definition.
   Constants are evaluated according to the following rules:
   1.  integer :  Try to evaluate the arithmetic expressions as well
   2.  bool, char, real, double, str : Only if the node is one of the
       CONST_EXPROB_S nodes  

typeof:$TYPEOB_S is
   Default is void; only relevant for ROUT_FEATOB_S,
     ATTR_DECL_FEATOB_S, SHARED_DECL_FEATOB_S, CONST_DECL_FEATOB_S,
     PARAM_DECL_S.

rettype:$TYPEOB_S is
   Default is void; only relevant for ROUT_FEATOB_S.

remember_local(lvar:LVAR_DECL_STMTOB_S) is
   Default is to do nothing; only relevant for ROUT_FEATOB_S

semant_prologue is
   Undocumented.

do_gen_temps is
   Undocumented.

gen_goto_tags is
   Undocumented.

validate_dispatches_and_get_ext_strs is
   Undocumented.

compatible_des_feat(feat:SELF_TYPE; lval_p:BOOL):BOOL is
   Undocumented.

update_used_in_dispatch is
   Undocumented.

consistent_defs(nm:INT; lval_p:BOOL) is
   "lval_p" is true when we are using the feature (attribute or shared)
   as the LHS of an assignment statement.

cprint_cname(outfile:SAT_OUTFILE) is
   Do not print anything.  This is relevant only for 
     ROUT_FEATOB_S, CONST_DECL_FEATOB_S and SHARED_DECL_FEATOB

cprint_extern(outfile:SAT_OUTFILE) is
   Only relevant for ROUT_FEATOB_S, CONST_DECL_FEATOB_S,
     and SHARED_DECL_FEATOB_S

cprint_decln(outfile:SAT_OUTFILE) is
   Only relevant for ROUT_FEATOB_S, CONST_DECL_FEATOB_S,
     and SHARED_DECL_FEATOB_S.  Print ordinary declaration.

cprint_routine(outfile:SAT_OUTFILE) is
   Only relevant for ROUT_FEATOB_S.  Print C code for routine.

cprint_store_dispval(outfile:SAT_OUTFILE) is
   Print the following:
   a. CINH_FEATOB_S: Nothing
   b. ROUT_FEATOB_S: Name of routine with a cast to "int" in front
   c. ATTR_DECL_FEATOB_S: Offset of attribute
   d. SHARED_DECL_FEATOB_S: Address of global C variable (cast to "int")
   e. CONST_DECL_FEATOB_S: Address of global C variable (cast to "int")

cprint_init_code(outfile:SAT_OUTFILE) is
   Print the initialization code for SHARED_DECL_FEATOB_S and
   CONST_DECL_FEATOB_S.  We do not check for loop dependencies
   because that is checked in "eval_constant".

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

FILE is                                                        [class]

   Sather representation of Unix file structure.


Public definitions of class FILE: 

fp:F_OB;
   A C pointer to the file

name:STR;
   The name of the file.

eof:INT:=-1;                                                [constant]
   C marker for end of file.

error_val:INT;                                                [shared]
   Error code for Sather read errors.

read_error:INT := 1;                                        [constant]
   Error while attempting to read.

eof_error:INT := 2;                                         [constant]
   Hit end of file while attempting to read.

open_error:INT := 3;                                        [constant]
   Error in opening file.

error:INT is
   0 if no error on last operation. Error code otherwise. Clears err.

create:SELF_TYPE is
   A new unitialized file object.

in:SELF_TYPE is
   A FILE object for stdin.

out:SELF_TYPE is
   A FILE object for stdout.

err:SELF_TYPE is
   A FILE object for stderr.

check_eof:BOOL is
   True if eof has been previously read. Clear the status.

get_c:CHAR is
   Read a character. No checking for eof. Must use check_eof.

get_ci:INT is
   Read a character as an integer. 

get_b:BOOL is
   Read "T" or "F". False and error if neither.

get_i:INT is
   Read an integer.

get_r:REAL is
   Read a real number.

get_d:DOUBLE is
   Read a double.

get_s:STR is
   Read a string up to the next \n.

get_s_up_to(c0:CHAR):STR is
   Read a string up to (but excluding) the next character given
   by c0.

unget_c(ch:CHAR) is
   Unget the last character.

b(bo:BOOL):SELF_TYPE is
   Output "T" or "F" and return the file.

c(ch:CHAR):SELF_TYPE is
   Output a character.

i(in:INT):SELF_TYPE is
   Output an int.

s(st:STR):SELF_TYPE is
   Output a string.

r(re:REAL):SELF_TYPE is
   Output a real.

d(do:DOUBLE):SELF_TYPE is
   Output a double.

nl:SELF_TYPE is
   Undocumented.

open_for_read(nm:STR) is
   Open the named file for reading.

open_for_write(nm:STR) is
   Open the named file for writing.

open_for_append(nm:STR) is
   Open the named file for appending.

close is
   Close the file.

get_s_of_len(n:INT):STR is
   Read at most n characters.

flush is
   Flush the buffer.

open_pipe_for_read(command:STR) is
   Open a pipe for reading with given sh shell command line.

open_pipe_for_write(command:STR) is
   Open a pipe for writing with given sh shell command line.

close_pipe is
   Close a pipe.

seek_relative(n:INT) is
   Move in the file relative to current location.

seek_from_front(n:INT) is
   Move relative to front of file.

seek_from_end(n:INT) is
   Move relative to end of file.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

FILE_DESCRIPTOR is                                             [class]

   Undocumented.


Public definitions of class FILE_DESCRIPTOR: 

err_status:INT;
   Undocumented.

fp:INT;
   Undocumented.

error:BOOL is
   Undocumented.

open_for_read(fn:STR):SELF_TYPE is
   Undocumented.

open_for_write(fn:STR):SELF_TYPE is
   Undocumented.

close is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

FILE_STAT is                                                   [class]

   Contains a status bit to indicate if the information has been
   correctly read, and a pointer to a C structure.


Public definitions of class FILE_STAT: 

status:INT;
   Undocumented.

filestat:C_FILESTAT;
   Undocumented.

create(f:FILE):SELF_TYPE is
   The caller must check that file has been properly opened.

create_from_fn(s:STR):SELF_TYPE is
   Same as "create", but using a file name.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GENERIC_KEYOB is                                               [class]

   Undocumented.


Public definitions of class GENERIC_KEYOB: 

Inherits from: COMPILE_KEYOB

info:LIST{STR};
   A list of names for makefile called to compiler C code.  This
   is guaranteed to be non-void if "create" was called to allocate
   "C_MAKEFILE_KEYOB".

create:SELF_TYPE is
   Undocumented.

insert(nm:STR) is
   Store string

info_size:INT is
   Undocumented.

ith_str(i:INT):STR is
   Undocumented.

cprint_self(outfile:OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GLOBALS is                                                     [class]

   Undocumented.


Public definitions of class GLOBALS: 

indent_step:INT := 3;                                       [constant]
   *! May want to make this a variable that can be reset by
   compiler option

str_table:STR_TABLE;                                          [shared]
   String table stores all identifiers

class_defs:CLASSOB_TABLE;                                     [shared]
   Class definitions

class_inst:CLASSOB_S_TABLE;                                   [shared]
   Instantiated classes

class_stat_tbl:CLASS_STAT_TBL;                                [shared]
   Information on the update-status of classes. 

dot_sather_reader:DOT_SATHER_HANDLER;                         [shared]
   Undocumented.

curr_lineno:INT;                                              [shared]
   Line number of file during parsing.  Updated by lexer, and
     reset for each time a new file is opened.

curr_loop_lineno:INT;                                         [shared]
   for debugger:
   Line number of the beginning of a loop when it is parsed.
   When an UNTIL or LOOP statement is first encountered in the parser,
   curr_loop_lineno is set to curr_lineno

curr_filename:STR;                                            [shared]
   Name of file we are currently handling; during parsing, it
   is the name of file being parsed, but during semantic check,
   it is the name of file in which the current class is being
   defined; this is not used for printing error messages,
   and updated during semantic check for completeness.  Most
   of the updates to this and "curr_class_inst" are done in routines
   of SATHER_SEMANT, but some are done in routines in CLASSOB_S 
   when we recursively traverse other classes.

curr_infile:FILE;                                             [shared]
   Name of file we are currently parsing

curr_file_stat:FILE_STAT;                                     [shared]
   Contains information about file currently being parsed.
   NOTE: This Sather object contains a pointer to a C structure.

curr_class_inst:CLASSOB_S;                                    [shared]
   Class in whose structure we are traversing.  

curr_feature:$FEATOB_S;                                       [shared]
   Feature node in whose structure we are traversing.  Used only for
   "semant" and later phases.  But we always update it (most of the
   time in routines in CLASSOB_S) for completeness.

semant_lval:BOOL := false;                                    [shared]
   Flag used during "semant" to indicate if an expression is being
   used as the LHS of an assignment statement.

void_classob:CLASSOB;                                         [shared]
   Undocumented.

void_classob_s:CLASSOB_S;                                     [shared]
   Undocumented.

voidtype_s:INSTANT_TYPEOB_S;                                  [shared]
   Special type for "void"

ob_typeob_s:INSTANT_TYPEOB_S;                                 [shared]
   Must be dispatched

array_typeob_s:INSTANT_TYPEOB_S;                              [shared]
   Undocumented.

array2_typeob_s:INSTANT_TYPEOB_S;                             [shared]
   Undocumented.

array3_typeob_s:INSTANT_TYPEOB_S;                             [shared]
   Undocumented.

array4_typeob_s:INSTANT_TYPEOB_S;                             [shared]
   Undocumented.

bool_typeob_s:INSTANT_TYPEOB_S;                               [shared]
   Undocumented.

c_typeob_s:INSTANT_TYPEOB_S;                                  [shared]
   Undocumented.

char_typeob_s:INSTANT_TYPEOB_S;                               [shared]
   Undocumented.

double_typeob_s:INSTANT_TYPEOB_S;                             [shared]
   Undocumented.

err_typeob_s:INSTANT_TYPEOB_S;                                [shared]
   Undocumented.

file_typeob_s:INSTANT_TYPEOB_S;                               [shared]
   Undocumented.

in_typeob_s:INSTANT_TYPEOB_S;                                 [shared]
   Undocumented.

int_typeob_s:INSTANT_TYPEOB_S;                                [shared]
   Undocumented.

out_typeob_s:INSTANT_TYPEOB_S;                                [shared]
   Undocumented.

real_typeob_s:INSTANT_TYPEOB_S;                               [shared]
   Undocumented.

self_type_typeob_s:INSTANT_TYPEOB_S;                          [shared]
   Undocumented.

str_typeob_s:INSTANT_TYPEOB_S;                                [shared]
   Undocumented.

str_cursor_typeob_s:INSTANT_TYPEOB_S;                         [shared]
   Undocumented.

sys_typeob_s:INSTANT_TYPEOB_S;                                [shared]
   Undocumented.

fob_typeob_s:INSTANT_TYPEOB_S;                                [shared]
   Undocumented.

undefine_typeob_s:INSTANT_TYPEOB_S;                           [shared]
   Undocumented.

sys_dir:STR;                                                  [shared]
   dir containing default, sys_dot_sather, msg, ...

rt_dir:STR;                                                   [shared]
   dir containing runtime .o files

precomp_dir:STR;                                              [shared]
   dir containing precompiled sather .o files

main_init_file:OUTFILE;                                       [shared]
   Undocumented.

sys_cmdfile_name:STR;                                         [shared]
   Undocumented.

msgfile_name:STR;                                             [shared]
   Undocumented.

final_prog_name:STR;                                          [shared]
   Undocumented.

creator_class_name:INT;                                       [shared]
   Undocumented.

creator_classob:CLASSOB;                                      [shared]
   Undocumented.

creator_classob_s:CLASSOB_S;                                  [shared]
   Undocumented.

next_key:INT := 1;                                            [shared]
   Used for assigned unique identifiers to different temporaries
     just before code generation.

dispatch_table_size:INT;                                      [shared]
   Updated just before "MAIN_.c" is printed, this is the actual size
   of "dispatch_table_" allocated in "MAIN_.c"

dispatch_flags:ARRAY{INT};                                    [shared]
   Allocated in "all_cprint_init" in class "SATHER_SEMANT"

clib_options:STR := STR::create;                              [shared]
   Undocumented.

self_exists:BOOL := true;                                     [shared]
   Undocumented.

features_called_from_c:INT_HASH_SET := INT_HASH_SET::create;  [shared]
   Undocumented.

name_mappings:STR_HASH_MAP{INT} := STR_HASH_MAP{INT}::create; [shared]
   Undocumented.

main_rout:ROUT_FEATOB_S;                                      [shared]
   Undocumented.

tmpct:LIST{INT} := LIST{INT}::create(5);                      [shared]
   Undocumented.

str_consts:LIST{STR_CONST_EXPROB_S}:=LIST{STR_CONST_EXPROB_S}::create(10); [shared]
   Undocumented.

str_indices:LIST{INT} := LIST{INT}::create(10);               [shared]
   Undocumented.

print_feat_info:BOOL := false;                                [shared]
   Undocumented.

print_des_info:BOOL := false;                                 [shared]
   Undocumented.

g_tag:INT := 0;                                               [shared]
   Undocumented.

rt_type:INT := 0;                                             [shared]
   This value is set everytime "conforms_to" routine (in 
   INSTANT_TYPEOB_S) is called.  It is set to runtime types to be 
   checked during runtime (negative for dispatched types; positive 
   for non-dispatched types).

pre_semant:BOOL;                                              [shared]
   Undocumented.

other_cnames:INT_HASH_SET := INT_HASH_SET::create;            [shared]
   Undocumented.

c_compiler:STR;                                               [shared]
   The value determines the "CC" option in the generated makefile.

cc_flags:ARRAY{STR};                                          [shared]
   The value determines the "CFLAGS" option in the generated makefile.

c_macros:INT_TO_INTSET;                                       [shared]
   Contains a list of <integer, array of integers> mappings where the
   integers are indices into the string table.  The first integer is
   from the C name, and the array of integers corresponds to the list
   of C macro statements to be inserted for that C name.
   This is created after the compiler commands have been read, because
   this is used:
   1.  To mark CLASSOB_S's as "internal_updated" if the C macro changes.
   2.  To print the C macros during file generation.

keys_set:CLASS_KEY_SET;                                       [shared]
   Contains a list of <class index, key id> pairs for the debug/assert
   keys.  This is created just before the "semant" phase is started on
   all classes, just we need to have all the identifier strings/indices
   mapping.

init_file_info is
   Initializes the file and directory names

init_typeob_s is
   This is called in the compiler, ie after all the runtime
   indices for base classes are initialized.
   IMPORTANT: This should only be called after the CLASSOB_S objects
              have been created (currently in "install_predefined_classes"
              in SATHER_SEMANT).

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GLOBAL_PROC is                                                 [class]

   This class contains routines which do not really belong to
     any class.  Examples are routines which operate on integers.
     We might have a descendent integer class that contains these
     routines, but it may be too bothersome.


Public definitions of class GLOBAL_PROC: 

global_key:INT is
   Undocumented.

reset_global_key is
   Undocumented.

Inherits from: RESERVED_FEAT_NAMES

featname_from_key(k:INT):INT is
   Undocumented.

classind_from_key(k:INT):INT is
   Undocumented.

key_of_class_feat(cnm:INT; feat:INT):INT is
   Undocumented.

help_insert(cnm:INT; feat:INT):INT is
   Undocumented.

check_is_on:BOOL is
   Undocumented.

handle_class_p(co:CLASSOB_S):BOOL is
   Undocumented.

handle_feature_p(f:$FEATOB_S):BOOL is
   Undocumented.

is_clib_option(s:STR):BOOL is
   Returns "true" if string starts with "-l".

conform_tst(c1,c2:$TYPEOB_S; exp:$EXPROB_S):BOOL is
   Undocumented.

add_str_const(str_const:STR_CONST_EXPROB_S) is
   Add a string constant used in initialization of shared/constant
   into a global list.  Note(1) that each STR_CONST_EXPROB_S is unique,
   so we do not need to use "push_unique".  Note(2) that we call 
   "push_unique" rather than "push" because STR_CONST_EXPROB_S's
   may be shared between different trees and hence called more than
   once. Note(3) that since the indices are unique (and hence the
   STR_CONST_EXPROB_S's are unique) we need not use "push_unique".
   NOTES(1),(2),(3) reflect the changing implementations.

remove_user_cfile(fn:STR) is
   Undocumented.

system(com:STR) is
   Undocumented.

check_f_ob(exp:$EXPROB_S; name:INT; symtab:SYMBOL_TABLE) is
   Assume that the caller has checked that the type of object is
   a foreign object.

ctype_name(ctype:INT):STR is
   Undocumented.

cprint_ctype_name(ctype:INT; outfile:SAT_OUTFILE) is
   Undocumented.

cprint_ctemp_name(intval:INT; outfile:SAT_OUTFILE) is
   Undocumented.

cprint_global_tmpnm_str(strval:INT; outfile:SAT_OUTFILE) is
   Temporary variables for declarations strings in constant/shared
   features.

cprint_local_tmpnm_str(strval:INT; outfile:SAT_OUTFILE) is
   Temporary variables for declarations strings in routines.

cprint_sather_str_type(outfile:SAT_OUTFILE) is
   Print the type used for Sather string declaration.

cprint_curr_exp_code(exp:$EXPROB_S; temp_nm:INT; outfile:SAT_OUTFILE) is
   This routine is called by "cprint_pre_code" routine in ID_EXPROB_S,
   AREF_EXPROB_S, ID_ARGS_EXPROB_S, EXPR_ARGS_EXPROB_S and 
   TYPESPEC_ARGS_EXPROB_S to generate the code that will compute 
   the result of the expression into a temporary variable for runtime
   type-checking.

cprint_goto_tag(i:INT;outfile:SAT_OUTFILE) is
   Undocumented.

cprint_ref_to_self(outfile:SAT_OUTFILE):BOOL is
   Returns "true" if reference to variable "self" is valid at this
   point.

cprint_octal_char(v:INT; outfile:SAT_OUTFILE) is
   Undocumented.

cprint_int_as_char_seq(v:INT; outfile:SAT_OUTFILE) is
   Undocumented.

union_classnames(l1, l2:LIST{INT}):LIST{INT} is
   Undocumented.

extract_simple_classnames(str:STR; start_index:INT):LIST{INT} is
   States are numbered as follows:
   (0) : Start state
   (1) : Reading class name
   (2) : Repeat recursive calls on parameters
   (7) : Error state

analyze_class_name(str:STR; start_index:INT):LIST{INT} is
   States are numbered as follows:
   (0) : Start state
   (1) : Reading class name
   (2) : Repeat recursive calls on parameters
   (7) : Error state

extract_poss_names(s:STR):ARRAY{STR} is
   Try to split the given string into a class name part separated by
   "::" from another name, and return the two strings in an 
   "ARRAY{STR}".  Otherwise, simply return a "void" object.

extract_filename(fullname:STR):STR is
   Undocumented.

check_des_of(ici:INT; l,u:INT):INT is
   Return an integer (assumed to be 32 bits) such that for each
   class whose class index is in the range l->u, the (l+i)th bit
   is set if the class given by "ici" is an ancestor of the (l+i)
   class.

octal(i:INT):STR is
   Return a string as the octal representation of "i".
   Assume a 32-bit representation of integer.

ob_ob(ob:$OB):$OB is
   

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

HASH{T} is                                                     [class]

   Hash tables for elements indexed by positive integer keys.
   Interface routines: create, get, insert, delete, frst, nxt, none


Public definitions of class HASH: 

hsize:INT;
   Number stored (including deletes!)

key_tbl:ARRAY{$KEY};
   Storage for the keys

ent_tbl:ARRAY{T};
   Storage for the entries

def_init_size:INT := 5;                                     [constant]
   Default initial size

create(init_size:INT):SELF_TYPE is
   Make an empty hash table.

get(k:$KEY):T is
   Return entry associated with key k or void if not stored.

resize(ns:INT) is
   Resize self to have ns entries. Copy non-deleted entries over.

insert(k:$KEY; e:T) is
   Insert key k and entity e. Overwrite if already there.

delete(k:$KEY) is
   Delete entry i if it is in the table.

frst:$KEY is
   First key in table or the constant none.

nxt(i:$KEY):INT is
   The key after key i or the constant none if i isn't in the table 
   or is the last entry.	
   Useful as: i:INT := h.frst until i=h.none loop i := hs.nxt(i) end;

none:INT := -1;                                             [constant]
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

HASH_TABLE{T} is                                               [class]

   Associate an object with its name; used by SYMBOL_TABLE


Public definitions of class HASH_TABLE: 

names:ARRAY{INT};
   Names indices.

indices:ARRAY{INT};
   Index into `objs'.

objs:ARRAY{T};
   Array of stored objects.

obj_table_size:INT;
   Size of `objs'.

names_size:INT;
   Size of `names' (2 * `obj_table_size').

next_ind:INT;
   Next position to insert into `objs'.

def_table_size:INT := 7;                                    [constant]
   *! Random size

create(size:INT):SELF_TYPE is
   Create a hash table that can contain `size' objects.

hash(nm:INT):INT is
   Hash function on <object, name index> pair.

get_obj(nm:INT):T is
   Given a name index `nm', return an object from hash table,
   if any.

add_obj(nm:INT; ob:T):BOOL is
   Add the object and returns "true" if one already exists; the
   older object is shadowed, but not deleted in case we want to
   dump the whole table.

add_unique_obj(nm:INT; ob:T) is
   Add the object and replace older object (with same key) if 
   one already exists.

add_unique_obj_at(nm:INT; ob:T; loc:INT) is
   Add the object at a unique location.  If an object C2 (with different
   key) already exists at that location, move C2 to a new location.
   If an object C2' (with same key) already exists at that location,
   C2' is replaced by the new object.

double_tables is
   Double the size of hash table, and rehash all previously
   inserted objects.

remove_obj(nm:INT):BOOL is
   Returns "true" if object exists and is removed, false otherwise

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ID_ARGS_EXPROB is                                              [class]

   Identifiers with args.


Public definitions of class ID_ARGS_EXPROB: 

Inherits from: EXPROB

id:INT;
   Function call

args:LST_EXPROB;
   List of arguments

create(f:INT; alst:LST_EXPROB):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):ID_ARGS_EXPROB_S is
   The parameters are a list of indices for type parameter
     names and a list of keys for the type instantiations.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ID_ARGS_EXPROB_S is                                            [class]

   Identifiers with args.


Public definitions of class ID_ARGS_EXPROB_S: 

Inherits from: EXPROB_S

id:INT;
   Function call

args:LST_EXPROB_S;
   List of arguments (should not be "void", by definition, but can be empty)

referrent:$SEMANTOB;
   Referrent of identifier
   Computed in "semant"

temp_name_tpchk:INT;
   Undocumented.

temp_ctype_tpchk:INT;
   Temporary variable (and C type of temporary variable) to hold result
   of routine call so that the type of the result can be checked (if 
   runtime type-checking is required).

temp_args:ARRAY{INT};
   Undocumented.

temp_args_ctype:ARRAY{INT};
   List of variables to hold temporary variables that will contain
   result of argument evaluation, except for cases without side-
   effect.  (Ref: Implementation of dispatching mechanism in general
   document).  The values are guaranteed to be non-void and have
   the same length as the number of arguments.

has_pre_eval_args:BOOL;
   If this value is false, then any code involving pre-evaluating
   arguments can be avoided.  This is initialized to "false".

printed_times:INT;
   The value is greater than 0 if the runtime type-checking code is already
   generated, ie the code to compute value of the expression is already 
   generated.  This is the number of times this node has been printed; it
   should be less than or equal than the global variable "g_tag".

create(id:INT; alst:LST_EXPROB_S; ln:INT):SELF_TYPE is
   Undocumented.

sather_code:STR is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

valid_init_expr:BOOL is
   Undocumented.

access_value_only:BOOL is
   Default is to return "false" if we do not know the referrent;
   otherwise, return "true" if the referrent is not a routine. 

semant(symtab:SYMBOL_TABLE) is
   This allows the "reserved" feature names to be redefined.

gen_temps:LIST{INT} is
   This node represents a construct with a single identifier preceded
   by nothing else.  This construct must be a local routine call, and
   so no temporary is generated, except for the arguments. 

get_ext_strs is
   Undocumented.

cprint_pre_code(outfile:SAT_OUTFILE) is
   By the construction of grammar, and parse trees, "args" is 
   guaranteed to be non-void (and in this case, non-empty as well).

cont1:INT := 1;                                             [constant]
   Print parameters for "new" on any array 

cont_cprint_code(outfile:SAT_OUTFILE; cont:INT) is
   Undocumented.

cprint_act_code(outfile:SAT_OUTFILE) is
   If code for computing current expression is already generated,
   just print the temporary variable name.

cprint_init_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ID_EXPROB is                                                   [class]

   Idenfifiers.


Public definitions of class ID_EXPROB: 

Inherits from: EXPROB

name:INT;
   Identifier name

create(nm:INT):SELF_TYPE is
   An expression with only one identifier

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):ID_EXPROB_S is
   The parameters are a list of indices for type parameter
     names and a list of keys for the type instantiations.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ID_EXPROB_S is                                                 [class]

   Idenfifiers.


Public definitions of class ID_EXPROB_S: 

Inherits from: EXPROB_S

name:INT;
   Identifier name

referrent:$SEMANTOB;
   Refer to only a $FEATOB_S, or a PARAM_DECLOB_S or 
     a LVAR_DECL_STMTOB_S.

temp_name_tpchk:INT;
   Undocumented.

temp_ctype_tpchk:INT;
   Temporary variable to hold result of current expression so that
   the type of the result can be checked (if runtime type-checking
   is requested).

printed_times:INT;
   The value is greater than 0 if the runtime type-checking code is already
   generated, ie the code to compute value of the expression is already 
   generated.  This is the number of times this node has been printed; it
   should be less than or equal than the global variable "g_tag".

create(nm:INT; ln:INT):SELF_TYPE is
   An expression with only one identifier

sather_code:STR is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

valid_init_expr:BOOL is
   Undocumented.

gen_temps:LIST{INT} is
   Undocumented.

expr_eval_constant:$CONST_EXPROB_S is
   Undocumented.

access_value_only:BOOL is
   Default is to return "false" if we do not know the referrent;
   otherwise, return "true" if the referrent is not a routine. 

semant(symtab:SYMBOL_TABLE) is
   Look symbol up in table.
   This allows some of the "reserved" feature names to be redefined.

assignable_p:BOOL is
   This should only be called after the referent has been
     found.

cont1:INT := 1;                                             [constant]
   Print access to "asize", "asize1"

cont2:INT := 2;                                             [constant]
   Print access to "asize2"

cont3:INT := 3;                                             [constant]
   Print access to "asize3"

cont4:INT := 4;                                             [constant]
   Print access to "asize4"

cont5:INT := 5;                                             [constant]
   Print parameters for "new"

cont6:INT := 6;                                             [constant]
   Print parameters for "copy", /* "deep_copy" */

cont7:INT := 7;                                             [constant]
   Print reference to "self"

cont_cprint_code(outfile:SAT_OUTFILE; cont:INT) is
   "cont" represents the continuation of printing the
   attribute access code. 

cprint_pre_code(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_act_code(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_init_code(outfile:SAT_OUTFILE) is
   Call "cprint_init_code" if the referrent is a CONST_DECL_FEATOB_S or
   SHARED_DECL_FEATOB_S.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

IN is                                                          [class]

   Direct access to stdin.


Public definitions of class IN: 

file:FILE := FILE::in;                                        [shared]
   A file object for stdin.

get_c:CHAR is
   Undocumented.

get_b:BOOL is
   Undocumented.

get_i:INT is
   Undocumented.

get_r:REAL is
   Undocumented.

get_d:DOUBLE is
   Undocumented.

get_s:STR is
   Undocumented.

unget_c(ch:CHAR) is
   Undocumented.

check_eof:BOOL is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

INSTALL_CONSTS is                                              [class]

   Constant directory/file names and other environment-dependent names
   known by compiler.


Public definitions of class INSTALL_CONSTS: 

sather_home:STR := "/usr/local/src/sather/";                [constant]
   The structure of the libraries is
   SATHER_HOME
      bin
      compiler
      debugger
      doc
      etc
      lib
        base
          C
            all .o files for base
        connectionist
          C
        data_structure
        geometry
        grammar
        graphics
        image
        numerical
        statistics
        user_interface
      local
      old
      sys
         C
            precompiled
                all precompiled sather classes in .o format.
            all .o and .a files for runtime (i.e. runtime_.o, ...)
         msgrc -- message file
         sys_dot_sather

sys_subdir:STR := "/sys/";                                  [constant]
   Undocumented.

rt_subdir:STR := "/sys/C/";                                 [constant]
   Undocumented.

precomp_subdir:STR := "/sys/C/precompiled/";                [constant]
   Undocumented.

offset_file:STR := "offsets_.h";                            [constant]
   Undocumented.

c_names_file:STR := "c_names_.h";                           [constant]
   Undocumented.

class_stat_file:STR := "class_stat_";                       [constant]
   Undocumented.

name_ind_file:STR := "name_ind_";                           [constant]
   Undocumented.

sys_cmdfile:STR := "sys_dot_sather";                        [constant]
   Undocumented.

msgfile:STR := "msgrc";                                     [constant]
   Undocumented.

main_rout_name:STR := "main";                               [constant]
   Undocumented.

repair_who:STR := "clim";                                   [constant]
   Undocumented.

default_make:STR := "make";                                   [shared]
   Undocumented.

env_v_home:STR := "HOME";                                   [constant]
   Undocumented.

env_v_make:STR := "SATHER_MAKE";                            [constant]
   Undocumented.

predef_file_suffix:STR := ".o";                             [constant]
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

INSTANT_TYPEOB_S is                                            [class]

   Actual/Instantiated types


Public definitions of class INSTANT_TYPEOB_S: 

Inherits from: TYPEOB_S

index:INT;
   The index to actual CLASSOB_S for the type specification. 
   NOTE: To use an index into the table (for instantiated
         classes), we must ensure that the CLASSOB_S objects are
         not moved.
   CLASSOB_S will contain (among other things):
   a.  an index to indicate its location in the global table
       (CLASSOB_S_TABLE),
   b.  pointer to original CLASSOB from which it is derived 
   c.  a sequence of indices (may be null) into the global table 
       (of type CLASSOB_S_TABLE), for type arguments. 

disp:BOOL;
   Undocumented.

basic_type:INT;
   This is equal to the "basic_type" value of the CLASSOB_S given by
   this INSTANT_TYPEOB_S.  It is initialized to -1.

create(index:INT; ln:INT):SELF_TYPE is
   Create a type for ordinary expression.

dup:SELF_TYPE is
   Duplicate a type expression.

inst_ind:INT is
   Index of class given by current type expression.

inst_cls:CLASSOB_S is
   `CLASSOB_S' object for current type expression.  If the type
   is dispatched, then the "$" is ignored.

ctype:INT is
   C type corresponding to current type expression.

cprint_ctype(outfile:SAT_OUTFILE) is
   Print C type corresponding to current type expression.

dispatched:SELF_TYPE is
   Make type expression dispatched.

undispatched:SELF_TYPE is
   Make type expression non-dispatched.

is_dispatched:BOOL is
   Return "true" if the type is dispatched.

int_type_p:BOOL is
   Determine if this type expression is for `INT' or its descendents.

char_type_p:BOOL is
   Determine if this type expression is for `CHAR' or its descendents.

bool_type_p:BOOL is
   Determine if this type expression is for `BOOL' or its descendents.

real_type_p:BOOL is
   Determine if this type expression is for `REAL' or its descendents.

double_type_p:BOOL is
   Determine if this type expression is for `DOUBLE' or its descendents.

str_type_p:BOOL is
   Determine if this type expression is for `STR' or its descendents.

nonptr_p:BOOL is
   Determine if this type expression is for basic classes.

array_type_p:BOOL is
   Determines if a type is just an ARRAY.

array2_type_p:BOOL is
   Determines if a type is just an ARRAY2.

array3_type_p:BOOL is
   Determines if a type is just an ARRAY3.

array4_type_p:BOOL is
   Determines if a type is just an ARRAY4.

arithtype:BOOL is
   Return "true" if this is an arithmetic type expression.

resolve_arithtype(tp:$TYPEOB_S):$TYPEOB_S is
   Resolve conflicting arithmetic types.

resolve_predef_types(new_index:INT) is
   Resolve predefined types (SELF_TYPE) and check for error
   in other strange classes (C, SYS, UNDEFINE).

conforms_to(tp:$TYPEOB_S):BOOL is
   Test if `self' conforms to `tp'. By definition, a variable declared
   to be of type T2 conforms to a variable declared to be of
   type T1 if and only if T1 can hold an object of type T2.

param_type_conforms_to(other:$TYPEOB_S):BOOL is
   Test if self conforms to other in the sence for when
   self is the type of an arguemnt of a parameterized type
   and is being checked for conformance with other which is
   also the type of an argument of a parameterized type.
   This routine is used to help compute_pdes in CLASSOB_S figure
   out the descendant information based in parameterization.

update_rt_type(index:INT) is
   Before updating the global variable `rt_type', check that the
   basic type is not F_OB.

my_basic_type:INT is
   Returns basic type of this type expression.

full_name:STR is
   String representation of this type expression.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

INT is                                                         [class]

   `INT' defines operations on integers. The operations built
   into Sather include addition, subtraction, multiplication, and
   division. The syntax of a dotted routine call makes it natural for
   infix operations (eg. `15.mod(8)'). The `mod' routine produces the
   mathematical modulo operation on arbitrary integers. The `u_mod'
   operation agrees with it on positive integers and executes more
   quickly. The `to_s' routine produces a string representation of self,
   but it is more common to append an integer to an existing string as in
   `my_string.i(15)'. The routines with name of the form `bit_foo'
   perform boolean operations bitwise on the integer. `lshift' and
   `rshift' insert 0's into locations shifted from the edge of the
   integer. `arith_rshift' inserts 1's in case the integer is negative.
   The `sqrt' routine must be applied to a non-negative argument.
   Many of these operations are implemented as macros and do not have
   the overhead of a function call.


Public definitions of class INT: 

u_mod(i:INT):INT is
   Fast version of modulo `i'. Always ends up in range [0, i) but 
   on negatives the value is shifted by (2^32 mod i) from true modulo.

mod(i:INT):INT is
   Remainder when `self' is divided by `i' (works on negative `INT''s). 

to_r:REAL is
   Convert to `REAL'.

to_d:DOUBLE is
   Convert to `DOUBLE'.

to_c:CHAR is
   Convert to `CHAR'.

to_s:STR is
   The string representation of `self'.

bit_and(i:INT):INT is
   The bitwise "and" of `self' and `i'.

bit_or(i:INT):INT is
   The bitwise "or" of `self' and `i'.

bit_xor(i:INT):INT is
   The bitwise "exclusive or" of `self' and `i'.

bit_not:INT is
   Return `self' with its bits inverted.

lshift(i:INT):INT is
   The bits of `self' shifted left `i' places.

rshift(i:INT):INT is
   The bits of `self' shifted right `i' places.

arith_rshift(i:INT):INT is
   The bits of `self' arithmetically shifted right `i' places.
   If `i' is negative, inserts ones.

abs:INT is
   Absolute value.

nth_bit(n:INT):BOOL is
   True if the `n'th bit of `self' is 1.

set_nth_bit(n:INT):INT is
   Return `self' with the `n'th bit set.

unset_nth_bit(n:INT):INT is
   Return `self' with the `n'th bit unset.

max(i:INT):INT is
   The maximum of `self' and `i'.

min(i:INT):INT is
   The minimum of `self' and `i'.

pow(i:INT):INT is
   Integer approximation of `self' to the `i'th power.

sqrt:INT is
   Integer approximation of the square root of `self'.

to_octal:STR is
   The octal representation of `self' of the form `"015"'.
   `self' is interpreted as an unsigned integer.

to_binary:STR is
   The binary representation of `self' of the form `"100100"'.
   `self' is interpreted as an unsigned integer.

to_hex:STR is
   The hexadecimal representation of `self' of the form `"0x5A"'.
   `self' is interpreted as an unsigned integer.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

INT_CONST_EXPROB is                                            [class]

   Undocumented.


Public definitions of class INT_CONST_EXPROB: 

Inherits from: CONST_EXPROB

intval:STR;
   Pointer to string representation of integer

create(v:STR):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):INT_CONST_EXPROB_S is
   We need to replicate nodes for constants.  
   *! May want to optimize this later.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

INT_CONST_EXPROB_S is                                          [class]

   Undocumented.


Public definitions of class INT_CONST_EXPROB_S: 

Inherits from: CONST_EXPROB_S

intval:STR;
   Pointer to string representation of integer

create(v:STR; ln:INT):SELF_TYPE is
   Undocumented.

sather_code:STR is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

val:STR_CURSOR is
   Undocumented.

expr_eval_constant:$CONST_EXPROB_S is
   Undocumented.

cprint_act_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

INT_HASH_ELT is                                                [class]

   Elements of a GEN_HASH table for pairing integer with set of integers.


Public definitions of class INT_HASH_ELT: 

val:INT;
   The integer.  

hash:INT;
   Hash value of "val".

assoc:INT_HASH_SET;
   Set of integer associated with "val".

create(i:INT; iset:INT_HASH_SET):SELF_TYPE is
   An INT_HASH_ELT which associates a set of integers to an integer.

is_equal(e:SELF_TYPE):BOOL is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

INT_TO_INTSET is                                               [class]

   Mapping from integer to set of integers.
   create, get, ins, del, clr


Public definitions of class INT_TO_INTSET: 

t:GENERAL_HASH{INT_HASH_ELT};
   Table of mappings.

create:SELF_TYPE is
   Empty mapping.

get(i:INT):INT_HASH_SET is
   Set of integers associated with i or 0 if absent.

insert(i:INT; iset:INT_HASH_SET) is
   Maps "i" to "iset", overwriting previous mapping if exists.

ins_ent(i:INT; j:INT) is
   Insert "j" into the set of integers associated with "i".

delete(i:INT) is
   Delete "i" if present.

clear is
   Clear the table.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

KEY is                                                         [class]

   Parent class for different kinds of key


Public definitions of class KEY: 

hash(max:INT):INT is
   Must be defined for all descendents

is_equal(k:$KEY):BOOL is
   Must be defined for all descendents

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LIST{T} is                                                     [class]

   Lists implemented as extensible arrays.


Public definitions of class LIST: 

Inherits from: ARRAY

insert:INT;
   The current insertion location.

ci:INT;
   Location of current item never goes beyond "ins".

def_init_size:INT := 5;                                     [constant]
   Default initial size is 5

create(init_size:INT):SELF_TYPE is
   Undocumented.

push(e:T):SELF_TYPE is
   Add a new element to the end, extending if necessary, return lst.

size:INT is
   Size of list

is_empty:BOOL is
   True if list is empty.

pop:T is
   Return the top and shrink the list. Void if empty.

top:T is
   The value of the top of the list. Void if empty.

init_iterate is
   Initialize 

curr_item:T is
   Return current value 

next_item:T is
   Return next value

prev_item:T is
   Return prev value

push_unique(e:T):SELF_TYPE is
   Replace the first element found to be equal, if not
     just add to the end.

append(list:SELF_TYPE):SELF_TYPE is
   Append list of TYPEOB's or STMTOB's etc to current list
   Test for "void" is essential to working of compiler.

union(list:SELF_TYPE):SELF_TYPE is
   Add unique elements to current list
   *! Inefficient implementation 

not_in(e:T):BOOL is
   Returns true if "e" is not in current list

contains(e:T):INT is
   Returns an index if "e" is in current list, -1 otherwise. 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LOCAL_DECL_STMTOB is                                           [class]

   Local variable declaration used temporarily for create 
     LVAR_DECL_STMTOB's when appended to statement list


Public definitions of class LOCAL_DECL_STMTOB: 

Inherits from: STMTOB

Inherits from: DECLOB

names:LIST{INT};
   List of variable name indices

init_expr:$EXPROB;
   Initialization expression, if any

create(decl:ANY_DECLOB; exp:$EXPROB):SELF_TYPE is
   The given declaration should be an ANY_DECLOB with a list of
     names and without initialization expression).  Leave
     list of names as it is and make a LOCAL_DECL_STMTOB instead.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):LVAR_DECL_STMTOB_S is
   The parameters are a list of indices for type parameter
     names and a list of keys for the type instantiations.

create_lst(decl:LOCAL_DECL_STMTOB):LST_STMTOB is
   Given a LOCAL_DECL_STMTOB, take the list of identifiers in
     LOCAL_DECL_STMTOB, and make a list of $STMTOB's (in
     particular a list of LVAR_DECL_STMTOB's).

ith_name(i:INT):INT is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LOOP_STMTOB is                                                 [class]

   Loops.


Public definitions of class LOOP_STMTOB: 

Inherits from: STMTOB

test:$EXPROB;
   Termination test, if any.

stmts:LST_STMTOB;
   Body of loop.

create(t:$EXPROB; s:LST_STMTOB; ln:INT):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):LOOP_STMTOB_S is
   The parameters are a list of indices for type parameter
     names and a list of keys for the type instantiations.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LOOP_STMTOB_S is                                               [class]

   Loops.


Public definitions of class LOOP_STMTOB_S: 

Inherits from: STMTOB_S

test:$EXPROB_S;
   Termination test, if any.

stmts:LST_STMTOB_S;
   Body of loop.

goto_tag:INT;
   >0 for break tag called goto_tag_12_

printed:INT;
   Number of times code is generated.

create(t:$EXPROB_S; s:LST_STMTOB_S; ln:INT):SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

gen_temps:LIST{INT} is
   Undocumented.

get_goto_tag:INT is
   Undocumented.

gen_goto_tags(loop_stmt:LOOP_STMTOB_S) is
   Undocumented.

validate_dispatches_and_get_ext_strs is
   Undocumented.

cprint_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LSTINT_KEY is                                                  [class]

   Undocumented.


Public definitions of class LSTINT_KEY: 

Inherits from: KEY

Inherits from: LIST

hash(max:INT):INT is
   Undocumented.

is_equal(k:LSTINT_KEY):BOOL is
   Returns "true" if all integers are equal

key_print(outfile:OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_DECLOB is                                                  [class]

   Undocumented.


Public definitions of class LST_DECLOB: 

Inherits from: LST_PARSEROB

Inherits from: LIST

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):LST_DECLOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_DECLOB_S is                                                [class]

   Undocumented.


Public definitions of class LST_DECLOB_S: 

Inherits from: LST_SEMANTOB

Inherits from: LIST

validate_dispatches_and_get_ext_strs is
   Undocumented.

cprint_names(outfile:SAT_OUTFILE) is
   Print the name of each declared variable.

cprint_code(outfile:SAT_OUTFILE) is
   Before printing each declaration, provide the indentation.
   Also, after each declaration is printed, a carriage-return is
     provided by the declaration node. 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_EXPROB is                                                  [class]

   Undocumented.


Public definitions of class LST_EXPROB: 

Inherits from: LST_PARSEROB

Inherits from: LIST

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):LST_EXPROB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_EXPROB_S is                                                [class]

   Undocumented.


Public definitions of class LST_EXPROB_S: 

Inherits from: LST_SEMANTOB

Inherits from: LIST

type_spec:LST_TYPEOB_S;
   Undocumented.

sather_code:STR is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

get_ext_strs is
   Record references to external strings in the list of
   expressions.

valid_init_expr:BOOL is
   Undocumented.

typeof:LST_TYPEOB_S is
   Undocumented.

gen_temps:LIST{INT} is
   Undocumented.

cprint_pre_code(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_act_code(outfile:SAT_OUTFILE) is
   Ignore identation, default separator is ',' and no carriage-return
     is provided.

cprint_init_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_FEATOB is                                                  [class]

   Undocumented.


Public definitions of class LST_FEATOB: 

Inherits from: LST_PARSEROB

Inherits from: LIST

mark_private is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):LST_FEATOB_S is
   Undocumented.

add_unique_feat(f:$FEATOB):SELF_TYPE is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_FEATOB_S is                                                [class]

   Undocumented.


Public definitions of class LST_FEATOB_S: 

Inherits from: LST_SEMANTOB

Inherits from: LIST

dup:SELF_TYPE is
   Duplicate all non-class-inheritance features.

compact:SELF_TYPE is
   Returns a list of features such that there is no void entry.

compactAttr is
   Move attributes that occupy less than 4 bytes into one
   contiguous block.  NOTE: The specific types of the attributes
   are not mentioned, because the actual size may change eg BOOL
   may be implemented as C int or C char.

contains(fo:$FEATOB_S):INT is
   Check that the feature name is among those in current list and
     returns an index if so, -1 otherwise.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_PARSEROB is                                                [class]

   Undocumented.


Public definitions of class LST_PARSEROB: 

Inherits from: PARSEROB

Inherits from: LIST

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):LST_SEMANTOB is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_SEMANTOB is                                                [class]

   Undocumented.


Public definitions of class LST_SEMANTOB: 

Inherits from: SEMANTOB

Inherits from: LIST

dup:SELF_TYPE is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

cprint_code(outfile:SAT_OUTFILE) is
   Only relevant for LST_STMTOB_S and LST_DECLOB_S

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_STMTOB is                                                  [class]

   Undocumented.


Public definitions of class LST_STMTOB: 

Inherits from: LST_PARSEROB

Inherits from: LIST

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):LST_STMTOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_STMTOB_S is                                                [class]

   Undocumented.


Public definitions of class LST_STMTOB_S: 

Inherits from: LST_SEMANTOB

Inherits from: LIST

validate_dispatches_and_get_ext_strs is
   Undocumented.

cprint_code(outfile:SAT_OUTFILE) is
   Ignore identation, default separator is ';' which is given by
     each statement node.

gen_temps:LIST{INT} is
   Undocumented.

gen_goto_tags(loop_stmt:LOOP_STMTOB_S) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_TYPEOB is                                                  [class]

   Undocumented.


Public definitions of class LST_TYPEOB: 

Inherits from: LST_PARSEROB

Inherits from: LIST

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):LST_TYPEOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_TYPEOB_S is                                                [class]

   Undocumented.


Public definitions of class LST_TYPEOB_S: 

Inherits from: TYPEOB_S

Inherits from: LST_SEMANTOB

Inherits from: LIST

conforms_to(tpp:$TYPEOB_S):BOOL is
   This routine is only usable for cases where we know we are given
   explicitly a list of "TYPEOB_S".

param_type_conforms_to(tpp:$TYPEOB_S):BOOL is
   This routine is only usable for cases where we know we are given
   explicitly a list of "TYPEOB_S". It is used specifically for
   parameters in parameterized types.

full_name:STR is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_WHEN_STMTOB is                                             [class]

   Undocumented.


Public definitions of class LST_WHEN_STMTOB: 

Inherits from: LST_STMTOB

Inherits from: LIST

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):LST_WHEN_STMTOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LST_WHEN_STMTOB_S is                                           [class]

   Undocumented.


Public definitions of class LST_WHEN_STMTOB_S: 

Inherits from: LST_STMTOB_S

Inherits from: LIST

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LVAR_DECL_STMTOB is                                            [class]

   Local variable declaration


Public definitions of class LVAR_DECL_STMTOB: 

Inherits from: STMTOB

Inherits from: DECLOB

name:INT;
   Variable name index

init_expr:$EXPROB;
   Initialization expression, if any

create(nm:INT; tp:$TYPEOB; exp:$EXPROB; ln:INT):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):LVAR_DECL_STMTOB_S is
   The parameters are a list of indices for type parameter
     names and a list of keys for the type instantiations.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LVAR_DECL_STMTOB_S is                                          [class]

   Local variable declaration.


Public definitions of class LVAR_DECL_STMTOB_S: 

Inherits from: STMTOB_S

Inherits from: DECLOB_S

name:INT;
   Variable name index

init_expr:$EXPROB_S;
   Initialization expression, if any

suffix:INT;
   If nonzero, add to end of name.
   Computed in "remember_local" of ROUT_FEATOB_S

create(nm:INT; tp:$TYPEOB_S; exp:$EXPROB_S; ln:INT):SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

declob_s_name:INT is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Perform the following checks:
   a.  Redeclaration in the same scope.
   Enter the local variable declaration into a list for 
     routine.

gen_temps:LIST{INT} is
   Temporaries are those generated in the initial expression if any

validate_dispatches_and_get_ext_strs is
   Undocumented.

cprint_cname(outfile:SAT_OUTFILE) is
   Print C name of local variable.  Append an integer suffix if
     suffix is positive.

cprint_decln(outfile:SAT_OUTFILE) is
   Print the local variable declaration

cprint_access_value(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_code(outfile:SAT_OUTFILE) is
   Print initialization code for local variable

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

OLDNEW_HANDLER is                                              [class]

   This class contains definitions of routines which manages the 
   classes with respect to the previous compilation.


Public definitions of class OLDNEW_HANDLER: 

install_new_classob_s(loc:INT; k:LSTINT_KEY; co:CLASSOB_S) is
   Undocumented.

updated_p(co:CLASSOB_S):BOOL is
   A class is considered updated if either its interface or some
   internals might have changed.

get_def_time_stamp(co:CLASSOB_S):TIME_INT is
   Undocumented.

get_time_stamp(co:CLASSOB_S):TIME_INT is
   Undocumented.

get_ctype(co:CLASSOB_S):INT is
   Returns the C type of given class object in previous compilation.
   If such a class did not exist, return -1.

init_class_stat_tbl is
   Create the global variable "class_stat_tbl" from a file whose
   name is computed.

adjust_tables is
   Undocumented.

store_class_stat_tbl is
   Undocumented.

store_name_ind_map is
   We have to store this mapping in order to keep the use of 
   integers as names consistent, especially since these integers 
   are used in dispatching.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

OPT_STMTOB is                                                  [class]

   Represent statements which can be turned on/off by an identifier key


Public definitions of class OPT_STMTOB: 

Inherits from: STMTOB

key:INT;
   Key to identifier

create(k:INT):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):OPT_STMTOB_S is
   The parameters are a list of indices for type parameter
     names and a list of keys for the type instantiations.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

OPT_STMTOB_S is                                                [class]

   Represent statements which can be turned on/off by an identifier key


Public definitions of class OPT_STMTOB_S: 

Inherits from: STMTOB_S

key:INT;
   Key to identifier

class_inst:CLASSOB_S;
   Class instance we are in
   Updated in "semant"

on:BOOL;
   "true" if the key is turned on.  This is computed in "semant"
   routine.

create(k:INT; ln:INT):SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

check_keys:BOOL is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

OP_EXPROB is                                                   [class]

   Operator expressions.


Public definitions of class OP_EXPROB: 

Inherits from: OP_INDICES

Inherits from: EXPROB

op_ind:INT;
   Operation

children:LST_EXPROB;
   Undocumented.

create_unary(op:INT; child:$EXPROB):SELF_TYPE is
   Expression node has exactly 1 child

create_binary(op:INT; left:$EXPROB; right:$EXPROB):SELF_TYPE is
   Return expression node with 2 children

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):OP_EXPROB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

OP_EXPROB_S is                                                 [class]

   Operator expressions.


Public definitions of class OP_EXPROB_S: 

Inherits from: EXPROB_S

Inherits from: OP_INDICES

op_ind:INT;
   Operation

children:LST_EXPROB_S;
   Undocumented.

eval_p:BOOL;
   "true" if evaluation has been attempted

val:$CONST_EXPROB_S;
   Computed in "eval_constant"

create(op:INT; children:LST_EXPROB_S; ln:INT):SELF_TYPE is
   Expression node has exactly 1 child

sather_code:STR is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

expr_eval_constant:$CONST_EXPROB_S is
   Undocumented.

get_ext_strs is
   Check the children for references to external strings.

gen_temps:LIST{INT} is
   Simpler code

valid_init_expr:BOOL is
   Undocumented.

cprint_pre_code(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_act_code(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_init_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

OP_INDICES is                                                  [class]

   Arithmetic/Comparison operators.
   This must be consistent with "ops.h" which is seen by the scanner.


Public definitions of class OP_INDICES: 

not_op_ind:INT := 1;                                        [constant]
   Undocumented.

lt_op_ind:INT := 2;                                         [constant]
   Undocumented.

gt_op_ind:INT := 3;                                         [constant]
   Undocumented.

le_op_ind:INT := 4;                                         [constant]
   Undocumented.

ge_op_ind:INT := 5;                                         [constant]
   Undocumented.

eq_op_ind:INT := 6;                                         [constant]
   Undocumented.

ne_op_ind:INT := 7;                                         [constant]
   Undocumented.

and_op_ind:INT := 8;                                        [constant]
   Undocumented.

or_op_ind:INT := 9;                                         [constant]
   Undocumented.

uminus_op_ind:INT := 10;                                    [constant]
   Undocumented.

uplus_op_ind:INT := 11;                                     [constant]
   Undocumented.

exp_op_ind:INT := 12;                                       [constant]
   Undocumented.

plus_op_ind:INT := 13;                                      [constant]
   Undocumented.

minus_op_ind:INT := 14;                                     [constant]
   Undocumented.

mult_op_ind:INT := 15;                                      [constant]
   Undocumented.

divide_op_ind:INT := 16;                                    [constant]
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

OUT is                                                         [class]

   Direct access to stdout.


Public definitions of class OUT: 

file:FILE := FILE::out;                                       [shared]
   A file object for stdout.

b(bo:BOOL):OUT is
   Undocumented.

c(ch:CHAR):OUT is
   Undocumented.

i(in:INT):OUT is
   Undocumented.

s(st:STR):OUT is
   Undocumented.

r(re:REAL):OUT is
   Undocumented.

d(do:DOUBLE):OUT is
   Undocumented.

nl:OUT is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

OUTFILE is                                                     [class]

   Specifically for output


Public definitions of class OUTFILE: 

Inherits from: FILE

indent(steps:INT) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

PARAM_DECLOB is                                                [class]

   Single parameter declaration
   Note: Type parameters are handled separately. 


Public definitions of class PARAM_DECLOB: 

Inherits from: DECLOB

name:INT;
   Undocumented.

create(nm:INT; tp:$TYPEOB; ln:INT):SELF_TYPE is
   Undocumented.

create_lst(do:ANY_DECLOB):LST_DECLOB is
   Given a ANY_DECLOB, take the list of identifiers in
     ANY_DECLOB, and make a list of $DECLOB's (in
     particular a list of PARAM_DECLOB's).

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):PARAM_DECLOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

PARAM_DECLOB_S is                                              [class]

   Single parameter declaration
   Note: Type parameters are handled separately. 


Public definitions of class PARAM_DECLOB_S: 

Inherits from: DECLOB_S

name:INT;
   Undocumented.

create(nm:INT; tp:$TYPEOB_S; ln:INT):SELF_TYPE is
   Undocumented.

sather_code:STR is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

declob_s_name:INT is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

cprint_cname(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_decln(outfile:SAT_OUTFILE) is
   Print the parameter declaration

cprint_access_value(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

PARAM_TYPEOB is                                                [class]

   Parameterized types.


Public definitions of class PARAM_TYPEOB: 

Inherits from: TYPEOB

name:INT;
   Index of the class name

params:LST_TYPEOB;
   List of parameter types

create(nm:INT; p:LST_TYPEOB):SELF_TYPE is
   Undocumented.

name_str:STR is
   Include type instantiations in name string of parametrized type

get_key(pl:LIST{INT}; pi:LST_TYPEOB_S):LSTINT_KEY is
   Undocumented.

install_param_inst(k:LSTINT_KEY; pinst:LST_TYPEOB_S):BOOL is
   Returns "true" if class instance is successfully installed in
   global semantic table.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):$TYPEOB_S is
   If it is a parametrized array type, we want to create class
     instances using different CLASSOB_S.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

PARSEROB is                                                    [class]

   Parent class of objects created during parsing.


Public definitions of class PARSEROB: 

Inherits from: CODEOB

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):$SEMANTOB is
   Copy parsing information into a new node for semantic phase.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

PERSIST_OB is                                                  [class]

   User ensures that the FILE_DESCRIPTOR object contains a valid file 
   descriptor.


Public definitions of class PERSIST_OB: 

deep_save(p:$OB; f:FILE_DESCRIPTOR) is
   Undocumented.

deep_restore(f:FILE_DESCRIPTOR):$OB is
   Undocumented.

deep_save_vn(p:$OB; f:FILE_DESCRIPTOR; version:INT) is
   Undocumented.

deep_restore_vn(f:FILE_DESCRIPTOR; version:INT):$OB is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

PRINT_C_CODE is                                                [class]

   This class provides a "lineno" attribute, just in case, it is 
   being used/inherited by objects without the "lineno" attribute.


Public definitions of class PRINT_C_CODE: 

cprint_sather_str_mi(outfile:SAT_OUTFILE; cont:INT;
                        exp:STR_CONST_EXPROB_S) is
   Print sather string declaration (local).

cprint_sather_str1_mi(outfile:SAT_OUTFILE; cont:INT;
                         exp:STR_CONST_EXPROB_S) is
   Print sather string declaration (global).

cprint_rt_typechk(outfile:SAT_OUTFILE; rt_type, temp_name, lineno:INT) is
   Strict/Descendent type check for result of expression.

cprint_void_tst(outfile:SAT_OUTFILE; cont:INT; exp:$EXPROB_S) is
   Void object test.

cprint_arr_bound_tst(ith_index, name1, name2:INT; outfile:SAT_OUTFILE;
                        lineno:INT) is
   Tests whether ith index is out of bound.

cprint_char_attr_access(outfile:SAT_OUTFILE; cont:INT; obj:$SEMANTOB) is
   Character attribute access. 

cprint_int_attr_access(outfile:SAT_OUTFILE; cont:INT; obj:$SEMANTOB) is
   Integer attribute access.

cprint_float_attr_access(outfile:SAT_OUTFILE; cont:INT; obj:$SEMANTOB) is
   Single-precsion floating-point attribute access.

cprint_double_attr_access(outfile:SAT_OUTFILE; cont:INT; obj:$SEMANTOB) is
   Double-precsion floating-point attribute access.

cprint_ptr_attr_access(outfile:SAT_OUTFILE; cont:INT; obj:$SEMANTOB) is
   Object attribute access.

cprint_type_access(outfile:SAT_OUTFILE; cont:INT; exp:$EXPROB_S) is
   Object type access.

cprint_cache_dispatch(outfile:SAT_OUTFILE; cont:INT;
                         exp:EXPR_ARGS_EXPROB_S) is
   Cache dispatch code.

cprint_ob_cache_dispatch(outfile:SAT_OUTFILE; cont:INT;
                            exp:EXPR_ARGS_EXPROB_S) is
   Handles special dispatch for "f.expr" (f:$OB).
   We do not care whether the check is on or not, because the
   dispatching value may be missing even in the normal case 
   for "f.expr" (f:$OB).

cprint_array_dispatch(outfile:SAT_OUTFILE; cont:INT; exp:$EXPROB_S) is
   Dispatch to get base size of array.

cprint_atomic_check(outfile:SAT_OUTFILE; cont:INT; exp:$EXPROB_S) is
   Whether the object contains non-object attributes.

cprint_copy(outfile:SAT_OUTFILE; cont:INT; exp:$EXPROB_S) is
   Copy object.

cprint_new(outfile:SAT_OUTFILE; dim:INT; cont:INT; exp:$EXPROB_S) is
   Print calls to runtime routines to create new objects

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

REAL is                                                        [class]

   `REAL' defines operations on single-precision real numbers.
   More exotic special functions are defined in the `MATH' class.
   `REAL''s and `DOUBLE''s are generally interchangable and the compiler
   will properly convert between them. `pow(x)' computes `self' raised to
   the power of `x'. It requires that `x' be larger than 0 if `self' is
   equal to zero and that `self' be non-negative if `x' is not an integer.
   `sqrt' computes the square root and requires that `self' be
   non-negative. `to_i', `floor', `ceiling', and `round' compute the four
   natural ways to approximate a floating point value by an integer.
   `mod(x)' computes the floating point remainder of `self' divided by
   `x' and has the same sign as `self'.


Public definitions of class REAL: 

to_d:DOUBLE is
   Convert to a `DOUBLE'.

to_i:INT is
   Nearest integer toward zero (sometimes called "truncate").

to_s:STR is
   The string representation of `self'.

max(r:REAL):REAL is
   The maximum of `self' and `r'.

min(r:REAL):REAL is
   The minimum of `self' and `r'.

pow(x:REAL):DOUBLE is
    Returns `self' raised to the power of `x'. Error if
   `self=0' and `x<=0' or if `self<0' and `x' is not an `INT'.

sqrt:DOUBLE is
   The square root of `self', `self>=0'.

floor:INT is
   Largest integer not greater than `self'.

ceiling:INT is
   Smallest integer not less than `self'.

round:INT is
   Closest integer to `self'.

abs:DOUBLE is
   The absolute value of `self'.

mod(x:DOUBLE):DOUBLE is
   The floating point remainder of `self/x' with the same sign as
   `self'.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

REAL_CONST_EXPROB is                                           [class]

   Contains either a value of type REAL or DOUBLE


Public definitions of class REAL_CONST_EXPROB: 

Inherits from: CONST_EXPROB

realval:STR;
   Pointer to string representation of float/double constant

create(v:STR):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):REAL_CONST_EXPROB_S is
   We need to replicate nodes for constants.  
   *! May want to optimize this later.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

REAL_CONST_EXPROB_S is                                         [class]

   Contains either a value of type REAL or DOUBLE


Public definitions of class REAL_CONST_EXPROB_S: 

Inherits from: CONST_EXPROB_S

realval:STR;
   Pointer to string representation of float/double constant

create(v:STR; ln:INT):SELF_TYPE is
   Undocumented.

sather_code:STR is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Though the type of eg "1.2" is REAL by default, during "semant"
   phase, it may turn out to be "DOUBLE" (eg in an expression 
   "1.2.f", "f" may be in the REAL or DOUBLE class).
   These are all handled by the parent of this REAL_CONST_EXPROB_S.

expr_eval_constant:$CONST_EXPROB_S is
   Undocumented.

val:STR_CURSOR is
   Undocumented.

cprint_act_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

RESERVED_CLASSES is                                            [class]

   This defines the indices for all predefined classes


Public definitions of class RESERVED_CLASSES: 

OB_ici:INT        := C::OB_ici;                             [constant]
   Undocumented.

ARRAY_ici:INT     := C::ARRAY_ici;                          [constant]
   Undocumented.

ARRAY2_ici:INT    := C::ARRAY2_ici;                         [constant]
   Undocumented.

ARRAY3_ici:INT    := C::ARRAY3_ici;                         [constant]
   Undocumented.

ARRAY4_ici:INT    := C::ARRAY4_ici;                         [constant]
   Undocumented.

BOOL_ici:INT      := C::BOOL_ici;                           [constant]
   Undocumented.

C_ici:INT         := C::C_ici;                              [constant]
   Undocumented.

CHAR_ici:INT      := C::CHAR_ici;                           [constant]
   Undocumented.

DOUBLE_ici:INT    := C::DOUBLE_ici;                         [constant]
   Undocumented.

ERR_ici:INT       := C::ERR_ici;                            [constant]
   Undocumented.

FILE_ici:INT      := C::FILE_ici;                           [constant]
   Undocumented.

IN_ici:INT        := C::IN_ici;                             [constant]
   Undocumented.

INT_ici:INT       := C::INT_ici;                            [constant]
   Undocumented.

OUT_ici:INT       := C::OUT_ici;                            [constant]
   Undocumented.

REAL_ici:INT      := C::REAL_ici;                           [constant]
   Undocumented.

SELF_TYPE_ici:INT := C::SELF_TYPE_ici;                      [constant]
   Undocumented.

STR_ici:INT       := C::STR_ici;                            [constant]
   Undocumented.

STR_CURSOR_ici:INT  := C::STR_CURSOR_ici;                   [constant]
   Undocumented.

SYS_ici:INT       := C::SYS_ici;                            [constant]
   Undocumented.

FOB_ici:INT       := C::FOB_ici;                            [constant]
   Undocumented.

UNDEFINE_ici:INT  := C::UNDEFINE_ici;                       [constant]
   Undocumented.

LAST_PREDEF_ici:INT := C::LAST_PREDEF_ici;                  [constant]
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

RESERVED_CLASS_NAMES is                                        [class]

   Names of reserved/predefined classes.


Public definitions of class RESERVED_CLASS_NAMES: 

array_classname:STR  := "ARRAY";                            [constant]
   Undocumented.

array2_classname:STR := "ARRAY2";                           [constant]
   Undocumented.

array3_classname:STR := "ARRAY3";                           [constant]
   Undocumented.

array4_classname:STR := "ARRAY4";                           [constant]
   Undocumented.

bool_classname:STR   := "BOOL";                             [constant]
   Undocumented.

c_classname:STR      := "C";                                [constant]
   Undocumented.

char_classname:STR   := "CHAR";                             [constant]
   Undocumented.

double_classname:STR := "DOUBLE";                           [constant]
   Undocumented.

file_classname:STR   := "FILE";                             [constant]
   Undocumented.

int_classname:STR    := "INT";                              [constant]
   Undocumented.

real_classname:STR   := "REAL";                             [constant]
   Undocumented.

self_type_classname:STR := "SELF_TYPE";                     [constant]
   Undocumented.

str_classname:STR       := "STR";                           [constant]
   Undocumented.

str_cursor_classname:STR  := "STR_CURSOR";                  [constant]
   Undocumented.

ob_classname:STR        := "OB";                            [constant]
   Undocumented.

sys_classname:STR       := "SYS";                           [constant]
   Undocumented.

fob_classname:STR       := "F_OB";                          [constant]
   Undocumented.

undefine_classname:STR  := "UNDEFINE";                      [constant]
   Undocumented.

err_classname:STR       := "ERR";                           [constant]
   Undocumented.

in_classname:STR        := "IN";                            [constant]
   Undocumented.

out_classname:STR       := "OUT";                           [constant]
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

RESERVED_FEAT_NAMES is                                         [class]

   More Sather keywords, related to predefined features.


Public definitions of class RESERVED_FEAT_NAMES: 

asize_fname:STR      := "asize";                            [constant]
   Undocumented.

asize1_fname:STR     := "asize1";                           [constant]
   Undocumented.

asize2_fname:STR     := "asize2";                           [constant]
   Undocumented.

asize3_fname:STR     := "asize3";                           [constant]
   Undocumented.

asize4_fname:STR     := "asize4";                           [constant]
   Undocumented.

copy_fname:STR       := "copy";                             [constant]
   Undocumented.

deep_copy_fname:STR  := "deep_copy";                        [constant]
   Undocumented.

extend_fname:STR     := "extend";                           [constant]
   Undocumented.

new_fname:STR        := "new";                              [constant]
   Undocumented.

type_fname:STR       := "type";                             [constant]
   Undocumented.

res_vname:STR        := "res";                              [constant]
   Undocumented.

self_vname:STR       := "self";                             [constant]
   Undocumented.

false_name:STR       := "false";                            [constant]
   Undocumented.

true_name:STR        := "true";                             [constant]
   Undocumented.

void_name:STR        := "void";                             [constant]
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

RESERVED_KEYWORD_NAMES is                                      [class]

   Sather keywords.


Public definitions of class RESERVED_KEYWORD_NAMES: 

and_kw_name:STR        := "and";                            [constant]
   Undocumented.

assert_kw_name:STR     := "assert";                         [constant]
   Undocumented.

break_kw_name:STR      := "break";                          [constant]
   Undocumented.

class_kw_name:STR      := "class";                          [constant]
   Undocumented.

constant_kw_name:STR   := "constant";                       [constant]
   Undocumented.

debug_kw_name:STR      := "debug";                          [constant]
   Undocumented.

else_kw_name:STR       := "else";                           [constant]
   Undocumented.

elsif_kw_name:STR      := "elsif";                          [constant]
   Undocumented.

end_kw_name:STR        := "end";                            [constant]
   Undocumented.

if_kw_name:STR         := "if";                             [constant]
   Undocumented.

inline_kw_name:STR     := "inline";                         [constant]
   (#)

is_kw_name:STR         := "is";                             [constant]
   Undocumented.

loop_kw_name:STR       := "loop";                           [constant]
   Undocumented.

not_kw_name:STR        := "not";                            [constant]
   Undocumented.

or_kw_name:STR         := "or";                             [constant]
   Undocumented.

private_kw_name:STR    := "private";                        [constant]
   Undocumented.

return_kw_name:STR     := "return";                         [constant]
   Undocumented.

shared_kw_name:STR     := "shared";                         [constant]
   Undocumented.

switch_kw_name:STR     := "switch";                         [constant]
   Undocumented.

then_kw_name:STR       := "then";                           [constant]
   Undocumented.

until_kw_name:STR      := "until";                          [constant]
   Undocumented.

when_kw_name:STR       := "when";                           [constant]
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

RESERVED_WORDS is                                              [class]

   Name indices of reserved words.


Public definitions of class RESERVED_WORDS: 

Inherits from: RESERVED_KEYWORD_NAMES

Inherits from: RESERVED_FEAT_NAMES

Inherits from: RESERVED_CLASS_NAMES

and_kw_ind:INT         := 1;                                [constant]
   Undocumented.

assert_kw_ind:INT      := 2;                                [constant]
   Undocumented.

break_kw_ind:INT       := 3;                                [constant]
   Undocumented.

class_kw_ind:INT       := 4;                                [constant]
   Undocumented.

constant_kw_ind:INT    := 5;                                [constant]
   Undocumented.

debug_kw_ind:INT       := 6;                                [constant]
   Undocumented.

else_kw_ind:INT        := 7;                                [constant]
   Undocumented.

elsif_kw_ind:INT       := 8;                                [constant]
   Undocumented.

end_kw_ind:INT         := 9;                                [constant]
   Undocumented.

if_kw_ind:INT          := 10;                               [constant]
   Undocumented.

inline_kw_ind:INT      := 11;                               [constant]
   (#)

is_kw_ind:INT          := 12;                               [constant]
   Undocumented.

loop_kw_ind:INT        := 13;                               [constant]
   Undocumented.

not_kw_ind:INT         := 14;                               [constant]
   Undocumented.

or_kw_ind:INT          := 15;                               [constant]
   Undocumented.

private_kw_ind:INT     := 16;                               [constant]
   Undocumented.

return_kw_ind:INT      := 17;                               [constant]
   Undocumented.

shared_kw_ind:INT      := 18;                               [constant]
   Undocumented.

switch_kw_ind:INT      := 19;                               [constant]
   Undocumented.

then_kw_ind:INT        := 20;                               [constant]
   Undocumented.

until_kw_ind:INT       := 21;                               [constant]
   Undocumented.

when_kw_ind:INT        := 22;                               [constant]
   Undocumented.

asize_ind:INT        := 23;                                 [constant]
   Undocumented.

asize1_ind:INT       := 24;                                 [constant]
   Undocumented.

asize2_ind:INT       := 25;                                 [constant]
   Undocumented.

asize3_ind:INT       := 26;                                 [constant]
   Undocumented.

asize4_ind:INT       := 27;                                 [constant]
   Undocumented.

copy_ind:INT         := 28;                                 [constant]
   Undocumented.

deep_copy_ind:INT    := 29;                                 [constant]
   Undocumented.

extend_ind:INT       := 30;                                 [constant]
   Undocumented.

new_ind:INT          := 31;                                 [constant]
   Undocumented.

type_ind:INT         := 32;                                 [constant]
   Undocumented.

res_ind:INT          := 33;                                 [constant]
   Undocumented.

self_ind:INT         := 34;                                 [constant]
   Undocumented.

false_ind:INT         := 35;                                [constant]
   Undocumented.

true_ind:INT          := 36;                                [constant]
   Undocumented.

void_ind:INT          := 37;                                [constant]
   Undocumented.

array_ind:INT    := 38;                                     [constant]
   Undocumented.

array2_ind:INT   := 39;                                     [constant]
   Undocumented.

array3_ind:INT   := 40;                                     [constant]
   Undocumented.

array4_ind:INT   := 41;                                     [constant]
   Undocumented.

bool_ind:INT     := 42;                                     [constant]
   Undocumented.

c_ind:INT        := 43;                                     [constant]
   Undocumented.

char_ind:INT     := 44;                                     [constant]
   Undocumented.

double_ind:INT   := 45;                                     [constant]
   Undocumented.

file_ind:INT     := 46;                                     [constant]
   Undocumented.

int_ind:INT      := 47;                                     [constant]
   Undocumented.

real_ind:INT     := 48;                                     [constant]
   Undocumented.

self_type_ind:INT   := 49;                                  [constant]
   Undocumented.

str_ind:INT         := 50;                                  [constant]
   Undocumented.

str_cursor_ind:INT    := 51;                                [constant]
   Undocumented.

ob_ind:INT          := 52;                                  [constant]
   Undocumented.

sys_ind:INT         := 53;                                  [constant]
   Undocumented.

fob_ind:INT         := 54;                                  [constant]
   Undocumented.

undefine_ind:INT    := 55;                                  [constant]
   Undocumented.

err_ind:INT         := 56;                                  [constant]
   Undocumented.

in_ind:INT          := 57;                                  [constant]
   Undocumented.

out_ind:INT         := 58;                                  [constant]
   Undocumented.

last_reserved_word_ind:INT := 58;                           [constant]
   Undocumented.

base_classname_p(i:INT):BOOL is
   Returns "true" if the index is name of a predefined class.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

RETURN_STMTOB is                                               [class]

   Return statements.


Public definitions of class RETURN_STMTOB: 

Inherits from: STMTOB

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):RETURN_STMTOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

RETURN_STMTOB_S is                                             [class]

   Return statements.


Public definitions of class RETURN_STMTOB_S: 

Inherits from: STMTOB_S

cprint_code(outfile:SAT_OUTFILE) is
   Remember to restore correct file name when we return from a
   routine call.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ROUT_FEATOB is                                                 [class]

   Routines.


Public definitions of class ROUT_FEATOB: 

Inherits from: FEATOB

pte:BOOL;
   "true" if routine is private

plist:LST_DECLOB;
   List of parameter declarations, if any.
   In particular, this should contain a list of PARAM_DECLOB's.

rettype:$TYPEOB;
   Return type, if any.

slist:LST_STMTOB;
   List of statements.

endLineno:INT;
   Sather line number of the end of the routine.

create(nm:INT; pl:LST_DECLOB; rt:$TYPEOB; sl:LST_STMTOB;ln:INT;
      eln:INT): SELF_TYPE is
   Undocumented.

mark_private is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):ROUT_FEATOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ROUT_FEATOB_S is                                               [class]

   Routines.


Public definitions of class ROUT_FEATOB_S: 

Inherits from: FEATOB_S

endLineno:INT;
   Sather line number of end of routine.

name:INT;
   Routine name index.

plist:LST_DECLOB_S;
   List of parameter declarations, if any.
   In particular, this should contain a list of PARAM_DECLOB_S's,
   guaranteed to be non-void if "create" routine is used.

rout_rettype:$TYPEOB_S;
   Return type, if any.

slist:LST_STMTOB_S;
   List of statements; pointer is never void, from grammar construction

pte:BOOL;
   "true" if routine is invisible to outsider

type_spec:ROUT_TYPEOB_S;
   Type of routine

disp:BOOL;
   True if dispatched.

locs:LST_DECLOB_S;
   List of locals in routine

tmpct:LIST{INT};
   This list contains information about the temporaries, in
     the form (ID, C type).  A negative ID means that the temporary
     is a static variable.

str_consts_in_rout:LIST{STR_CONST_EXPROB_S};
   Store a list of pointers to string constant nodes within this
   routine.  This is used to declare static variables which hold
   Sather strings.  Initialized in "create" routine, and so guaranteed
   to be non-void.

str_indices:LIST{INT};
   Store a list of distinct integers (indices of strings in string 
   table).

create(nm:INT; pl:LST_DECLOB_S; rt:$TYPEOB_S; sl:LST_STMTOB_S; -- inl:BOOL;
          priv:BOOL; c_def:CLASSOB; ln:INT; eln:INT): SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

featob_s_name:INT is
   Undocumented.

rettype:$TYPEOB_S is
   Undocumented.

typeof:$TYPEOB_S is
   Undocumented.

remember_local(lvar:LVAR_DECL_STMTOB_S) is
   Undocumented.

validate_dispatches_and_get_ext_strs is
   Undocumented.

compatible_des_feat(feat:SELF_TYPE; lval_p:BOOL):BOOL is
   -- Suppose A inherits from B and C each of which defines a routine
   -- "foo:$B is ... end;" and "foo:$C is ...end;" respectively.  Then
   -- suppose A gets C's version of "foo", so A will have "foo:$C is ...end;"
   -- which is incompatible with B's definition of "foo".  Similar problem
   -- arises even if we have "foo:SELF_TYPE is ... end;".  

param_conforms_to(par,ch:LST_TYPEOB_S):BOOL is
   This routine is only usable for cases where we know we are given
   explicitly a list of "TYPEOB_S".
   Check if parent class params "conforms'" to child.
   This is taken from the LST_TYPEOB_S conforms_to routine, but with
   modifications for contravariance which is a stronger condition
   than regular conformance.
   
   Add extra check for contravariance which will ensure that
   any child class function's arguments are supertypes or the same type
   as the same function defined in the parent class.
   The basic rule we need is that if we have a variable of type v:$PAR, we
   be able to do v.bar2(x) and that any value of x which is legal if v is
   really a PAR should also be legal if v is really a CH.
   i.e. given
   class A is end; class B is A; end;
   class PAR is
     bar2(b:TP) is end;
   end;
   class CH is
     PAR;
     bar2(a:TC) is end;
   end;
      ... and substituting in for TP and TC, the status now is:
  
      TP   TC
      A    A     valid
      A    $A    valid
      A    B     error
      A    $B    error
      B    A     error
      B    $A    valid
      B    B     valid
      B    $B    valid
      $A   A     error
      $A   $A    valid
      $A   B     error
      $A   $B    error 
      $B   A     error
      $B   $A    valid
      $B   B     error
      $B   $B    valid
  

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

add_str_const(str_const:STR_CONST_EXPROB_S) is
   Keeps track of the string constants used within the routine.
   The argument is supposed to be non-void.

do_gen_temps is
   Undocumented.

gen_goto_tags is
   Store the goto tags for "break" statements and check that
   "break" statements can only occur inside loops.

cprint_cname(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_extern(outfile:SAT_OUTFILE) is
   Print out the C "extern" declaration

cprint_decln(outfile:SAT_OUTFILE) is
   Print out the declaration of routine.

cprint_routine(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_store_dispval(outfile:SAT_OUTFILE) is
   Print name of routine with a cast to "int" in front

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ROUT_TYPEOB_S is                                               [class]

   Type expression of routine definitions.


Public definitions of class ROUT_TYPEOB_S: 

Inherits from: TYPEOB_S

list_paramstype:LST_TYPEOB_S;
   Types of arguments of routine

retval_type:INSTANT_TYPEOB_S;
   Return type of routine

create(parmstp:LST_TYPEOB_S; rtp:$TYPEOB_S; ln:INT):SELF_TYPE is
   Create a type expression for routines given the routine
   return type and types of its parameters.

dup:SELF_TYPE is
   Duplicate type-expression (of routine).

rettype:INSTANT_TYPEOB_S is
   Return type of routine.

paramstype:LST_TYPEOB_S is
   Types of parameters in routine.

conforms_to(tp:$TYPEOB_S):BOOL is
   Undocumented.

full_name:STR is
   String representation of type expression (of routine).

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SATFILEENT is                                                  [class]

   Undocumented.


Public definitions of class SATFILEENT: 

satFileEnts:ARRAY{SATLINEENT};
   Undocumented.

numEnts:INT;
   Undocumented.

defaultLineEntries:INT := 200;                              [constant]
   Undocumented.

create:SELF_TYPE is
   

add(s:STR) is
   add a sather file entry by parsing string which
   is assumed to be of the form:
       satherLineNo<space>cFileNameIndex<colon>cLineNumber
   with possible repeating <space>cFileNameIndex<colon>cLineNumber

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SATHER_SEMANT is                                               [class]

   Undocumented.


Public definitions of class SATHER_SEMANT: 

Inherits from: RESERVED_WORDS

array_str_ind:INT := 0;                                       [shared]
   Compiler has to determine the index of "ARRAY{STR}" within the
   particular instance of compilation.

error_msg(s:STR) is
   Undocumented.

error_exit(s:STR) is
   Undocumented.

install_predefined_classes:BOOL is
   Returns "true" if all the predefined classes are defined and
   successfully installed.

install_root_classes(names:LIST{INT}):INT is
   Install the root classes (with which "cs" was called); returns the
   number of classes installed.

all_create_inst is
   NOTE: With incremental compilation, the CLASSOB_S objects
         are not inserted in any particular order, and so we
         must keep checking all CLASSOB_S's until all of them
         are done. 

all_expand_cinh is
   Undocumented.

all_resolve_predef_types_and_compute_num_attrs(used_classes:LIST{INT}) is
   Undocumented.

all_compute_anc_and_des_and_time_stamp is
   Undocumented.

print_descendant_information is
   

all_compute_attr_offsets is
   Undocumented.

find_called_features is
   Undocumented.

record_keys_set is
   Undocumented.

all_semant is
   Undocumented.

final_pass(co:CLASSOB_S) is
   Undocumented.

all_class_inst_cprint is
   Undocumented.

cprint_macros(outfile:SAT_OUTFILE) is
   Print C macros needed in "MAIN_.c" file.

all_cprint_init is
   Open the file "MAIN_.c" to contain initializations to attribute
   and dispatch tables.

cprint_rt_static(outfile:SAT_OUTFILE) is
   Print variables used during runtime.

print_defines(outfile:SAT_OUTFILE) is
   Undocumented.

print_sather_to_c_macros is
   Undocumented.

print_browser_info is
   Print the <index, name> pairs for classes.

old_version_print_sather_to_c_macros is
   Undocumented.

print_makefile is
   Undocumented.

argv_needed:BOOL is
   Undocumented.

old_version_argv_needed:BOOL is
   Undocumented.

get_simple_classnames:LIST{INT} is
   Undocumented.

get_array_str_ind:INT is
   Undocumented.

print_gen_rt_table(outfile:SAT_OUTFILE; table_prefix:STR; cond:BOOL) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SATLINEENT is                                                  [class]

   Undocumented.


Public definitions of class SATLINEENT: 

satLineNo:INT;
   sather line for this file

numEnts:INT;
   Undocumented.

cFileEnts:ARRAY{TWOINTS};
   array of C file entries.

create:SELF_TYPE is
   

add(item:STR_CURSOR) is
   add data from string provided by cur which is assumed to be in regex form:
     (<int>:<int>)+

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SATLINEEXP is                                                  [class]

   sather line expansion


Public definitions of class SATLINEEXP: 

Inherits from: SORTOB

cFiles:ARRAY{CFILEENT};
   the C files sather filename:lineno trans to.

defLength:INT := 20;                                        [constant]
   Undocumented.

satFileName:STR;
   sather file name

satLineNo:INT;
   the sather line number for this entry

length:INT;
   Undocumented.

create(sfn:STR;sln:INT):SATLINEEXP is
   Undocumented.

add(cfname:STR;ln:INT) is
   

print(outfile:FILE) is
   

comp(slep:$SORTOB):INT is
   compare self with given sle
   return -1 if self < sle
   return 0 if self = sle
   return 1 if self > sle

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SAT_CMDFILE is                                                 [class]

   Undocumented.


Public definitions of class SAT_CMDFILE: 

Inherits from: COMPILE_KEYS_CONST

Inherits from: TEXTFILE

buf:STR_BUFFER;
   Stores current string

create(nm:STR):SELF_TYPE is
   This initialization will allocate space for SAT_CMDFILE
   object and does initialization for TEXTFILE part.
   Open named file for reading 

check_kw:INT is
   Returns a keyword token.  If buffer does not contain a 
     keyword, return an integer not in the range of valid 
     tokens.

get_token:INT is
   Return tokens for sather command file

curr_str:STR is
   Return string in buffer.  

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SAT_OUTFILE is                                                 [class]

   Used for outputting Sather code.
   Adapted from "SOUT" class by Steve


Public definitions of class SAT_OUTFILE: 

Inherits from: OUTFILE

index:INT;
   Current indentation

line_no:INT;
   current line number. Used for debugger.

ind_inc_sz:INT := 3;                                        [constant]
   Indentation increment

indent:SELF_TYPE is
   Undocumented.

ind_init:SELF_TYPE is
   Undocumented.

ind_inc:SELF_TYPE is
   Undocumented.

ind_dec:SELF_TYPE is
   Undocumented.

cprint_bool(v:BOOL):SELF_TYPE is
   Undocumented.

inc_ln(i:INT):SELF_TYPE is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SEMANTOB is                                                    [class]

   Parent class of objects created during semantic phase


Public definitions of class SEMANTOB: 

Inherits from: CODEOB

create(ln:INT):SELF_TYPE is
   Create a object for parent class of semantic objects.

resolve_predef_types(index:INT) is
   Resolve predefined types (SELF_TYPE etc).

semant(symtab:SYMBOL_TABLE) is
   Find referrent of symbols, from the given symbol table.

typeof:$TYPEOB_S is
   Resultant type of expression.

get_offset:INT is
   Offset of attribute feature.

cprint_offset(outfile:SAT_OUTFILE) is
   Print offset of attribute feature.

get_constval:$CONST_EXPROB_S is
   Get a object representing a constant value for this
   expression.

cont_cprint_code(outfile:SAT_OUTFILE; cont:INT) is
   Default is to print nothing.  If a descendent redefines this 
   routine, the type of "obj" should be redeclared to be the appropriate
   non-dispatched type.

cprint_cname(outfile:SAT_OUTFILE) is
   Only relevant for ROUT_FEATOB_S, CONST_DECL_FEATOB_S or
     SHARED_DECL_FEATOB_S.

cprint_extern(outfile:SAT_OUTFILE) is
   Only relevant for ROUT_FEATOB_S, CONST_DECL_FEATOB_S, and
   SHARED_DECL_FEATOB_S.

cprint_access_value(outfile:SAT_OUTFILE) is
   The following will be printed for each kind of declaration.
   a.  ATTR_DECL_FEATOB_S :  Print code to access attribute of "self"
   b.  SHARED_DECL_FEATOB_S : Print name of corresponding global C 
                              variable
   c.  CONST_DECL_FEATOB_S : The actual name of the global C variable
                             or a constant value 
   d.  PARAM_DECLOB_S : C name of parameter
   e.  LVAR_DECLOB_S : C name of local variable

cprint_init_code(outfile:SAT_OUTFILE) is
   This is only relevant for 
   a. SHARED_ / CONST_DECL_FEATOB_S : Print out the initialization code
   b. All EXPROB_S's : Ask the referrent to print out the initialzation
                       code if they are SHARED_ or CONST_DECL_FEATOB_S.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SHARED_DECL_FEATOB is                                          [class]

   Shared attributes.


Public definitions of class SHARED_DECL_FEATOB: 

Inherits from: FEATOB

Inherits from: DECLOB

init_expr:$EXPROB;
   Initialization expression

pte:BOOL;
   "true" if shared feature is private

create(nm:INT; t:$TYPEOB; e:$EXPROB; ln:INT):SELF_TYPE is
   Undocumented.

mark_private is
   Undocumented.

create_lst(do:ANY_DECLOB; exp:$EXPROB):LST_FEATOB is
   Given a ANY_DECLOB, take the list of identifiers in
     ANY_DECLOB, and make a list of $FEATOB's (in
     particular a list of CONST_DECL_FEATOB's).

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):SHARED_DECL_FEATOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SHARED_DECL_FEATOB_S is                                        [class]

   Shared attributes.


Public definitions of class SHARED_DECL_FEATOB_S: 

Inherits from: FEATOB_S

Inherits from: DECLOB_S

name:INT;
   Undocumented.

init_expr:$EXPROB_S;
   Initialization expression

pte:BOOL;
   "true" if shared attribute is pte

tmpct:LIST{INT};
   List of temporaries needed for initial expression; computed 
   in "do_gen_temps"

disp:BOOL;
   True if dispatched anywhere.

printed_p:BOOL;
   True if initialization code has been printed.

create(nm:INT; t:$TYPEOB_S; e:$EXPROB_S; priv:BOOL; c_def:CLASSOB; ln:INT):SELF_TYPE is
   Undocumented.

sather_code:STR is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

featob_s_name:INT is
   Undocumented.

declob_s_name:INT is
   Undocumented.

compatible_des_feat(feat:SELF_TYPE; lval_p:BOOL):BOOL is
   "lval_p" is true when we are using the attribute as the LHS of
   an assignment statement.  "feat" is guaranteed to be non-void.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

do_gen_temps is
   Undocumented.

cprint_cname(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_extern(outfile:SAT_OUTFILE) is
   Print out the C "extern" declaration

cprint_decln(outfile:SAT_OUTFILE) is
   Print out the C declaration of shared attribute

cprint_access_value(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_store_dispval(outfile:SAT_OUTFILE) is
   Print ddress of global C variable (with cast to "int")

cprint_init_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SIMPLE_TYPEOB is                                               [class]

   Simple types.


Public definitions of class SIMPLE_TYPEOB: 

Inherits from: TYPEOB

name:INT;
   Index of the class name

create(nm:INT):SELF_TYPE is
   Create a simple typeob with the given name

disp_type:$TYPEOB is
   The dispatched type of a simple type is itself.

name_str:STR is
   String representation of simple type.

get_key(pl:LIST{INT}; pi:LST_TYPEOB_S):LSTINT_KEY is
   Returns "void" if key cannot be succesfully constructed.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):$TYPEOB_S is
   Returns a type expression representing the simple type in
   original Sather code.

install_simple_inst(k:LSTINT_KEY):BOOL is
   Returns "true" if class instance successfully installed

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SORTER is                                                      [class]

   Undocumented.


Public definitions of class SORTER: 

array:ARRAY{$SORTOB};                                         [shared]
   Undocumented.

qsortdoit(l,u:INT) is
   Quicksort the nodes between l and u

qsort(arr:ARRAY{$SORTOB}; u,l:INT) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SORTOB is                                                      [class]

   Undocumented.


Public definitions of class SORTOB: 

comp(so:$SORTOB):INT is
   abstract routine, should never be called
   Subclasses 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STMTOB is                                                      [class]

   Statements.


Public definitions of class STMTOB: 

Inherits from: PARSEROB

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):$STMTOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STMTOB_S is                                                    [class]

   Statement objects created during semantic phase.


Public definitions of class STMTOB_S: 

Inherits from: SEMANTOB

create(ln: INT): SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

typechk_exprs(tp:$TYPEOB_S):BOOL is
   Returns "true" if all the expressions in the statement conforms to
   given type; currently only relevant for WHEN_STMTOB_S.

gen_temps:LIST{INT} is
   Default is not to generate any temporaries.  There is no
     guarantee of returning a list, hence the returned value
     may be void.

gen_goto_tags(loop_stmt:LOOP_STMTOB_S) is
   The parameter is the closest enclosing loop statement.
   Default is to do nothing.

validate_dispatches_and_get_ext_strs is
   The only situation where any real check is done is in 
   "LVAR_DECL_STMTOB_S" where the "type_spec" is checked.
   In other cases, we just recursively check the statement list
   for any local variable declarations.

cprint_code(outfile:SAT_OUTFILE) is
   Default is to print nothing

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STR is                                                         [class]

   Sather strings are simply arrays of characters in which all characters
   following the last character of the string are equal to `\000'.  Each
   string must have at least one such character for compatibility with C
   strings. The primary means for constructing strings in Sather is to
   append strings constructed from entities to the end of existing
   strings. The amortized doubling technique is used to automatically
   allocate space for strings. This means that if there is not room in a
   string for the characters which need to be appended, a new string with
   twice as many characters is allocated and the original characters are
   copied over. By the time a string constructed by repeated appending
   gets to be of length n, at most O(log n) such extensions will have
   been made, the total number of copied characters is O(n) as is the
   amount of wasted space and garbage to be collected by the collector.
   Thus the costs per character are constant when amortized over the
   construction of an entire string. Because all characters following the
   end of a string are equal to 0, the end of the string is found by
   binary search. This allows the system to determine the length of
   strings in O(log n) time without the space and time overhead of
   explictly storing and updating the length.
   
   Most strings are constructed by appending component strings together.
   For example,
   
   ``s:STR:="The floor of ".r(15.3).s(" is ").i(15).c('.').nl;''
   
   sets the string `s' to `"The floor of 15.3 is 12.\n"'. Each of the
   appending routines: `b', `c', `s', `i', `r', `d', and `nl' return
   the new string. These operations work by amortized doubling and
   potentially destroy the original string. To append to an existing
   string without destroying it, one may use `copy' in an expression like:
   
   `s2:=s1.copy.s(" appended part")'.
   
   Reals and doubles are converted to strings with a precision given by
   the shared integer `precision'. If `precision' is equal to `0' then
   only the integer part of a `REAL' is put into the string. Whenever this
   variable is set, future constructions use the new value until it is
   changed again. In strings, the boolean values `true' and `false' are
   represented by `"T"' and `"F"'. `cursor' produces an object of type
   `STR_CURSOR' which points at the head of the string and is used to
   sequentially read out its components.


Public definitions of class STR: 

Inherits from: ARRAY

precision: INT := 6;                                          [shared]
   Digits of precision in printing `REAL''s.
   If `precision=0', then print `REAL''s as `INT''s.

create: SELF_TYPE is
   An empty string.

create_sized(n: INT): SELF_TYPE is
   An empty string with room for `n' characters (including the end
   terminator).

b(bo: BOOL): STR is
   A string with 'T' or 'F' appended according to the value of `bo'.

c(ch: CHAR): STR is
   A string with character `ch' appended.

s(st: STR): STR is
   A string with `st' appended.

i(in: INT): STR is
   A string with integer `in' appended.

r(re: REAL): STR is
   A string with the `REAL' `re' appended.

d(do: DOUBLE): STR is
   A string with the `DOUBLE' `do' appended.

nl: STR is
   A string with a newline character appended to `self'.

is_equal(st: STR): BOOL is
   True if `self' is the same string as `st'.

is_less_than(st: STR): BOOL is
   True if `self' is lexicographically before `st'.

to_upper_case: STR is
   Converts all characters in `self' to upper case.

to_lower_case: STR is
   Converts all characters in `self' to lower case.

capitalize: STR is
   Capitalize all the words in `self'.

is_upper_case: BOOL is
   True if all alphabetic characters in `self' are capitalized.

head(n: INT): STR is
   A new string consisting of the first `n' letters of `self'.

tail(n: INT): STR is
   A new string consisting of the last `n' letters of `self'.

length: INT is
   The current length of `self' (not including trailing '\0').

substring(n,m: INT): STR is
   The substring between characters `n' and `m' inclusive. (`n<=m').

index_of_char(ch: CHAR): INT is
   The index of the first appearance of `ch' in `self' or `-1' if
   absent.

reverse: STR is
   Reverse the order of the characters in `self'. Return `self'.

is_empty: BOOL is
   True if `self' has no characters.

to_i: INT is
   The `INT' of which `self' is a representation.

to_r: REAL is
   The `REAL' of which `self' is a representation.

to_d: DOUBLE is
   The `DOUBLE' of which `self' is a representation.

to_b: BOOL is
   The `BOOL' of which `self' is a representation.
   (ie. has value `true' if `"T"' and `false' if `"F"').

to_c: CHAR is
   The `CHAR' of which `self' is a representation.

from_c_str(st: F_OB): STR is
   Returns a Sather string corresponding to the C string whose 
   pointer is `st'. Used internally.

cursor: STR_CURSOR is
   A cursor into `self'.

hash: INT is
   An inexpensive to compute hash function of `self'.
   Gives an `INT' with rightmost 24 bits. 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STR2INT2STR is                                                 [class]

   a bit different than STR_TO_INT
   provides both STR -> INT and INT -> STR mapping.


Public definitions of class STR2INT2STR: 

tbl: GENERAL_HASH{STR_HASH_MAP_ELT{INT}};
   The table.

tmp: STR_HASH_MAP_ELT{INT};
   A temporary element for queries.

itos:ARRAY{STR};
   integer to string mapping

create:SELF_TYPE is
   An empty mapping.

geti(s:STR):INT is
   The int associated with s or -1 if absent.

gets(i:INT):STR is
   Get the STR associated with i or "" if absent

insert(s:STR; v:INT):BOOL is
   Map s <--> v, no overwriting of a previous value.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STRINT_HASH_ELT is                                             [class]

   Elements of a GEN_HASH table for pairing <strings,int> tuples with ints.


Public definitions of class STRINT_HASH_ELT: 

s:STR;
   The string.

int:INT;
   the int

hash:INT;
   The int hash value of s.

val:INT;
   The int associated with s.

create(ns:STR; i:INT; nval:INT):SELF_TYPE is
   An STRINT_HASH_ELT which associates <ns,i> with nval.

str_hash(st:STR;i:INT):INT is
   A hash value for string <st,i>. Cheap function.

is_equal(e:STRINT_HASH_ELT):BOOL is
   True if self and e have the same string.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STRINT_TO_INT is                                               [class]

   Mappings from <strings,int> tuples to ints.
   create, get, ins, del, clr


Public definitions of class STRINT_TO_INT: 

t:GENERAL_HASH{STRINT_HASH_ELT};
   the table

create:SELF_TYPE is
   An empty mapping.

get(s:STR;i:INT):INT is
   The int associated with <s,i> or -1 if absent.

insert(s:STR; i:INT; v:INT) is
   Map <s,i> into v, overwriting if previous value.

delete(s:STR;i:INT) is
   Delete s if present.

clear is
   Clear the table.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STR_BUFFER is                                                  [class]

   Extensible array of characters, to handle arbitrary symbol length
   required by the scanner.


Public definitions of class STR_BUFFER: 

Inherits from: LIST

def_str_len:INT := 20;                                      [constant]
   Default initial buffer size is 20

create(init_str_len:INT):SELF_TYPE is
   Create an extensible array of characters.

strval:STR is
   Returns a copy of the string as a `STR' object.

is_equal(strv:STR):BOOL is
   Returns "true" if given string is same as the one in buffer.

terminate:SELF_TYPE is
   Insert a null character.

length:INT is
   Number of characters pushed into the list including the last
   character if it is '\0'.

init is
   Initialize string buffer.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STR_CONST_EXPROB is                                            [class]

   Undocumented.


Public definitions of class STR_CONST_EXPROB: 

Inherits from: CONST_EXPROB

strval:INT;
   Index associated with string representation of string constant

create(v:INT):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):STR_CONST_EXPROB_S is
   We need to replicate nodes for constants.  
   *! May want to optimize this later.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STR_CONST_EXPROB_S is                                          [class]

   NOTE:
   The reason for changing the storage of string constants as strings to
   index (into table) is that when we do incremental compilation, the
   temporary names associated with a STR_CONST_EXPROB_S may change.  This
   is NOT a problem for strings used in a routine eg:
       foo(x:INT) is
          OUT::s("xxx");
       end; -- foo
   because the declaration for "xxx" is in the routine and used only 
   in the routine.  But with a constant/shared feature eg:
       constant foo:STR := "xxx"; /* class C1 */
   in a different class C2, we may refer to C1::foo (which is substituted
   by the actual string during code generation) eg in C2, we may have:
       shared bar:STR := C1::foo;
   During initialization, we need to refer to the temporary variable
   for "xxx" which may be different in the current compilation from
   the previous compilation, so that if C1 does not change, then the
   old code has a different temporary variable for "xxx" from the 
   current one generated in "MAIN_.c".


Public definitions of class STR_CONST_EXPROB_S: 

Inherits from: CONST_EXPROB_S

strval:INT;
   Index to table storing string representation of string constant

global:BOOL;
   This value is "true" if the string is found in a shared/constant
   feature definition.
   NOTE: Consider the following situation:
        constant foo:STR := "xxx";
        bar is
           OUT::s("xxx").s(foo);
        end; 
   When the code is generated for "foo", it is a reference to a
   temporary variable associated with the string.  If we simply
   the same prefix eg "str100_" (100 = index of "xxx" in table),
   then the reference is incorrect.  (Theoretically, as long as
   the Sather strings do not change, there should not be any
   problem though.)
   Upated in "semant".

create(v:INT; ln:INT):SELF_TYPE is
   Undocumented.

sather_code:STR is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

expr_eval_constant:$CONST_EXPROB_S is
   Undocumented.

temp_name:INT is
   Undocumented.

find_actual_length:INT is
   Undocumented.

cont1:INT := 1;                                             [constant]
   Print the parameters:
   <STR class index>, <length> + 1, <Temporary variable>, <Actual string>

cprint_mach_indep(outfile:SAT_OUTFILE) is
   Print the string "xxx" in the declaration form
   "SATHER_STR_(20,4,<var>,"xxx");" which will be macro-expanded
   to:
   "static struct { int tp_; int sz_; char st_[4] } <var> = 
    { 20, 4, "xxx" };" 
   Note that extra byte in the string to accomodate the null character.

cprint_mach_indep_global(outfile:SAT_OUTFILE) is
   Print the string "xxx" in the declaration form
   "SATHER_STR1_(20,4,<var>,"xxx");" which will be macro-expanded
   to:
   "struct { int tp_; int sz_; char st_[4] } <var> = 
    { 20, 4, "xxx" };" 
   Note that extra byte in the string to accomodate the null character.
   The difference from previous routine is that the global variable is
   not "static", so that it can be exported to other generated C files.

cont_cprint_code(outfile:SAT_OUTFILE; cont:INT) is
   Undocumented.

cprint_act_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STR_CURSOR is                                                  [class]

   Class for stepping through strings extracting information.
   Throughout the Sather libraries, cursor classes are used to keep
   pointers into container data structures. In each case there is the
   possibility of problems if the the structure is destructively modified
   while a cursor points to its internals. The preferred approach is to
   completely use one or more cursors into a structure before
   destructively modifying it. For strings, cursors are used to
   sequentially read out the components of a string. They may be used to
   perform a similar function to that played by "scanf" in C without need
   for functions with a variable number of arguments.  This approach is
   actually much more general since it allows for testing for the
   presence of an `INT', for example, at a given point in the string.
   
   In typical usage a string cursor pointing to the beginning of the
   string `s' is created by the call `s.cursor' in the string class or by
   `create(st)' in the string cursor class. If the structure of the
   string is precisely known, then a sequence of calls to `get_foo' will
   allow one to extract the known components. White space is skipped over
   in searching for integers, reals and doubles. For example, if the
   string `s' consists of a boolean, three integers, a real and a string
   then these components may be extracted with:
   
   `sc:STR_CURSOR:=s.cursor; b:BOOL:=sc.get_b; i1:INT:=sc.get_i; 
   i2:INT:=sc.get_i; i3:INT:=sc.get_i; r:REAL:=sc.get_r; s1:STR:=sc.get_s;'
   
   If we were wrong about the structure of the string, then the shared
   variable `error' will be set to a non-zero value. Sometimes we are not
   certain of the structure of a string. For example, we may not know
   whether the next field will contain an integer or a real. In this case
   we may use the routines with names of the form `foo_size'. If there is
   no possible entity of the specified type at the current location, such
   calls will return 0. Otherwise they will return the number of
   characters in the specified entity without moving the cursor forward.


Public definitions of class STR_CURSOR: 

s: STR;
   The string we are scanning.

index: INT;
   The index of the current character.

error: INT;
   0 if no errors, an error code otherwise.

create(st: STR): SELF_TYPE is
   Make a scanner for the string `st'.

get_s: STR is
   A string containing characters up to and including the next newline.

b_size: INT is
   `1' if index points at 'T' or 'F', `0' otherwise.

get_b: BOOL is
   Read `"T"' or `"F"' and return `true' or `false'.

get_c: CHAR is
   Read one character.

digits_size(i: INT): INT is
   Number of `CHAR''s starting at `i' which are digits.

i_size: INT is
   Number of `CHAR''s in an integer at `index', `0' if not present.

get_i: INT is
   Read an integer.

r_size: INT is
   Number of `CHAR''s in a `REAL' or `DOUBLE' at `index', `0'
   if not present. Accepts integers as well.

get_r: REAL is
   Read a `REAL'.

get_d: DOUBLE is
   Read a `DOUBLE'.

item: CHAR is
   the current char or void.

first: CHAR is
   Go to the beginning of the string and return the first char.

next: CHAR is
   Move to the next char and return it or void.

space_size(i: INT): INT is
   Number of space characters, tabs, newlines and other ASCII
   whitespace starting at character `i'.

skip_space: STR_CURSOR is
   Move over space, tabs, newlines and other ASCII whitespace and
   return `self'.

is_done: BOOL is
   True if the cursor is at the end of the string.

reassign (str : STR): STR_CURSOR is
   Change the string that `self' points to, return `self'.

c_equals(c: CHAR): BOOL is
   True if the next character is equal to `c'.

c_accept(c: CHAR): BOOL is
   True if the next char is `c'. If so, skip it and any following
   white space.

get_s_cut(cutset: STR): STR is
   String up to and including the next member of `cutset'.

get_word: STR is
   Return string up to but not including white space. Cursor is
   moved past white space.

update_i(x: INT): INT is
   If `get_i' return it and `skip_space', else return `x'.

update_r(x: REAL): REAL is
   If `get_r' return it and `skip_space', else return `x'.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STR_SET is                                                     [class]

   Sets of objects represented by extendible hash tables.
   create, get, ins, del, size, clr, curs, union, intersection, difference,
   sym_difference


Public definitions of class STR_SET: 

hsize:INT;
   number stored (including deletes!)

msk:INT;
   mask for the hash function

Inherits from: ARRAY

del_key:STR:="\0";                                            [shared]
   Undocumented.

create:SELF_TYPE is
   An empty STR_SET.

hash(s:STR):INT is
   Undocumented.

get(o:STR):BOOL is
   True if o is in the stored set.

double_size:STR_SET is
   Resize self to double. Copy non-deleted entries over.

insert(o:STR):STR_SET is
   Insert ob o.

delete(o:STR) is
   Delete string o if present.

size:INT is
   Number of entries, (not fast).

clear is
   Clear the table.

cursor:STR_SET_CURS is
   A cursor into the table.

union(s:STR_SET):STR_SET is
   Expand self to be the union with s. Destructive. 

intersection(s:STR_SET):STR_SET is
   Shrink self to be the intersection with s. Destructive.

difference(s:STR_SET):STR_SET is
   Remove elements of self contained in s. Destructive. 

sym_difference(s:STR_SET):STR_SET is
   Remove elements of self contained in s, add elements of s not 
   contained in self. Destructive. 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STR_SET_CURS is                                                [class]

   A cursor into STR_SET's for stepping through all keys.
   create, first, cur, next, done


Public definitions of class STR_SET_CURS: 

tbl:STR_SET;
   pointer to table

index:INT;
   index into table

is_done:BOOL;
   true if all entries visited

del_key:STR:="\0";                                          [constant]
   Undocumented.

create(t:STR_SET):SELF_TYPE is
   A cursor into t which is initialized to first. 

first is
   Set the cursor to the first location, if any.

item:STR is
   The current ob.

next is
   Move the cursor to the next location.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STR_TABLE is                                                   [class]

   String table with each string associated with a unique index.
   We assume that when we augment the string table from the entries
   in a file; the entries are stored in consecutive locations.


Public definitions of class STR_TABLE: 

stable:ARRAY{STR};
   Array of strings.

htable:ARRAY{INT};
   Indices into `htable'.

next_ind:INT;
   Next position to insert string in `stable'.

reserved_names:INT_HASH_SET := INT_HASH_SET::create;          [shared]
   Reserves the following names
   asize1, asize2, asize3, asize4, copy, /* deep_copy */, extend, new, res, 
   self, type, void

ssize:INT;
   Undocumented.

hsize:INT;
   These values are accessible using "asize" of the tables, but
   stored separately to speed up access.

Inherits from: RESERVED_CLASS_NAMES

Inherits from: RESERVED_KEYWORD_NAMES

Inherits from: RESERVED_FEAT_NAMES

Inherits from: RESERVED_WORDS

init_size:INT := 2000;                                      [constant]
   Undocumented.

create:SELF_TYPE is
   Store reserved names (not reserved keywords) 

augment is
   The string table is augmented with the list of <index, string>
   pairs created from previous compilation.

reserved_name_p(nm:INT):BOOL is
   Returns "true" if `nm' is in the list of reserved names.

hash_string(s:STR):INT is
   Hash function on a string stored in an object of type `STR'.

hash_string_buf(s:STR_BUFFER):INT is
   Hash function on a string stored in an object of type `STR_BUFFER'.

index_of_str(s:STR_BUFFER):INT is
   Returns the index of a string, inserting a copy if not already there

insert_str(s:STR):INT is
   Returns the index of a string, inserting a copy if not already there.
   This works for "STR" where "index_of_str" works for "STR_BUFFER".
   Also this does not copy the string.

find_str(s:STR):INT is
   Returns the index of a string or -1 if not found in table.

double_tables is
   Double size of string table.

at_index(i:INT):STR is
   Returns string at index i.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STR_TAB_FILE is                                                [class]

   Undocumented.


Public definitions of class STR_TAB_FILE: 

Inherits from: FILE

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

STR_TEST is                                                    [class]

   Test the classes `STR' and `STR_CURSOR'.


Public definitions of class STR_TEST: 

Inherits from: TEST

main is
   Test the classes `STR' and `STR_CURSOR'.

str_test is
   Test `STR'.

str_cursor_test is
   Test `STR_CURSOR'.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SWITCH_STMTOB is                                               [class]

   Switch statements.


Public definitions of class SWITCH_STMTOB: 

Inherits from: STMTOB

test:$EXPROB;
   Undocumented.

when_part:LST_WHEN_STMTOB;
   List of when clauses.  The objects should all be "WHEN_STMTOB"'s.

else_part:LST_STMTOB;
   List of statements at end, if any.

create(t:$EXPROB; wp:LST_WHEN_STMTOB; ep:LST_STMTOB; ln:INT):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):SWITCH_STMTOB_S is
   The parameters are a list of indices for type parameter
     names and a list of keys for the type instantiations.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SWITCH_STMTOB_S is                                             [class]

   Switch statements.


Public definitions of class SWITCH_STMTOB_S: 

Inherits from: STMTOB_S

test:$EXPROB_S;
   Undocumented.

when_part:LST_WHEN_STMTOB_S;
   List of when clauses.  The objects should all be "WHEN_STMTOB_S"'s.
   The value is guaranteed to be non-void.

else_part:LST_STMTOB_S;
   List of statements at end, if any.

all_consts_p:BOOL;
   "true" if all the expressions in when-clauses are integers and
   constants; otherwise, we need to allocate temporary variable to
   hold the value of "test".

temp_name:INT;
   Undocumented.

temp_ctype:INT;
   Undocumented.

tag:INT;
   Undocumented.

create(t:$EXPROB_S; wp:LST_WHEN_STMTOB_S; ep:LST_STMTOB_S; ln:INT):SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

gen_temps:LIST{INT} is
   Undocumented.

gen_goto_tags(loop_stmt:LOOP_STMTOB_S) is
   Undocumented.

validate_dispatches_and_get_ext_strs is
   Undocumented.

cprint_then_parts_code(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_default_code(outfile:SAT_OUTFILE; i, j:INT) is
   Print the code for the "i"th WHEN_STMTOB_S, and "j"th expression
   within the when-clause.

cprint_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SYMBOL_TABLE is                                                [class]

   Symbol table associated with an actual Sather class.  The features
   are stored in the first hash table, and subsequent nesting in
   each subsequent hash tables.


Public definitions of class SYMBOL_TABLE: 

in_class:CLASSOB_S;
   Class instance to which the symbol table belongs.

scopes:LIST{HASH_TABLE{$SEMANTOB}};
   Undocumented.

scope_indices:LIST{INT};
   Both lists are guaranteed to be non-void if we use "create" routine.

curr_scope_index:INT;
   Index to hash table for current scope; this value is not
   stored on top of the stack.

error_msg(s:STR) is
   Print error message.

error_exit(s:STR) is
   Print message and exit.

create(sz:INT; cls:CLASSOB_S):SELF_TYPE is
   Create a symbol table.

add_feature(nm:INT; new_fo:$FEATOB_S) is
   Add a new FEATOB_S and replace an older version by a newer one

del_feature(nm:INT) is
   Removes the FEATOB_S successfully removed from
   table.  The table maintains the property that there is
   only one feature for each name.

get_feature(nm:INT):$SEMANTOB is
   Features only occur in the first hash table.

defined_in_curr_scope_p(nm:INT):BOOL is
   Returns "true" if symbol is defined in current scope.

defined_in_all_scopes_p(nm:INT):BOOL is
   Returns "true" if any of the hash tables up to the lowest
   level (feature-table).

defined_in_non_outer_scopes_p(nm:INT):BOOL is
   This routine checks for the given name in all scopes (whether exited or
   or not) in the current routine definition.

enter_unique_sym(nm:INT; item:$SEMANTOB) is
   Store semantic object associated with name index `nm' (uniquely).

enter_sym(nm:INT; item:$SEMANTOB) is
   Store semantic object associated with name index `nm' (non-uniquely).

get_sym_curr_scope(nm:INT):$SEMANTOB is
   Return object associated with `nm' in current hash table.

get_sym(nm:INT):$SEMANTOB is
   Return object associated with `nm' in any of the stack of
   hash tables.

enter_new_scope is
   Push a new table and update the list of indices (`scope_indices')
   that gives the current stack of hash tables.

leave_new_scope is
   Pop latest hash table and update the list of indices (`scope_indices')
   that gives the current stack of hash tables.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TEXTFILE is                                                    [class]

   Read-only input file with text file attributes eg line no.
   Returns a stream of characters stripped of <cr>.


Public definitions of class TEXTFILE: 

Inherits from: FILE

lineno:INT;
   Current input line, starts from 1

curr_ch:CHAR;
   Last character being read

error_msg(s:STR) is
   Undocumented.

error_exit(s:STR) is
   Undocumented.

create(nm:STR):SELF_TYPE is
   Open named file for reading 

whitespace(ch:CHAR):BOOL is
   Returns "true" if "ch" is newline, space, backspace etc.

read_next: CHAR is
   Read and return next character from input file

get_token:INT is
   All descendent classes return tokens.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TIMER is                                                       [class]

   Undocumented.


Public definitions of class TIMER: 

u_time:DOUBLE;
   User/System time.

s_time:DOUBLE;
  
   User/System time.

create:TIMER is
   Create a timer object by calling C routine.

c_timer_create(u_time:DOUBLE;s_time:DOUBLE):TIMER is
   Called from C and given all the appropriate timer values.

time_syscall(com:STR):TIMER is
   Returns the timer object for executing the command.

minus_time(t:TIMER):DOUBLE is
   Time difference wrt another TIMER object.

time_spent:DOUBLE is
   Total time spent is user + system time.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TIME_INT is                                                    [class]

   Undocumented.


Public definitions of class TIME_INT: 

Inherits from: INT

ctime:STR is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TIME_VAL is                                                    [class]

   The comments between the shareds indicate the activities between
   the timer values.
   (**) indicates the amount of time used by the child process in
   "system" function call.


Public definitions of class TIME_VAL: 

start_main:TIMER;                                             [shared]
   Undocumented.

rmdir_time:TIMER;                                             [shared]
   (**)

mkdir_time:TIMER;                                             [shared]
   (**)

start_command_read:TIMER;                                     [shared]
   Undocumented.

start_code_read:TIMER;                                        [shared]
   Undocumented.

start_processing:TIMER;                                       [shared]
   Undocumented.

start_semant:TIMER;                                           [shared]
   Undocumented.

start_print:TIMER;                                            [shared]
   Undocumented.

rmfiles_com_time:TIMER;                                       [shared]
   Undocumented.

start_last_stage:TIMER;                                       [shared]
   Undocumented.

cp_com_time:TIMER;                                            [shared]
   (**)

start_make:TIMER;                                             [shared]
   Undocumented.

mk_com_time:TIMER;                                            [shared]
   (**)

mv_com_time:TIMER;                                            [shared]
   (**)

end_main:TIMER;                                               [shared]
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TWOINTS is                                                     [class]

   Undocumented.


Public definitions of class TWOINTS: 

cFileIndex:INT;
   Undocumented.

cLineNum:INT;
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TYPEOB is                                                      [class]

   The parent class from which the others inherit.


Public definitions of class TYPEOB: 

Inherits from: PARSEROB

Inherits from: RESERVED_WORDS

disp_type:$TYPEOB is
   Dispatch type of TYPEOB; only non-null for DISPATCH_TYPEOB

name_str:STR is
   Returns the print form of type

get_key(pl:LIST{INT}; pi:LST_TYPEOB_S):LSTINT_KEY is
   All descendents must compute their own keys

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):$TYPEOB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TYPEOB_S is                                                    [class]

   Represent type information of expression/routine. 


Public definitions of class TYPEOB_S: 

Inherits from: SEMANTOB

inst_ind:INT is
   Index of class for type expression.

inst_cls:CLASSOB_S is
   `CLASSOB_S' object given by this type expression.

is_dispatched:BOOL is
   Type expression is dispatched.

dispatched:$TYPEOB_S is
   Undocumented.

undispatched:$TYPEOB_S is
   Undocumented.

arithtype:BOOL is
   Arithmetic type expression.

int_type_p:BOOL is
   Type expression for `INT' or its descendents.

bool_type_p:BOOL is
   Type expression for `BOOL' or its descendents.

char_type_p:BOOL is
   Type expression for `CHAR' or its descendents.

real_type_p:BOOL is
   Type expression for `REAL' or its descendents.

double_type_p:BOOL is
   Type expression for `DOUBLE' or its descendents.

str_type_p:BOOL is
   Type expression for `STR' or its descendents.

nonptr_p:BOOL is
   Returns "true" if type expression refers to basic types.

resolve_arithtype(tp:$TYPEOB_S):$TYPEOB_S is
   Undocumented.

ctype:INT is
   Returns 1 (ie "ptr") by default

cprint_ctype(outfile:SAT_OUTFILE) is
   Do nothing

array_type_p:BOOL is
   Returns "true" if type expression is a 1-dimensional array.

array2_type_p:BOOL is
   Returns "true" if type expression is a 2-dimensional array.

array3_type_p:BOOL is
   Returns "true" if type expression is a 3-dimensional array.

array4_type_p:BOOL is
   Returns "true" if type expression is a 4-dimensional array.

rettype:INSTANT_TYPEOB_S is
   Return-type of type expression of routine.

paramstype:LST_TYPEOB_S is
   Types of parameters.

conforms_to(tp:$TYPEOB_S):BOOL is
   Each descendent will specify their conformance rules.

param_type_conforms_to(tp:$TYPEOB_S):BOOL is
   Special for paramaterized types.

full_name:STR is
   Each descendent will tell how print to its name.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TYPESPEC_ARGS_EXPROB is                                        [class]

   Class access to references with possibly arguments.


Public definitions of class TYPESPEC_ARGS_EXPROB: 

Inherits from: EXPROB

type_spec:$TYPEOB;
   Undocumented.

feat:INT;
   Undocumented.

args:LST_EXPROB;
   Undocumented.

create(ts:$TYPEOB; f:INT; alst:LST_EXPROB):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):TYPESPEC_ARGS_EXPROB_S is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TYPESPEC_ARGS_EXPROB_S is                                      [class]

   Class access to references. 


Public definitions of class TYPESPEC_ARGS_EXPROB_S: 

Inherits from: EXPROB_S

type_spec:$TYPEOB_S;
   Undocumented.

feat:INT;
   Undocumented.

args:LST_EXPROB_S;
   This is guaranteed to be non-void if created using the "create" routine.

referrent:$SEMANTOB;
   Undocumented.

temp_name_tpchk:INT;
   Undocumented.

temp_ctype_tpchk:INT;
   Temporary variable (and C type of temporary variable) to hold result
   of expression so that the type of the result can be checked (if
   runtime type-checking is requested).

temp_args:ARRAY{INT};
   Undocumented.

temp_args_ctype:ARRAY{INT};
   List of variables to hold temporary variables that will contain
   result of argument evaluation, except for cases without side-
   effect.  (Ref: Implementation of dispatching mechanism in general
   document).  The values are guaranteed to be non-void and have
   the same length as the number of arguments.

has_pre_eval_args:BOOL;
   If this value is false, then any code involving pre-evaluating
   arguments can be avoided.  This is initialized to "false".

printed_times:INT;
   The value is greater than 0 if the runtime type-checking code is already
   generated, ie the code to compute value of the expression is already 
   generated.  This is the number of times this node has been printed; it
   should be less than or equal than the global variable "g_tag".

create(ts:$TYPEOB_S; f:INT; alst:LST_EXPROB_S; ln:INT):SELF_TYPE is
   Undocumented.

sather_code:STR is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

valid_init_expr:BOOL is
   Undocumented.

expr_eval_constant:$CONST_EXPROB_S is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

assignable_p:BOOL is
   A reference to a class feature is assignable only if the
     the feature is a shared.

access_value_only:BOOL is
   Default is to return "false" if we do not know the referrent;
   otherwise, return "true" if the referrent is not a routine. 

cprint_pre_code(outfile:SAT_OUTFILE) is
   Undocumented.

gen_temps:LIST{INT} is
   The type specification cannot be dispatched, so the only source
   of temporaries are the arguments.

get_ext_strs is
   Undocumented.

cont1:INT := 1;                                             [constant]
   Print parameters for "new" (non-array)

cont2:INT := 2;                                             [constant]
   Print parameters for "new" (1-dim array); default may be supplied

cont3:INT := 3;                                             [constant]
   Print parameters for "new" (2-dim array); default may be supplied

cont4:INT := 4;                                             [constant]
   Print parameters for "new" (3-dim array); default may be supplied

cont5:INT := 5;                                             [constant]
   Print parameters for "new" (4-dim array); default may be supplied

cont_cprint_code(outfile:SAT_OUTFILE; cont:INT) is
   Undocumented.

cprint_act_code(outfile:SAT_OUTFILE) is
   Undocumented.

cprint_init_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

WHEN_STMTOB is                                                 [class]

   When clauses in switch statments.


Public definitions of class WHEN_STMTOB: 

Inherits from: STMTOB

exprs:LST_EXPROB;
   List of values to match

then_part:LST_STMTOB;
   Statements to execute otherwise

create(e:LST_EXPROB; t:LST_STMTOB):SELF_TYPE is
   Undocumented.

pcopy(pl:LIST{INT}; pi:LST_TYPEOB_S):WHEN_STMTOB_S is
   The parameters are a list of indices for type parameter
     names and a list of keys for the type instantiations.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

WHEN_STMTOB_S is                                               [class]

   When clauses in switch statments.


Public definitions of class WHEN_STMTOB_S: 

Inherits from: STMTOB_S

exprs:LST_EXPROB_S;
   List of values to match.     

then_part:LST_STMTOB_S;
   Statements to execute otherwise
   The values of "exprs" and "then_part" are guaranteed to be non-void
     even though the list may be empty.

const_exprs:LST_EXPROB_S;
   "const_exprs[i]" contains the constant expression for the 
   correponding "exprs[i]"

all_consts_p:BOOL;
   "true" if all the expressions are integers and constants.  Both are
   computed in "semant"

create(e:LST_EXPROB_S; t:LST_STMTOB_S; ln:INT):SELF_TYPE is
   Undocumented.

dup:SELF_TYPE is
   Undocumented.

resolve_predef_types(index:INT) is
   Undocumented.

typechk_exprs(tp:$TYPEOB_S):BOOL is
   Undocumented.

semant(symtab:SYMBOL_TABLE) is
   Undocumented.

gen_temps:LIST{INT} is
   Undocumented.

gen_goto_tags(loop_stmt:LOOP_STMTOB_S) is
   Undocumented.

validate_dispatches_and_get_ext_strs is
   Undocumented.

cprint_code(outfile:SAT_OUTFILE) is
   WHEN_STMOB_S's are under the control of SWITCH_STMTOB_S, and
   so will either print themselves as case-statements or if-statements.
   When asked to printed out as case-statements, only those expressions
   with integer constants are printed; otherwise, the printing depends
   on SWITCH_STMTOB_S.

cprint_case_code(outfile:SAT_OUTFILE) is
   Undocumented.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

