Package org.ek9lang.compiler.phase2


package org.ek9lang.compiler.phase2
F - Resolution of Explicitly Defined Type Symbols at this point phase1 processing should have defined most of the explicitly defined symbols, so they should be resolvable.

NonInferredTypeDefinition is the main entry point here and it delegates through to ResolveDefineExplicitTypeListener. Again the SymbolAndScopeManagement class is used to manage the scopes.

The Symbols and scopes that were defined in phase1 are now lookup up using the SymbolAndScopeManagement and in some cases augmented or in other cases checked.

Following the pass described above and second pass of the 'AST' is done using TypeHierarchyChecks. This is focussed on checking for loops in type hierarchies.

See org.ek9lang.compiler.phase3 for the next stage of compilation.

  • Classes
    Class
    Description
    For Constrained Types, focus on checking it is possible to constrain the type and if so then clones the appropriate methods/operators over and alters the types as appropriate.
    Examines all the service operations on a service and looks at the verbs used and the uti proto paths.
    Checks HTTP Access for service operations because some require HTTP_SOURCE, but others do not support it.
    Just checks for duplicated trait names in the list.
    Checks that the variable supplied (if not null and has a type), does not have a type that is a genericTypeParameter as those cannot be used with injection '!'.
    Checks operators from various contexts, typically this is delegated to other functions.
    Checks the PATH value (if this is a path parameter) and ensures that the name appears in the path itself on the operation.
    Check that a service operation complies with ek9 rules or return types etc.
    Checks for a type is resolved and is suitable genus and category.
    Checks for a type is resolved and is suitable to be extended from (in basic terms).
    Does a simple check (excluding any inheritance) for visibility rules on methods/operators on aggregates, such as classes, components, services, traits and dynamic classes.
    Can be MULTI THREADED for developer source, but single threaded for bootstrapping.
    Checks for inferred declarations of variables in various contexts.
    A bit of a long-winded name, but this is really the second pass of the second phase of compilation.
    The Generic T used in parametric types will exist but won't have any methods on yet.
    Only types of a specific genus can be used as constraints on the generic type 'T'.
    Looks at the function and if it has no super function, attempts to work out what would be the best super function generic type it could implement.
    Some aggregates like classes, components, etc.
    SINGLE THREADED - Run across sources to check for types, functions and traits for 'super loops'.