class IFC < $STR
****
A type interface.


Flattened version is here

Ancestors
$STR SELECT_SIG



Public


Readable Attributes
attr sigs:SIG_TBL;
**** The interface signatures.
attr tp:$TP;
**** The type whose interface this is.

Writable Attributes
attr sigs:SIG_TBL;
**** The interface signatures.
attr tp:$TP;
**** The type whose interface this is.

Readonly Shareds
shared abs_cur:FSET{TUP{IDENT,INT}};
**** The set of abstract class names and number of parameters which are currently having their interfaces worked out.

Writable Shareds
shared abs_cur:FSET{TUP{IDENT,INT}};
**** The set of abstract class names and number of parameters which are currently having their interfaces worked out.

Features
conflicting_sigs:TUP{SIG,SIG}
**** If self has a conflict, return two conflicting signatures. Otherwise, return #(void,void).
conforms_to(i:IFC):BOOL
**** True if self conforms to `i'. This means that for every signature in `i' there is a signature in self which conforms to it.
create(sigs:SIG_TBL, tp:$TP):SAME
**** An interface with the signatures `sigs' for the type `tp'. Never gives void.
cycle_err
**** Print an error message about a cycle of include type names.
ifc_for_class(t:TP_CLASS):SAME
ifc_for_iter(t:TP_ITER):SAME
**** The interface of a bound iter type.
ifc_for_rout(t:TP_ROUT):SAME
**** The interface of a bound routine type.
is_conflict_free:BOOL
**** True if self is free of conflicting signatures.
nonconforming_sig(i:IFC):SIG
**** If self conforms to `i' then return void, otherwise return a signature in `i' for which there is no conforming signature in self.
nonconforming_sig_list(i: IFC): FLIST{SIG}
**** Version of nonconforming_sig that returns all the nonconforming signatures for better error reporting and so generates all the non-conforming messages at one go, rather than one at a time
prog:PROG
**** The program this interface belongs to.
show
**** Print the interface on OUT.
sig_conforming_to(s:SIG):SIG
**** A signature from the interface which conforms to `s' or void if none. This will be unique if the interface has no conflicts.
sig_equal_to(s:SIG):SIG
**** A signature from self which is equal to `s' if present, void if not.
sig_for_call(c:CALL_SIG):SIG
**** A signature from the interface to which the call `c' conforms. Void if none. Reports an error if the call is ambiguous or missing (assumes that "err_loc" has been set). If it is unknown whether there is a return value, then choose the signature without one in case of conflict.
str:STR