Passess should be executed in this order:

TypeFinder - to locate the types (Classes and Enums) in the source code.
DefinitionFinder - to build up the definitions of Classes, and locate methods.

TypeChecker - checks the types of different things all match up.

ValidAssignmentChecker - Check that assignments are valid, variables have been initialised, etc.

StructureChecker - Check that structually things are sound (e.g. after a return
nothing else can come).

somewhere need to check that ++ and -- are only applied to variables, not to 
anything else (line numbers or functions).

char's - if a char num goes negative its an int. (Chars have to be positive!)