|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object jif.visit.LabelChecker
public class LabelChecker
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.
Field Summary | |
---|---|
protected polyglot.frontend.Job |
job
|
protected polyglot.ast.NodeFactory |
nf
|
protected boolean |
solvePerClassBody
If true, then a new system of constraints will be used for each class body, and upon leaving the class body, the system of constraints will be solved. |
protected boolean |
solvePerMethod
If true, then a new system of constraints will be used for each method body, and upon leaving the method body, the system of constraints will be solved. |
protected Solver |
solver
The Solver to add constraints to. |
protected JifTypeSystem |
ts
|
Constructor Summary | |
---|---|
LabelChecker(polyglot.frontend.Job job,
polyglot.types.TypeSystem ts,
polyglot.ast.NodeFactory nf,
boolean solvePerClassBody,
boolean solvePerMethod,
boolean doLabelSubst)
|
Method Summary | |
---|---|
protected void |
constrain(Constraint c)
|
void |
constrain(NamedLabel lhs,
Constraint.Kind kind,
NamedLabel rhs,
LabelEnv env,
polyglot.util.Position pos)
|
void |
constrain(NamedLabel lhs,
Constraint.Kind kind,
NamedLabel rhs,
LabelEnv env,
polyglot.util.Position pos,
boolean report,
ConstraintMessage msg)
|
void |
constrain(NamedLabel lhs,
Constraint.Kind kind,
NamedLabel rhs,
LabelEnv env,
polyglot.util.Position pos,
ConstraintMessage msg)
|
void |
constrain(Principal p,
Constraint.Kind kind,
Principal q,
LabelEnv env,
polyglot.util.Position pos,
ConstraintMessage msg)
|
void |
constrain(Principal p,
Constraint.Kind kind,
Principal q,
LabelEnv env,
polyglot.util.Position pos,
ConstraintMessage msg,
boolean report)
|
JifContext |
context()
|
LabelChecker |
context(JifContext c)
|
java.lang.Object |
copy()
|
CallHelper |
createCallHelper(Label receiverLabel,
polyglot.ast.Receiver receiver,
polyglot.types.ReferenceType calleeContainer,
JifProcedureInstance pi,
java.util.List actualArgs,
polyglot.util.Position position)
|
CallHelper |
createCallHelper(Label receiverLabel,
polyglot.types.ReferenceType calleeContainer,
JifProcedureInstance pi,
java.util.List actualArgs,
polyglot.util.Position position)
|
CallHelper |
createOverrideHelper(JifMethodInstance overridden,
JifMethodInstance overriding)
|
void |
enteringClassDecl(polyglot.types.ClassType ct)
Called by JifClassDeclExt just before this label checker is used to check a class body. |
void |
enteringMethod(polyglot.types.MethodInstance mi)
Called by JifMethodDeclExt just before this label checker is used to check a method body. |
polyglot.util.ErrorQueue |
errorQueue()
|
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.frontend.Job |
job()
|
polyglot.ast.Node |
labelCheck(polyglot.ast.Node n)
|
JifClassDecl |
leavingClassDecl(JifClassDecl n)
Called by JifClassDeclExt just after this label checker has been used to check a class body. |
JifMethodDecl |
leavingMethod(JifMethodDecl n)
Called by JifClassDeclExt just after this label checker has been used to check a class body. |
Label |
lowerBound(Label L1,
Label L2)
Returns a lower bound for L1 and L2 |
polyglot.ast.NodeFactory |
nodeFactory()
|
protected polyglot.ast.Node |
postLabelCheck(polyglot.ast.Node old,
polyglot.ast.Node n)
|
protected polyglot.ast.Node |
preLabelCheck(polyglot.ast.Node n)
|
void |
reportSemanticException(polyglot.types.SemanticException e)
|
protected polyglot.ast.Node |
solveConstraints(polyglot.ast.Node n)
|
Solver |
solver()
|
JifTypeSystem |
typeSystem()
|
Label |
upperBound(Label L1,
Label L2)
Returns an upper bound for L1 and L2 |
Label |
upperBound(Label L1,
Label L2,
Label L3)
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected final JifTypeSystem ts
protected final polyglot.frontend.Job job
protected final polyglot.ast.NodeFactory nf
protected final boolean solvePerClassBody
protected final boolean solvePerMethod
protected Solver solver
Solver
to add constraints to. Depending on
solveClassBodies
, a new Solver
is used
for every class, or a single Solver
used for the entire
compilation.
Constructor Detail |
---|
public LabelChecker(polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf, boolean solvePerClassBody, boolean solvePerMethod, boolean doLabelSubst)
Method Detail |
---|
public java.lang.Object copy()
copy
in interface polyglot.util.Copy
public JifContext context()
public JifContext jifContext()
public LabelChecker context(JifContext c)
public JifTypeSystem typeSystem()
public JifTypeSystem jifTypeSystem()
public polyglot.ast.NodeFactory nodeFactory()
public Solver solver()
public polyglot.frontend.Job job()
public polyglot.util.ErrorQueue errorQueue()
public Label upperBound(Label L1, Label L2)
public Label upperBound(Label L1, Label L2, Label L3)
public Label lowerBound(Label L1, Label L2)
protected polyglot.ast.Node preLabelCheck(polyglot.ast.Node n)
protected polyglot.ast.Node postLabelCheck(polyglot.ast.Node old, polyglot.ast.Node n)
public polyglot.ast.Node labelCheck(polyglot.ast.Node n) throws polyglot.types.SemanticException
polyglot.types.SemanticException
public void constrain(NamedLabel lhs, Constraint.Kind kind, NamedLabel rhs, LabelEnv env, polyglot.util.Position pos, ConstraintMessage msg) throws polyglot.types.SemanticException
polyglot.types.SemanticException
public void constrain(NamedLabel lhs, Constraint.Kind kind, NamedLabel rhs, LabelEnv env, polyglot.util.Position pos, boolean report, ConstraintMessage msg) throws polyglot.types.SemanticException
polyglot.types.SemanticException
public void constrain(NamedLabel lhs, Constraint.Kind kind, NamedLabel rhs, LabelEnv env, polyglot.util.Position pos) throws polyglot.types.SemanticException
polyglot.types.SemanticException
protected void constrain(Constraint c) throws polyglot.types.SemanticException
polyglot.types.SemanticException
public void constrain(Principal p, Constraint.Kind kind, Principal q, LabelEnv env, polyglot.util.Position pos, ConstraintMessage msg) throws polyglot.types.SemanticException
polyglot.types.SemanticException
public void constrain(Principal p, Constraint.Kind kind, Principal q, LabelEnv env, polyglot.util.Position pos, ConstraintMessage msg, boolean report) throws polyglot.types.SemanticException
polyglot.types.SemanticException
public void enteringClassDecl(polyglot.types.ClassType ct)
public void enteringMethod(polyglot.types.MethodInstance mi)
public JifClassDecl leavingClassDecl(JifClassDecl n)
public JifMethodDecl leavingMethod(JifMethodDecl n)
public polyglot.ast.Node finishedLabelCheckPass(polyglot.ast.Node n)
protected polyglot.ast.Node solveConstraints(polyglot.ast.Node n)
public void reportSemanticException(polyglot.types.SemanticException e)
public CallHelper createCallHelper(Label receiverLabel, polyglot.ast.Receiver receiver, polyglot.types.ReferenceType calleeContainer, JifProcedureInstance pi, java.util.List actualArgs, polyglot.util.Position position)
public CallHelper createCallHelper(Label receiverLabel, polyglot.types.ReferenceType calleeContainer, JifProcedureInstance pi, java.util.List actualArgs, polyglot.util.Position position)
public CallHelper createOverrideHelper(JifMethodInstance overridden, JifMethodInstance overriding)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |