class GENERATE_AM < $GENERATE_AM
****
This phase does a code walk from main and generates the AM form It causes errors for failures of type checking, name clashes, etc. It is interleaved in time with the back-end for each routine generated.


Flattened version is here

Ancestors
$GENERATE_AM CS_COMPONENT



Public


Readable Attributes
attr global_tbl:GLOBAL_TBL;
attr only_check: BOOL;
**** Holger
attr optimize:BOOL;
****
attr sig_inprocout:FSET{SIG};
**** Ivin: Signatures of routines that have been called recursively.
attr sig_list:FLIST{SIG};
**** Signatures to still consider outputting.
attr sig_recursive:FSET{SIG};

Writable Attributes
attr global_tbl:GLOBAL_TBL;
attr only_check: BOOL;
**** Holger
attr optimize:BOOL;
****
attr sig_inprocout:FSET{SIG};
**** Ivin: Signatures of routines that have been called recursively.
attr sig_list:FLIST{SIG};
**** Signatures to still consider outputting.
attr sig_recursive:FSET{SIG};

Features
create(p:PROG):SAME
generate_am
**** Get optimize attr and whether code should be generated.
output_abs_sig(s:SIG)
**** Do the output for the abstract call `s'.
output_externals_with_bodies
output_sig(s:SIG)
**** Transform and output the signature `s' if it hasn't already been done. Put the routines and iters that it calls on `sig_list'. Now searches depth first on routines, so these don't get put on the list. Puts information in the inline table for inlining.