mjc

org.multijava.mjc
Class JCompilationUnit

java.lang.Object
  extended byorg.multijava.util.Utils
      extended byorg.multijava.util.compiler.Phylum
          extended byorg.multijava.mjc.JPhylum
              extended byorg.multijava.mjc.JCompilationUnit
All Implemented Interfaces:
Cloneable, Comparable, CompilerPassEnterable, Constants, Constants, JCompilationUnitType, PhylumType

public class JCompilationUnit
extends JPhylum
implements Constants, JCompilationUnitType

This class represents a single Java compilation unit (typically a file in a file-based compiler like this) in the AST. The production for a compilation unit is the main entry point in Java parser grammar.


Field Summary
private  Hashtable allLoadedClasses
          Maps from identifiers (of type String) to class type singletons (of type CClassType).
private  Main cachedCompiler
           
private static Iterator EMPTY_ITERATOR
           
private  CCompilationUnit export
          Provides name space management, e.g., resolving references to external types.
private  String fileIdent
           
private  MJGenericFunctionDecl[] gfDeclarations
          Stores references to the collections of non-private generic functions declared in this compilation unit.
private  JClassOrGFImportType[] importedClasses
           
private  JClassOrGFImportType[] importedGFs
           
private  JPackageImportType[] importedPackages
           
private  ArrayList importedUnits
           
private  CGFCollectionMap inScopeGenFuncMap
          Maps from identifiers to sets of external generic function collections that are in scope for this compilation unit.
private  JPackageName packageName
           
private static HashSet PRIMITIVE_TYPES_SET
           
private  MJGenericFunctionDecl[] privateGFDeclarations
          Stores references to the collections of private generic functions declared in this compilation unit.
private  ArrayList tlMethods
          AST subtrees for the augmenting method declarations.
private  JTypeDeclarationType[] typeDeclarations
           
private static Comparator VGF_COMPARATOR
          Compares two CMethod objects based on identifiers and parameter types, but only comparing these alphabetically.
 
Fields inherited from class org.multijava.mjc.JPhylum
EMPTY
 
Fields inherited from class org.multijava.util.compiler.Phylum
 
Fields inherited from class org.multijava.util.Utils
DBG_LEVEL_HIGH, DBG_LEVEL_LOW, DBG_LEVEL_NO
 
Fields inherited from interface org.multijava.mjc.Constants
ACC_MODIFIER_FLAGS_MASK, ACC_NON_NULL, ACC_NON_NULL_BY_DEFAULT, ACC_NULLABLE, ACC_NULLABLE_BY_DEFAULT, ACC_PURE, ACCESS_FLAG_ARRAY, ACCESS_FLAG_NAMES, AMID_JAVA_MATH, AMID_MAX, AMID_SAFE_MATH, CMP_VERSION, IMPLICITLY_NON_NULL, JAV_ASSERTION_ERROR, JAV_CLASS, JAV_CLASSLOADER, JAV_CLASSNOTFOUND_EXCEPTION, JAV_CLONE, JAV_CLONEABLE, JAV_CONSTRUCTOR, JAV_ERROR, JAV_EXCEPTION, JAV_INIT, JAV_LENGTH, JAV_NAME_SEPARATOR, JAV_NOCLASSDEFFOUND_ERROR, JAV_OBJECT, JAV_OUTER_THIS, JAV_RMJ_RUNTIME_EXCEPTION, JAV_RUNTIME, JAV_RUNTIME_EXCEPTION, JAV_SERIALIZABLE, JAV_STATIC_INIT, JAV_STRING, JAV_STRINGBUFFER, JAV_SUPER, JAV_THIS, JAV_THROWABLE, MJ_ANCHOR, NULLITY_MODS, OPE_BAND, OPE_BNOT, OPE_BOR, OPE_BSR, OPE_BXOR, OPE_EQ, OPE_GE, OPE_GT, OPE_LAND, OPE_LE, OPE_LNOT, OPE_LOR, OPE_LT, OPE_MINUS, OPE_NE, OPE_PERCENT, OPE_PLUS, OPE_POSTDEC, OPE_POSTINC, OPE_PREDEC, OPE_PREINC, OPE_SIMPLE, OPE_SL, OPE_SLASH, OPE_SR, OPE_STAR, TID_ARRAY, TID_BOOLEAN, TID_BYTE, TID_CHAR, TID_CLASS, TID_DOUBLE, TID_FLOAT, TID_INT, TID_LONG, TID_MAX, TID_SHORT, TID_VOID, UNIV_ARRAY_TMP, UNIV_TMP
 
