/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package abs.frontend.typechecker.ext;
import abs.frontend.analyser.SemanticConditionList;
import abs.frontend.ast.*;
import abs.frontend.typechecker.Type;
import abs.frontend.typechecker.ext.AdaptDirection;
public interface TypeSystemExtension {
void checkModel(Model model);
void checkClassDecl(ClassDecl decl);
void checkInterfaceDecl(InterfaceDecl decl);
void checkDataTypeDecl(DataTypeDecl decl);
void checkMethodImpl(MethodImpl method);
void checkAssignable(Type adaptTo, AdaptDirection dir, Type rht, Type lht, ASTNode<?> n);
void annotateType(Type t, ASTNode<?> orinatingNode, ASTNode<?> typeNode);
void checkMethodCall(Call call);
void checkNewExp(NewExp e);
void checkEq(Type lt, Type t, ASTNode<?> origin);
void setSemanticConditionList(SemanticConditionList errors);
void finished();
void checkStmt(Stmt s);
void checkAssignStmt(AssignStmt s);
void checkReturnStmt(ReturnStmt s);
void checkAssertStmt(AssertStmt assertStmt);
void checkWhileStmt(WhileStmt whileStmt);
void checkVarDeclStmt(VarDeclStmt varDeclStmt);
void checkSuspendStmt(SuspendStmt suspendStmt);
void checkIfStmt(IfStmt ifStmt);
void checkDurationStmt(DurationStmt durationStmt);
void checkExpressionStmt(ExpressionStmt expressionStmt);
void checkBlock(Block block);
void checkAwaitStmt(AwaitStmt awaitStmt);
void checkGetExp(GetExp e);
void checkOverride(MethodSig impl, MethodSig overriden);
}