Search in sources :

Example 16 with Type

use of org.abs_models.frontend.typechecker.Type in project abstools by abstools.

the class OtherAnalysisTests method awaitRewriteModule1.

@Test
public void awaitRewriteModule1() {
    Model m = assertParse("module A; export *; data X; module B; export *; data X; module C; import * from A; import B.X; class C { X m() { return await this!m();}}", Config.TYPE_CHECK, Config.WITHOUT_DESUGARING_AFTER_TYPECHECK);
    ClassDecl c = (ClassDecl) m.lookupModule("C").getDecl(0);
    Stmt stmt = c.getMethod(0).getBlock().getStmt(0);
    ReturnStmt ret = (ReturnStmt) stmt;
    assertThat(ret.getRetExp().getType(), instanceOf(DataTypeType.class));
    assertEquals("A.X", ret.getRetExp().getType().getQualifiedName());
    m = assertParse("module A; export *; data X; module B; export *; data X; module C; import * from A; import B.X; class C { X m() { return await this!m();}}", Config.TYPE_CHECK);
    c = (ClassDecl) m.lookupModule("C").getDecl(0);
    Stmt s = c.getMethod(0).getBlock().getStmt(0);
    VarDeclStmt b = (VarDeclStmt) s;
    Type t = ((DataTypeType) b.getVarDecl().getType()).getTypeArg(0);
    assertEquals("A.X", t.getQualifiedName());
}
Also used : Type(org.abs_models.frontend.typechecker.Type) DataTypeType(org.abs_models.frontend.typechecker.DataTypeType) ClassDecl(org.abs_models.frontend.ast.ClassDecl) VarDeclStmt(org.abs_models.frontend.ast.VarDeclStmt) Model(org.abs_models.frontend.ast.Model) DataTypeType(org.abs_models.frontend.typechecker.DataTypeType) ReturnStmt(org.abs_models.frontend.ast.ReturnStmt) Stmt(org.abs_models.frontend.ast.Stmt) ReturnStmt(org.abs_models.frontend.ast.ReturnStmt) VarDeclStmt(org.abs_models.frontend.ast.VarDeclStmt) FrontendTest(org.abs_models.frontend.FrontendTest) Test(org.junit.Test)

Example 17 with Type

use of org.abs_models.frontend.typechecker.Type in project abstools by abstools.

the class NullCheckerExtension method checkVarDeclStmt.

@Override
public void checkVarDeclStmt(VarDeclStmt varDeclStmt) {
    VarDecl d = varDeclStmt.getVarDecl();
    Type t = d.getType();
    setAnnotatedType(t, varDeclStmt);
    if (!shouldHaveNullableType(t))
        return;
    NullableType nt = getNullableTypeDefault(t);
    if (nt == NullableType.Nonnull && !d.hasInitExp()) {
        errors.add(new TypeError(varDeclStmt, ErrorMessage.NULLABLE_TYPE_MISMATCH, NullableType.Null.toString(), nt.toString()));
    }
}
Also used : Type(org.abs_models.frontend.typechecker.Type) TypeError(org.abs_models.frontend.analyser.TypeError)

Example 18 with Type

use of org.abs_models.frontend.typechecker.Type in project abstools by abstools.

the class NullCheckerExtension method checkOverride.

@Override
public void checkOverride(MethodSig impl, MethodSig overriden) {
    Type expectedReturnType = overriden.getType();
    Type actualReturnType = impl.getType();
    NullableType expected = getNullableTypeDefault(expectedReturnType);
    NullableType actual = getNullableTypeDefault(actualReturnType);
    checkAssignable(expected, actual, impl);
    for (int i = 0; i < overriden.getNumParam(); i++) {
        Type tExpected = overriden.getParam(i).getType();
        Type tActual = impl.getParam(i).getType();
        NullableType nte = getNullableTypeDefault(tExpected);
        NullableType nta = getNullableTypeDefault(tActual);
        checkAssignable(nta, nte, impl);
    }
}
Also used : Type(org.abs_models.frontend.typechecker.Type)

Example 19 with Type

use of org.abs_models.frontend.typechecker.Type in project abstools by abstools.

the class TypeExtensionHelper method checkAssignable.

public void checkAssignable(Type callee, HasParams params, ASTNode<?> n) {
    java.util.List<Type> paramsTypes = params.getTypes();
    for (int i = 0; i < paramsTypes.size(); i++) {
        Type argType = paramsTypes.get(i);
        PureExp exp = ((HasActualParams) n).getParams().getChild(i);
        checkAssignable(callee, AdaptDirection.TO, exp.getType(), argType, n);
        checkAssignableBehaviorType(argType, exp, n);
    }
}
Also used : BoundedType(org.abs_models.frontend.typechecker.BoundedType) DataTypeType(org.abs_models.frontend.typechecker.DataTypeType) Type(org.abs_models.frontend.typechecker.Type)

Example 20 with Type

use of org.abs_models.frontend.typechecker.Type in project abstools by abstools.

the class TypeExtensionHelper method annotateType.

public void annotateType(Type t, ASTNode<?> originatingNode, ASTNode<?> typeNode) {
    if (t.isDataType()) {
        DataTypeType dt = (DataTypeType) t;
        if (dt.hasTypeArgs()) {
            ParametricDataTypeUse pu = null;
            // typeNode maybe a type synonym
            if (typeNode instanceof ParametricDataTypeUse)
                pu = (ParametricDataTypeUse) typeNode;
            int i = 0;
            for (Type ta : dt.getTypeArgs()) {
                ASTNode<?> childTypeNode = null;
                if (pu != null)
                    childTypeNode = pu.getParam(i);
                annotateType(ta, originatingNode, childTypeNode);
                i++;
            }
        }
    }
    if (t.isReferenceType() || t.isNullType()) {
        for (TypeSystemExtension tse : obs) {
            tse.annotateType(t, originatingNode, typeNode);
        }
    }
}
Also used : BoundedType(org.abs_models.frontend.typechecker.BoundedType) DataTypeType(org.abs_models.frontend.typechecker.DataTypeType) Type(org.abs_models.frontend.typechecker.Type) DataTypeType(org.abs_models.frontend.typechecker.DataTypeType)

Aggregations

Type (org.abs_models.frontend.typechecker.Type)21 DataTypeType (org.abs_models.frontend.typechecker.DataTypeType)11 BoundedType (org.abs_models.frontend.typechecker.BoundedType)7 TypeParameter (org.abs_models.frontend.typechecker.TypeParameter)4 PureExp (org.abs_models.frontend.ast.PureExp)3 HashMap (java.util.HashMap)2 HashSet (java.util.HashSet)2 FrontendTest (org.abs_models.frontend.FrontendTest)2 TypeError (org.abs_models.frontend.analyser.TypeError)2 ClassDecl (org.abs_models.frontend.ast.ClassDecl)2 MethodSig (org.abs_models.frontend.ast.MethodSig)2 Model (org.abs_models.frontend.ast.Model)2 Stmt (org.abs_models.frontend.ast.Stmt)2 VarDeclStmt (org.abs_models.frontend.ast.VarDeclStmt)2 InterfaceType (org.abs_models.frontend.typechecker.InterfaceType)2 UnionType (org.abs_models.frontend.typechecker.UnionType)2 Test (org.junit.Test)2 Constraint (com.gzoumix.semisolver.constraint.Constraint)1 LinkedList (java.util.LinkedList)1 ABSBool (org.abs_models.backend.java.lib.types.ABSBool)1