Fields inherited from interface org.multijava.util.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VOLATILE, ATT_ANCHOR, ATT_BRIDGE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_DISPATCHER, ATT_EXCEPTIONS, ATT_GENERIC, ATT_GENERIC_FUNCTIONS, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_MM_BODY, ATT_REDIRECTOR, ATT_RMJ_GLUE, ATT_RMJ_SIGNATURE, ATT_RUNTIME_VISIBLE_ANNOTATIONS, ATT_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATT_SIGNATURE, ATT_SOURCEFILE, ATT_SYNTHETIC, ATT_UNIVERSE_FIELD, ATT_UNIVERSE_METHOD, ATT_UNIVERSE_VERSION, CST_CLASS, CST_DOUBLE, CST_FIELD, CST_FLOAT, CST_INTEGER, CST_INTERFACEMETHOD, CST_LONG, CST_METHOD, CST_NAMEANDTYPE, CST_STRING, CST_UTF8, ENV_DEBUG_MODE, ENV_USE_CACHE, JAVA_MAGIC, JAVA_MAJOR, JAVA_MINOR, MAX_CODE_PER_METHOD, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_dup_x1, opc_dup_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc2_w, opc_ldc_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_wide, opc_xxxunusedxxx, POO_ASCII_CONSTANT, POO_CLASS_CONSTANT, POO_DOUBLE_CONSTANT, POO_FLOAT_CONSTANT, POO_INTEGER_CONSTANT, POO_LONG_CONSTANT, POO_NAT_CONSTANT, POO_REF_CONSTANT, POO_STRING_CONSTANT, TYP_ADDRESS, TYP_DOUBLE, TYP_FLOAT, TYP_INT, TYP_LONG, TYP_REFERENCE, TYP_VOID
 
Constructor Summary
JCompilationUnit(TokenReference where, JPackageName packageName, CCompilationUnit export, JPackageImportType[] importedPackages, ArrayList importedUnits, JTypeDeclarationType[] typeDeclarations, ArrayList tlMethods)
          Constructs a CompilationUnit with the specified top level context
 
Method Summary
 void accept(MjcVisitor p)
          Accepts the specified visitor
 CSourceClass[] allTypeSignatures()
          Returns the CSourceClass objects representing the type signatures of the types declared in this compilatoin unit and as nested types.
 void cachePassParameters(Main compiler, Destination destination)
          Caches the arguments for the compiler passes.
private  CMethod[] calcVisibleGenericFunctions()
          Finds the top methods of every generic function visible in this compilation unit.
 void checkInitializers()
          Invokes the checkInitializers method of the implementing class using previously cached arguments.
 void checkInitializers(Main compiler)
          Checks the static initializers created during the checkInterface pass and performs some other checks that can be performed simply before full blown typechecking.
 void checkInterface()
          Invokes the checkInterface method of the implementing class using previously cached arguments.
 void checkInterface(Main compiler)
          Checks the basic interfaces to make sure things generally look OK.
private  void clonePrivateAnchorsAndAddTo(Main compiler, JTypeDeclarationType parent, boolean genInterface)
          Clones every private generic function anchor and adds each as a child of the given parent node.
 int compareTo(Object o)
          Compares this to a given object.
 CCompilationUnitContextType createCompilationUnitContext(Main compiler, CCompilationUnit cunit)
           
 boolean declaresGF(String qualifiedName)
          Returns true iff this compilation unit contains a declaration for a generic function with the given fully qualified name.
 boolean declaresType(String qualifiedName)
          Returns true iff this compilation unit contains a declaration for a top-level type with the given fully qualified name.
 File file()
          Returns the file associated with this compilation unit.
 String fileNameIdent()
          Returns the Java identifier associated with the name of the file containing this compilation unit.
 MJGenericFunctionDecl[] gfDeclarations()
           
