class SIG < $STR, $HASH
****
The type signature of a routine or iter.


Flattened version is here

Ancestors
$HASH $IS_EQ $STR



Public


Readable Attributes
attr am_created:BOOL;
**** Whether AM form output has occured yet.
attr args:ARRAY{ARG};
**** Arguments, void if none. returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
attr builtin_info:CONFIG_ROUT;
**** configuration info for builtin this field
attr hot:ARRAY{BOOL};
**** True for "!" iter args, void if none. returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
attr is_forked:BOOL;
**** Used by pSather
attr name:IDENT;
**** The name of the routine or iter. returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
attr needs_export:BOOL;
**** used by pSather
attr needs_import:BOOL;
**** Used by pSather
attr ret:$TP;
**** Return type, void if none. returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
attr returns_same:BOOL;
**** True for abstract class routines returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
attr src_tparams: ARRAY{$TP};
**** Typeparameters in the original declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
attr srcsig:SAME;
**** The signature of this routine or iter in the class it originally came from. Only set after the function has been optimized.
attr str:STR;
**** String representation returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
attr tp:$TP;
**** The type to which the signature belongs. returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.

Writable Attributes
attr am_created:BOOL;
**** Whether AM form output has occured yet.
attr builtin_info:CONFIG_ROUT;
**** configuration info for builtin this field
attr is_forked:BOOL;
**** Used by pSather
attr needs_export:BOOL;
**** used by pSather
attr needs_import:BOOL;
**** Used by pSather
attr src_tparams: ARRAY{$TP};
**** Typeparameters in the original declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
attr srcsig:SAME;
**** The signature of this routine or iter in the class it originally came from. Only set after the function has been optimized.

Writable Shareds
shared sigs:FMAP{STR,SIG};

