jif.visit
Class LabelChecker

java.lang.Object
  extended byjif.visit.LabelChecker
All Implemented Interfaces:
java.lang.Cloneable, polyglot.util.Copy

public class LabelChecker
extends java.lang.Object
implements polyglot.util.Copy

The LabelChecker class is used in the label checking of Jif. Primarily it provides the method labelCheck(Node) which invokes the labelCheck method on nodes, utility functions to help in the implementation of the labelCheck methods, as well as references to the appropriate Solver and JifContext.

LabelChecker is mostly imperative; however, the JifContext is treated functionally, and whenever a LabelChecker is given a new JifContext, a new LabelChecker is created.


Constructor Summary
LabelChecker(polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf, boolean solvePerClassBody)
           
LabelChecker(polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf, boolean solvePerClassBody, boolean doLabelSubst)
           
 
Method Summary
 void constrain(LabelConstraint c)
           
 JifContext context()
           
 LabelChecker context(JifContext c)
           
 java.lang.Object copy()
           
 void enteringClassBody()
          Called by JifClassDeclExt just before this label checker is used to check a class body.
 polyglot.ast.Node finishedLabelCheckPass(polyglot.ast.Node n)
          This method should be called on the top level label checker once the label checking has finished.
 JifContext jifContext()
           
 JifTypeSystem jifTypeSystem()
           
 polyglot.ast.Node labelCheck(polyglot.ast.Node n)
           
 JifClassDecl leavingClassBody(JifClassDecl n)
          Called by JifClassDeclExt just after this label checker has been used to check a class body.
 Solver solver()
           
 JifTypeSystem typeSystem()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LabelChecker

public LabelChecker(polyglot.frontend.Job job,
                    polyglot.types.TypeSystem ts,
                    polyglot.ast.NodeFactory nf,
                    boolean solvePerClassBody)

LabelChecker

public LabelChecker(polyglot.frontend.Job job,
                    polyglot.types.TypeSystem ts,
                    polyglot.ast.NodeFactory nf,
                    boolean solvePerClassBody,
                    boolean doLabelSubst)
Method Detail

copy

public java.lang.Object copy()
Specified by:
copy in interface polyglot.util.Copy

context

public JifContext context()

context

public LabelChecker context(JifContext c)

typeSystem

public JifTypeSystem typeSystem()

jifTypeSystem

public JifTypeSystem jifTypeSystem()

jifContext

public JifContext jifContext()

solver

public Solver solver()

labelCheck

public polyglot.ast.Node labelCheck(polyglot.ast.Node n)
                             throws polyglot.types.SemanticException
Throws:
polyglot.types.SemanticException

constrain

public void constrain(LabelConstraint c)
               throws polyglot.types.SemanticException
Throws:
polyglot.types.SemanticException

enteringClassBody

public void enteringClassBody()
Called by JifClassDeclExt just before this label checker is used to check a class body. This allows us to use a different solver if required.


leavingClassBody

public JifClassDecl leavingClassBody(JifClassDecl n)
Called by JifClassDeclExt just after this label checker has been used to check a class body. This allows us to use a different solver if required.


finishedLabelCheckPass

public polyglot.ast.Node finishedLabelCheckPass(polyglot.ast.Node n)
This method should be called on the top level label checker once the label checking has finished. This will perform label substitution if required.