private  void groupByAnchor(Main compiler, CCompilationUnitContextType context)
          Groups top-level methods into collections (of type MJGenericFunctionDecl) that correspond to the anchor classes.
 JClassOrGFImportType[] importedClasses()
           
 JClassOrGFImportType[] importedGFs()
           
 JPackageImportType[] importedPackages()
           
 JClassOrGFImportType[] importedUnits()
          Returns an array of the class and generic function imports for this compilation unit.
 ArrayList importedUnitsAsArrayList()
           
private  void makeAndStoreAnchorDecl(ArrayList anchorMates, String id, boolean priv, ArrayList anchors, ArrayList privateAnchors)
          Utility method generates a MJGenericFunctionDecl anchor for the given methods and stores it in the appropriate anchor collection.
private static Iterator makeIterator(ArrayList[] l_f)
          Generates an iterator for looping through the cartesian cross-product of the sets of types.
private  String matchPackageName(String qualifiedName)
          If qualifiedName begins with the package name of this compilation unit, then returns the remainder of qualifiedName; otherwise returns null.
 JPackageName packageName()
           
 String packageNameAsString()
           
 void preprocessDependencies()
          Performs preliminary processing on compilation units and types.
 void preprocessDependencies(Main compiler)
          Performs preliminary processing on compilation units and types.
 void resolveSpecializers()
          Resolves value specializer expressions to the compile-time constants they represent.
 void resolveSpecializers(Main compiler)
          Resolves value specializer expressions to the compile-time constants they represent.
 void resolveTopMethods()
          Finds the top method of every declared method.
private  void separateImports()
          Separates the import statements into those for classes and those for generic functions.
 void setImportedPackages(JPackageImportType[] packages)
           
 void setPackage(JPackageName n)
           
 ArrayList tlMethods()
          Returns the AST subtrees for the augmenting method declarations.
 void translateMJ()
          Invokes the translateMJ method of the implementing class using previously cached arguments.
 void translateMJ(Main compiler)
          Refactors this to include dispatchers for multimethods and other code necessary for running MultiJava code on a standard JVM.
 void typecheck()
          Invokes the typecheck method of the implementing class using previously cached arguments.
 void typecheck(Main compiler)
          Typechecks this compilation unit.
 JTypeDeclarationType[] typeDeclarations()
           
 
Methods inherited from class org.multijava.mjc.JPhylum
check, check, check, check, fail, fail, fail, warn, warn, warn, warn
 
Methods inherited from class org.multijava.util.compiler.Phylum
getTokenReference, setTokenReference
 
Methods inherited from class org.multijava.util.Utils
assertTrue, assertTrue, combineArrays, escapeString, escapeString, fail, fail, getFilePath, hasFlag, hasOtherFlags, parsePathParts, relativePathTo, splitQualifiedName, splitQualifiedName, stripJavaModifiers, stripNonJavaModifiers, stripPrivateModifier, unescapeString, vectorToArray, vectorToIntArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.multijava.mjc.CompilerPassEnterable
getTokenReference
 

Field Detail

cachedCompiler

private Main cachedCompiler

packageName

private JPackageName packageName

importedClasses

private JClassOrGFImportType[] importedClasses

importedGFs

private JClassOrGFImportType[] importedGFs

importedUnits

private ArrayList importedUnits

importedPackages

private JPackageImportType[] importedPackages

typeDeclarations

private JTypeDeclarationType[] typeDeclarations

fileIdent

private String fileIdent

tlMethods

private ArrayList tlMethods
AST subtrees for the augmenting method declarations. Each element of the list is of type MJTopLevelMethodDeclaration


privateGFDeclarations

private MJGenericFunctionDecl[] privateGFDeclarations
Stores references to the collections of private generic functions declared in this compilation unit.


gfDeclarations

private MJGenericFunctionDecl[] gfDeclarations
Stores references to the collections of non-private generic functions declared in this compilation unit.


allLoadedClasses

private Hashtable allLoadedClasses
Maps from identifiers (of type String) to class type singletons (of type CClassType). Aliased in CCompilationUnit.

See Also:
CClassType, CCompilationUnit, CCompilationUnit.loadedClasses

inScopeGenFuncMap

