public static <P> TypeCheckResult<P> typeCheck( ParserResult<P> parserResult, P tcList, TypeChecker tc) { if (parserResult.errors.isEmpty()) { TypeChecker.clearErrors(); tc.typeCheck(); return new TypeCheckResult<P>(parserResult, parserResult.result, TypeChecker.getWarnings(), TypeChecker.getErrors()); } return new TypeCheckResult<P>(parserResult, null, new Vector<VDMWarning>(), new Vector<VDMError>()); }
public PType typeCheck(PStm stmt, Environment env) throws Exception { TypeChecker.clearErrors(); try { PType type = stmt.apply(new TypeCheckVisitor(), new TypeCheckInfo(assistantFactory, env, NameScope.NAMESANDSTATE)); if (TypeChecker.getErrorCount() > 0) { throw new VDMErrorsException(TypeChecker.getErrors()); } return type; } catch (Exception e) { throw e; } catch (Throwable e) { e.printStackTrace(); } return null; }
public PType typeCheck(PExp expr, Environment env) throws Exception { TypeChecker.clearErrors(); try { PType type = expr.apply(new TypeCheckVisitor(), new TypeCheckInfo(assistantFactory, env, NameScope.NAMESANDSTATE)); if (TypeChecker.getErrorCount() > 0) { throw new VDMErrorsException(TypeChecker.getErrors()); } return type; } catch (Exception e) { throw e; } catch (Throwable e) { e.printStackTrace(); } return null; }
public static SClassDefinition tcClass(ClassList classes, SClassDefinition clazz) throws AnalysisException, VDMErrorsException { for (SClassDefinition c : classes) { clearTypeData(c); } TypeCheckerAssistantFactory af = new TypeCheckerAssistantFactory(); ClassTypeChecker.clearErrors(); ClassTypeChecker classTc = new ClassTypeChecker(classes, af); classes.add(clazz); classTc.typeCheck(); if (TypeChecker.getErrorCount() > 0) { throw new VDMErrorsException(TypeChecker.getErrors()); } else { return clazz; } }
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; } }