Features
attr_reader_sig(as:AS_ATTR_DEF, nm:IDENT, srcparams: ARRAY{$TP},
attr_writer_sig(as:AS_ATTR_DEF, nm:IDENT, srcparams: ARRAY{$TP},
bound_iter_call(tp:TP_ITER):SAME
**** The signature of the "call!" routine for the bound iter type `tp'.
bound_routine_call(tp:TP_ROUT):SAME
**** The signature of the "call" routine for the bound routine type `tp'.
conflicts_with(s:SAME):BOOL
**** True if self conflicts with `s'. This is a symmetric relationship. It means that they: 1) Have the same name, 2) Have the same the number of args, 3) There is no argument that they declare as having different
____types_and_neither_type_declaration_is_abstract,_bound.
4) Both have or do not have a return value. Ignores `tp'. Conflicts are independent of argument modes
conforms_to(s:SAME):BOOL
**** True if self conforms to `s' so as to satisfy the inheritance rule. This means they: 1) Have the same name, 2) Have the same the number of args, 3) If iters, then the same args are declared `once', 4) Both have or do not have a return value, 5) The mode of each argument is the same 6) for any in or once arguments, the type in `s' is the subtype in of the type in self;
____for_any_`inout'_arguments,_the_type_in_self_is_the_same_as_in_`s';
____for_any_`out'_arguments,the_type_in_self_is_a_subtype_of_the_type_in
____s_if_it_has_one,_the_return_type_of_self_is_a_subtype_of_the_return
____type_of_`s'
7) For the resulttype, the type in self is a subtype of the type in
____s_if_it_has_one._The_resulttype_has_to_be_SAME_if_it_is_SAME_in
____s.
Ignores `tp'.
const_reader_sig(as:AS_CONST_DEF, nm:IDENT, srcparams: ARRAY{$TP},
create(ntp:$TP,tparr:ARRAY{$TP},nname:IDENT,nargs:ARRAY{ARG},
create(ntp:$TP,tparr:ARRAY{$TP},nname:IDENT,nargs:ARRAY{ARG},
get_se_context(prog:PROG):SE_CONTEXT
has_ret:BOOL
**** True if there is a return value.
hash:INT
**** this can be done because of unique sig's
is_attr_writer_sig:BOOL
**** True if self could be a writer signature for an object attribute. For ref it has a single in argument and no return value, for val it has a single in arg and a return value.
is_base_aref_type(tp:$TP):BOOL
**** True if `tp' has an include path to AREF{CHAR}, AREF{INT}, AREF{FLT}, AREF{FLTD}, AREF{FLTX}, AREF{FLTDX}, or AREF{EXT_OB}. or AREF{one of external but recognized types}
is_base_type(tp:$TP):BOOL
**** True if `tp' is BOOL, CHAR, INT, FLT, FLTD, FLTX, FLTDX, or EXT_OB. Or one of external but recognized types
is_builtin:BOOL
**** true for builtin iters and funcs.
is_builtin_iter:BOOL
**** True if self is an iter.
is_builtin_routine:BOOL
**** True if self is an iter.
is_eq(s:SAME):BOOL
**** See below. This should be faster.
is_eq(s: $OB): BOOL
**** Equality change
is_eq_but_tp(s:SAME):BOOL
**** True if self is equal to `s' except for the `tp' field. This is a symmetric relationship. It means that they: 1) Have the same name, 2) Have the same the number of args, 3) Each argument type of `s' *is equal* to the corresponding
____argument_in_self,
4) If iters, then the same args are declared `hot', (fix Boris) 5) Modes of args are the same 6) Both have or do not have a return value. 7) The return types must be equal, if present.
is_invariant:BOOL
**** True if self is the signature "invariant:BOOL".
is_iter:BOOL
**** True if self is an iter.
is_legal_ext_abs:BOOL
**** True if this signature is legal for an abstract routine in an external class.
is_legal_ext_bod:BOOL
**** True if this signature is legal for a routine with a body in an external class.
is_neq(e:SAME):BOOL
is_neq(e:$OB):BOOL
is_reader_sig:BOOL
**** True if self has a return value but no arguments.
is_routine:BOOL
is_shared_writer_sig:BOOL
**** True if self could be a writer signature for a shared attribute. It has a in single in argument and no return value.
is_writer_for(s:SAME):BOOL
**** True if self is the writer signature corresponding to the reader signature `s'. This means that: 1) self and `s' have the same name. 2) self has 1 (in) arg, `s' has none. 3) For value types self has a return value of type self,
____otherwise_it_has_no_return_value,_`s'_has_1_.
4) The type of self's arg is equal to `s's return type.
num_args:INT
**** The number of arguments in this signature.
old_is_eq(s:SAME):BOOL
**** True if self is equal to `s'. This is a symmetric relationship. It means that they: 1) Have the same name, 2) Have the same the number of args, 3) Each argument type of `s' *is equal* to the corresponding
____argument_in_self,
4) If iters, then the same args are declared `hot', 5) Both have or do not have a return value. 6) The return types must be equal, if present. 7) Has an equal `tp'.
prog:PROG
**** The program this signature belongs to.
rout_sig(as:AS_ROUT_DEF, nm:IDENT, srcparams: ARRAY{$TP}, con:TP_CONTEXT)
set_se_context(sec:SE_CONTEXT)
shared_reader_sig(as:AS_SHARED_DEF, nm:IDENT, srcparams: ARRAY{$TP},
shared_writer_sig(as:AS_SHARED_DEF, nm:IDENT, srcparams: ARRAY{$TP},
with_new_type(t:$TP):SAME
**** A new signature, the same as self, but with the new type `t'.


Private

attr args:ARRAY{ARG};
**** Arguments, void if none. returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
compute_str
**** Compute the string representation of self. Uses no whitespace, eg. "FOO::foo!(A!,outB{C}):D". Equality of the string representation must occur if and only if two SIGs are really the same object (including arg modes).
attr got_builtin_info:BOOL;
**** see rout_sig for infos about this field
attr got_builtin_info:BOOL;
**** see rout_sig for infos about this field
attr hot:ARRAY{BOOL};
**** True for "!" iter args, void if none. returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
make_unique:SAME
attr name:IDENT;
**** The name of the routine or iter. returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
attr ret:$TP;
**** Return type, void if none. returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
attr returns_same:BOOL;
**** True for abstract class routines returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
attr se_context:SE_CONTEXT;
**** the side effects of this signature
attr se_context:SE_CONTEXT;
**** the side effects of this signature
shared sigs:FMAP{STR,SIG};
attr str:STR;
**** String representation returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.
attr tp:$TP;
**** The type to which the signature belongs. returning SAME. *H* declaration of the routine. Needed in the backend. this should go away in the class it originally came from. Only set after the function has been optimized.