private CGFCollectionMap inScopeGenFuncMap
Maps from identifiers to sets of external generic function collections that are in scope for this compilation unit. Single-gf-import-on-demand clauses and local external generic function declarations are loaded as early as possible. Generic functions that are in scope because of the package declaration or import-on-demand clauses are added to the map lazily via alias in CCompilationUnit.

See Also:
CCompilationUnit.loadedGFCollections

export

private final CCompilationUnit export
Provides name space management, e.g., resolving references to external types.


PRIMITIVE_TYPES_SET

private static HashSet PRIMITIVE_TYPES_SET

EMPTY_ITERATOR

private static final Iterator EMPTY_ITERATOR

VGF_COMPARATOR

private static final Comparator VGF_COMPARATOR
Compares two CMethod objects based on identifiers and parameter types, but only comparing these alphabetically. This is useful for ensuring consistency of output, but not for much else.

Constructor Detail

JCompilationUnit

public JCompilationUnit(TokenReference where,
                        JPackageName packageName,
                        CCompilationUnit export,
                        JPackageImportType[] importedPackages,
                        ArrayList importedUnits,
                        JTypeDeclarationType[] typeDeclarations,
                        ArrayList tlMethods)
Constructs a CompilationUnit with the specified top level context

Parameters:
where - the position of this token
packageName - the package to which this c.u. belongs
importedPackages - the packages imported by this c.u.
importedUnits - the classes and external members imported by this compilation unit
typeDeclarations - the classes and interfaces declared in this c.u.
tlMethods - the MultiJava top-level declarations in this c.u.
Method Detail

separateImports

private void separateImports()
                      throws PositionedError
Separates the import statements into those for classes and those for generic functions. Assigns to importedClasses and importedGFs.

Throws:
PositionedError

packageNameAsString

public String packageNameAsString()
Specified by:
packageNameAsString in interface JCompilationUnitType
Returns:
the package name of this compilation unit

file

public File file()
Returns the file associated with this compilation unit.

Specified by:
file in interface JCompilationUnitType

fileNameIdent

public String fileNameIdent()
Returns the Java identifier associated with the name of the file containing this compilation unit. For example, if the file is named "typecheck.java" then this method returns "typecheck".

Specified by:
fileNameIdent in interface JCompilationUnitType
Returns:
the Java identifier associated with the file containing this

packageName

public JPackageName packageName()
Specified by:
packageName in interface JCompilationUnitType

setPackage

public void setPackage(JPackageName n)

importedPackages

public JPackageImportType[] importedPackages()
Specified by:
importedPackages in interface JCompilationUnitType

setImportedPackages

public void setImportedPackages(JPackageImportType[] packages)

importedClasses

public JClassOrGFImportType[] importedClasses()
Specified by:
importedClasses in interface JCompilationUnitType

typeDeclarations

public JTypeDeclarationType[] typeDeclarations()
Specified by:
typeDeclarations in interface JCompilationUnitType

gfDeclarations

public MJGenericFunctionDecl[] gfDeclarations()
Specified by:
gfDeclarations in interface JCompilationUnitType

allTypeSignatures

public CSourceClass[] allTypeSignatures()
Returns the CSourceClass objects representing the type signatures of the types declared in this compilatoin unit and as nested types.

Specified by:
allTypeSignatures in interface JCompilationUnitType

declaresType

public boolean declaresType(String qualifiedName)
Returns true iff this compilation unit contains a declaration for a top-level type with the given fully qualified name.

Specified by:
declaresType in interface JCompilationUnitType
Parameters:
qualifiedName - a fully qualified name with parts separated by '/' not '.'

declaresGF

public boolean declaresGF(String qualifiedName)
Returns true iff this compilation unit contains a declaration for a generic function with the given fully qualified name.

Specified by:
declaresGF in interface JCompilationUnitType
Parameters:
qualifiedName - a fully qualified name with parts separated by '/' not '.'

matchPackageName

private String matchPackageName(String qualifiedName)
If qualifiedName begins with the package name of this compilation unit, then returns the remainder of qualifiedName; otherwise returns null.


tlMethods

public ArrayList tlMethods()
Returns the AST subtrees for the augmenting method declarations. Each element of the list is of type MJTopLevelMethodDeclaration

Specified by:
tlMethods in interface JCompilationUnitType

importedUnits

public JClassOrGFImportType[] importedUnits()
Returns an array of the class and generic function imports for this compilation unit. Typically code should use importedClasses or importedGFs instead. This method is available as a testing harness since the other two methods report empty results until after the preprocessDependencies pass.

Specified by:
importedUnits in interface JCompilationUnitType

importedUnitsAsArrayList

public ArrayList importedUnitsAsArrayList()

importedGFs

public JClassOrGFImportType[] importedGFs()
Specified by:
importedGFs in interface JCompilationUnitType

createCompilationUnitContext

public CCompilationUnitContextType createCompilationUnitContext(Main compiler,
                                                                CCompilationUnit cunit)

preprocessDependencies

public void preprocessDependencies(Main compiler)
                            throws PositionedError
Performs preliminary processing on compilation units and types. Processes type imports so external methods' receiver types can be analyzed and supertypes can be resolved. Groups external methods by name, corresponding to the anchor classes that will eventually be generated. Mutates the name space management in CTopLevel to record a CGenericFunctionCollection singleton for each anchor class.

Specified by:
preprocessDependencies in interface JCompilationUnitType
Throws:
PositionedError

groupByAnchor

private void groupByAnchor(Main compiler,
                           CCompilationUnitContextType context)
                    throws PositionedError
Groups top-level methods into collections (of type MJGenericFunctionDecl) that correspond to the anchor classes.

Throws:
PositionedError
See Also:
MJGenericFunctionDecl

makeAndStoreAnchorDecl

private void makeAndStoreAnchorDecl(ArrayList anchorMates,
                                    String id,
                                    boolean priv,
                                    ArrayList anchors,
                                    ArrayList privateAnchors)
Utility method generates a MJGenericFunctionDecl anchor for the given methods and stores it in the appropriate anchor collection.

Parameters:
anchorMates - the method declarations
id - the shared identifier of the methods
priv - indicates that all the methods are private
anchors - non-private anchors declared in this
privateAnchors - private anchors declared in this

clonePrivateAnchorsAndAddTo

private void clonePrivateAnchorsAndAddTo(Main compiler,
                                         JTypeDeclarationType parent,
                                         boolean genInterface)
Clones every private generic function anchor and adds each as a child of the given parent node.

Parameters:
parent - the AST node to add the private generic function anchor AST to
genInterface - if true then generate the interface for the cloned anchors

checkInterface

public void checkInterface(Main compiler)
                    throws PositionedError
Checks the basic interfaces to make sure things generally look OK. This pass gathers information about the type signatures of everything (imported generic functions, classes being compiled, methods, fields, etc...) needed for the later passes. This information is stored in a CCompilationUnit instance and instances of CMember that are bound to the AST. Also adds things like the default constructor and common initializer methods (which group all field initializers and initializer blocks) to the AST.

Specified by:
checkInterface in interface JCompilationUnitType
Throws:
PositionedError - an error with reference to the source file

checkInitializers

public void checkInitializers(Main compiler)
                       throws PositionedError
Checks the static initializers created during the checkInterface pass and performs some other checks that can be performed simply before full blown typechecking. Among these other checks are those for appropriateness of subclassing, such as inheritance circularities and "reimplementation" of interfaces.

Specified by:
checkInitializers in interface JCompilationUnitType
Parameters:
compiler - the compiler that is calling (passed down through the AST via CContextType subtypes and used for error reporting)
Throws:
PositionedError - if check fails

resolveSpecializers

public void resolveSpecializers(Main compiler)
                         throws PositionedError
Resolves value specializer expressions to the compile-time constants they represent. Must come after the checkInitializers phase.

Parameters:
compiler - the compiler that is calling (passed down through the AST via CContextType subtypes and used for error reporting)
Throws:
PositionedError

resolveTopMethods

public void resolveTopMethods()
                       throws PositionedError
Finds the top method of every declared method. Called after the resolveSpecializers pass. This cannot be done before then because the external generic function mappings are not complete until the end of the checkInterface pass and the constant value specializers are not known until after the resolveSpecializers pass. This must be done before the typecheck pass so that all specialized argument positions for generic functions are known for ambiguity checking.

Specified by:
resolveTopMethods in interface JCompilationUnitType
Throws:
PositionedError

