polyglot.visit
Class TypeChecker

java.lang.Object
  extended by polyglot.visit.NodeVisitor
      extended by polyglot.visit.HaltingVisitor
          extended by polyglot.visit.ErrorHandlingVisitor
              extended by polyglot.visit.ContextVisitor
                  extended by polyglot.visit.TypeChecker
All Implemented Interfaces:
java.lang.Cloneable, Copy

public class TypeChecker
extends ContextVisitor

Visitor which performs type checking on the AST.


Field Summary
 
Fields inherited from class polyglot.visit.ContextVisitor
context, outer
 
Fields inherited from class polyglot.visit.ErrorHandlingVisitor
error, job, nf, ts
 
Constructor Summary
TypeChecker(Job job, TypeSystem ts, NodeFactory nf)
           
 
Method Summary
protected  NodeVisitor enterCall(Node parent, Node n)
          Replaces the functionality of the enter() method; all sub-classes should over-ride this method instead of enter() if there is any chance of exceptions being generated.
protected  Node leaveCall(Node old, Node n, NodeVisitor v)
          Contains all of the functionality that can be done in the leave method, but allows SemanticExceptions to be thrown.
 
Methods inherited from class polyglot.visit.ContextVisitor
addDecls, begin, context, context, enter, enterScope, leave, superEnter
 
Methods inherited from class polyglot.visit.ErrorHandlingVisitor
catchErrors, enterCall, enterError, errorQueue, job, leaveCall, nodeFactory, typeSystem
 
Methods inherited from class polyglot.visit.HaltingVisitor
bypass, bypass, bypassChildren, copy, override, visitChildren
 
Methods inherited from class polyglot.visit.NodeVisitor
enter, finish, finish, leave, override, toString, visitEdge
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

TypeChecker

public TypeChecker(Job job,
                   TypeSystem ts,
                   NodeFactory nf)
Method Detail

enterCall

protected NodeVisitor enterCall(Node parent,
                                Node n)
                         throws SemanticException
Description copied from class: ErrorHandlingVisitor
Replaces the functionality of the enter() method; all sub-classes should over-ride this method instead of enter() if there is any chance of exceptions being generated. This method is the replacement for the enter() method, so that all of its subclasses gain the error handling capabilities of this visitor without having to rewrite it for the enter() for each sub-class. This method allows for a SemanticException to be thrown in the body, while enter() does not.

Overrides:
enterCall in class ErrorHandlingVisitor
n - The root of the subtree to be traversed.
Returns:
The ErrorHandlingVisitor which should be used to visit the children of n.
Throws:
SemanticException
See Also:
NodeVisitor.enter(Node, Node)

leaveCall

protected Node leaveCall(Node old,
                         Node n,
                         NodeVisitor v)
                  throws SemanticException
Description copied from class: ErrorHandlingVisitor
Contains all of the functionality that can be done in the leave method, but allows SemanticExceptions to be thrown. This method is in addition to the leave method, and allows the compiler writer to write code that can throw errors and let the polyglot infrastructure handle the exceptions.

Overrides:
leaveCall in class ErrorHandlingVisitor
Parameters:
old - The original state of root of the current subtree.
n - The current state of the root of the current subtree.
v - The NodeVisitor object used to visit the children.
Returns:
The final result of the traversal of the tree rooted at n.
Throws:
SemanticException
See Also:
NodeVisitor.leave(Node, Node, NodeVisitor)