class TP_TBL
****
A table of types in a program. This ensures that each type is only represented by a single object so that object equality can be used to test for type equality.


Flattened version is here



Public


Readable Attributes
attr class_tbl:TP_CLASS_TBL;
**** Types defined by classes.
attr included_classes:TP_CLASS_TBL;
**** Types defined by include clauses.
attr iter_tbl:TP_ITER_TBL;
**** Bound iter types.
attr prog:PROG;
**** The program this belongs to.
attr rout_tbl:TP_ROUT_TBL;
**** Bound routine types.

Writable Attributes
attr class_tbl:TP_CLASS_TBL;
**** Types defined by classes.
attr included_classes:TP_CLASS_TBL;
**** Types defined by include clauses.
attr iter_tbl:TP_ITER_TBL;
**** Bound iter types.
attr prog:PROG;
**** The program this belongs to.
attr rout_tbl:TP_ROUT_TBL;
**** Bound routine types.

Features
create(prog:PROG):SAME
**** A table of type for the program `prog'.
delete(t:$TP)
**** Delete the type `t' from the table.
insert(t:$TP)
**** Insert the type `t' into the table.
test(t:$TP):BOOL
**** True if the type `t' is in the table.
tp_class_for(name:IDENT, params:ARRAY{$TP}): TP_CLASS
tp_class_for(name:IDENT, params:ARRAY{$TP}, memorize:BOOL ):TP_CLASS
**** Return the class type object for the name `name' and the parameters (if any) `params'. If this has already been accessed, return the old object, otherwise create a new one using the array `params'.
tp_class_for(s:STR):TP_CLASS
tp_iter_for(args:ARRAY{ARG}, hot:ARRAY{BOOL}, ret:$TP):TP_ITER
**** Return the bound iter type object for the argument types `args' (if any), marked according to `hot' (if any) and with return type `ret' (if any). If this has already been accessed, return the old object, otherwise create a new one using the arrays `args' and `hot'.
tp_rout_for(args:ARRAY{ARG}, ret:$TP):TP_ROUT
**** Return the bound routine type object for the argument `args' (if any) and the return type `ret' (if any). If this has already been accessed, return the old object, otherwise create a new one using the array `args'.


Private

tp_class_for(s:STR,inout i:INT):TP_CLASS
**** converts a string representation of a type to tp. reads only as many characters as needed. Returns the number of characters in i, and starts to read the string at pos i