typecheck

public void typecheck(Main compiler)
               throws PositionedError
Typechecks this compilation unit.

Specified by:
typecheck in interface JCompilationUnitType
Parameters:
compiler - the compiler that is calling
Throws:
PositionedError - if a check fails that we cannot recover from

calcVisibleGenericFunctions

private CMethod[] calcVisibleGenericFunctions()
                                       throws PositionedError
Finds the top methods of every generic function visible in this compilation unit. Works by building a set, adding the top method of every visible method from export.visibleMethods(). Also calculates which arguments of the generic function are specialized on in this compilation. The visible generic functions are stored in visibleGenericFunctions. Each top method stores a bit set indicating which arguments are specialized for its generic function.

Throws:
PositionedError - if a top method cannot be found

makeIterator

private static Iterator makeIterator(ArrayList[] l_f)
Generates an iterator for looping through the cartesian cross-product of the sets of types.

Parameters:
l_f - each element should be a set of CTypes
Returns:
an iterator

accept

public void accept(MjcVisitor p)
Accepts the specified visitor

Specified by:
accept in interface JCompilationUnitType
Parameters:
p - the visitor

translateMJ

public void translateMJ(Main compiler)
Refactors this to include dispatchers for multimethods and other code necessary for running MultiJava code on a standard JVM.

Specified by:
translateMJ in interface JCompilationUnitType

compareTo

public int compareTo(Object o)
              throws ClassCastException
Compares this to a given object.

also
ensures (* \result == lexically ordered according to the file name 
without the suffix *);
also
requires o != null && !(o instanceof JCompilationUnit);
signals_only ClassCastException;
 

Specified by:
compareTo in interface Comparable
Parameters:
o - an Object value to compare to this
Returns:
based on a lexical ordering according to the type name
Throws:
ClassCastException - if o is incomparable to this

cachePassParameters

public void cachePassParameters(Main compiler,
                                Destination destination)
Caches the arguments for the compiler passes.

 also
 ensures arePassParametersCached;
 

Specified by:
cachePassParameters in interface JCompilationUnitType
See Also:
CompilerPassEnterable

preprocessDependencies

public void preprocessDependencies()
                            throws PositionedError
Performs preliminary processing on compilation units and types. Processes type imports so external methods' receiver types can be analyzed and supertypes can be resolved. Groups external methods by name, corresponding to the anchor classes that will eventually be generated. Mutates the name space management in CTopLevel to record a CGenericFunctionCollection singleton for each anchor class.

Specified by:
preprocessDependencies in interface CompilerPassEnterable
Throws:
PositionedError

checkInterface

public void checkInterface()
                    throws PositionedError
Description copied from interface: CompilerPassEnterable
Invokes the checkInterface method of the implementing class using previously cached arguments.

 requires arePassParametersCached;
 

Specified by:
checkInterface in interface CompilerPassEnterable
Throws:
PositionedError

checkInitializers

public void checkInitializers()
                       throws PositionedError
Description copied from interface: CompilerPassEnterable
Invokes the checkInitializers method of the implementing class using previously cached arguments.

 requires arePassParametersCached;
 

Specified by:
checkInitializers in interface CompilerPassEnterable
Throws:
PositionedError

resolveSpecializers

public void resolveSpecializers()
                         throws PositionedError
Description copied from interface: JCompilationUnitType
Resolves value specializer expressions to the compile-time constants they represent. Must come after the checkInitializers phase.

Specified by:
resolveSpecializers in interface JCompilationUnitType
Throws:
PositionedError

typecheck

public void typecheck()
               throws PositionedError
Description copied from interface: CompilerPassEnterable
Invokes the typecheck method of the implementing class using previously cached arguments.

 requires arePassParametersCached;
 

Specified by:
typecheck in interface CompilerPassEnterable
Throws:
PositionedError

translateMJ

public void translateMJ()
Description copied from interface: CompilerPassEnterable
Invokes the translateMJ method of the implementing class using previously cached arguments.

 requires arePassParametersCached;
 

Specified by:
translateMJ in interface CompilerPassEnterable

mjc

mjc is Copyright (C) 2000-2004 by Iowa State University and is distributed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. mjc is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.