public static PExp tcExp(ClassList classes, PExp exp)
throws AnalysisException, VDMErrorsException
{
TypeCheckerAssistantFactory af = new TypeCheckerAssistantFactory();
ClassTypeChecker.clearErrors();
ClassTypeChecker classTc = new ClassTypeChecker(classes, af);
for (SClassDefinition c : classes)
{
clearTypeData(c);
}
classTc.typeCheck();
TypeCheckVisitor tc = new TypeCheckVisitor();
TypeChecker.clearErrors();
Environment env = new PublicClassEnvironment(af, classes, null);
exp.apply(tc, new TypeCheckInfo(af, env, NameScope.NAMESANDSTATE));
if (TypeChecker.getErrorCount() > 0)
{
throw new VDMErrorsException(TypeChecker.getErrors());
} else
{
return exp;
}
}