Search in sources :

Example 1 with TypeUse

use of org.abs_models.frontend.ast.TypeUse in project abstools by abstools.

the class TypeCheckerTest method ticket414_futNeedsDataType1.

@Test
public void ticket414_futNeedsDataType1() {
    Model m = assertParse("module M; interface I {} { Fut<I> fi; }");
    assertFalse(m.hasErrors());
    Block b = m.getMainBlock();
    assertNotNull(b);
    VarDeclStmt s = (VarDeclStmt) b.getStmt(0);
    ParametricDataTypeUse u = (ParametricDataTypeUse) s.getVarDecl().getTypeUse();
    // Have:
    TypeUse tu = u.getParam(0);
    assertEquals("I", tu.getName());
    assertThat(tu, instanceOf(InterfaceTypeUse.class));
    assertThat(tu.getType(), instanceOf(InterfaceType.class));
    assertThat(tu.getDecl(), instanceOf(InterfaceDecl.class));
}
Also used : DataTypeUse(org.abs_models.frontend.ast.DataTypeUse) TypeUse(org.abs_models.frontend.ast.TypeUse) ParametricDataTypeUse(org.abs_models.frontend.ast.ParametricDataTypeUse) InterfaceTypeUse(org.abs_models.frontend.ast.InterfaceTypeUse) InterfaceType(org.abs_models.frontend.typechecker.InterfaceType) VarDeclStmt(org.abs_models.frontend.ast.VarDeclStmt) Model(org.abs_models.frontend.ast.Model) InterfaceTypeUse(org.abs_models.frontend.ast.InterfaceTypeUse) Block(org.abs_models.frontend.ast.Block) InterfaceDecl(org.abs_models.frontend.ast.InterfaceDecl) ParametricDataTypeUse(org.abs_models.frontend.ast.ParametricDataTypeUse) ABSTest(org.abs_models.ABSTest) FrontendTest(org.abs_models.frontend.FrontendTest) Test(org.junit.Test)

Example 2 with TypeUse

use of org.abs_models.frontend.ast.TypeUse in project abstools by abstools.

the class TypeCheckerTest method ticket414_futNeedsDataType2.

@Test
public void ticket414_futNeedsDataType2() {
    Model m = assertParse("module M; data I = I; { Fut<I> fi; }");
    assertFalse(m.hasErrors());
    Block b = m.getMainBlock();
    assertNotNull(b);
    VarDeclStmt s = (VarDeclStmt) b.getStmt(0);
    ParametricDataTypeUse u = (ParametricDataTypeUse) s.getVarDecl().getTypeUse();
    // Have:
    TypeUse tu = u.getParam(0);
    assertEquals("I", tu.getName());
    assertThat(tu, instanceOf(DataTypeUse.class));
}
Also used : DataTypeUse(org.abs_models.frontend.ast.DataTypeUse) TypeUse(org.abs_models.frontend.ast.TypeUse) ParametricDataTypeUse(org.abs_models.frontend.ast.ParametricDataTypeUse) InterfaceTypeUse(org.abs_models.frontend.ast.InterfaceTypeUse) DataTypeUse(org.abs_models.frontend.ast.DataTypeUse) ParametricDataTypeUse(org.abs_models.frontend.ast.ParametricDataTypeUse) VarDeclStmt(org.abs_models.frontend.ast.VarDeclStmt) Model(org.abs_models.frontend.ast.Model) Block(org.abs_models.frontend.ast.Block) ParametricDataTypeUse(org.abs_models.frontend.ast.ParametricDataTypeUse) ABSTest(org.abs_models.ABSTest) FrontendTest(org.abs_models.frontend.FrontendTest) Test(org.junit.Test)

Example 3 with TypeUse

use of org.abs_models.frontend.ast.TypeUse in project abstools by abstools.

the class ASTBasedABSTestRunnerGenerator method generateDataPointsAST.

private TypeUse generateDataPointsAST(InterfaceDecl key, ClassDecl clazz, Set<TypeUse> use, MainBlock block) {
    MethodSig dataPoint = findDataPoints(key);
    if (dataPoint == null) {
        return null;
    }
    TypeIdUse rt = dataPoint.getReturnType();
    if (!(rt instanceof ParametricDataTypeUse)) {
        return null;
    }
    ParametricDataTypeUse prt = (ParametricDataTypeUse) rt;
    if (!prt.getName().equals("Set")) {
        return null;
    }
    // Set has only one type parameter
    TypeUse u = (TypeUse) prt.getParam(0).copy();
    use.add(u);
    String objName = uncap(clazz.getName()) + "dataPoint";
    String dataSet = dataPointSetName(clazz);
    block.addStmtNoTransform(newObj(key, clazz, objName, true));
    block.addStmtNoTransform(getVarDecl(dataSet, prt.copy(), new SyncCall(new VarUse(objName), dataPoint.getName(), new List<>())));
    return u;
}
Also used : MethodSig(org.abs_models.frontend.ast.MethodSig) DataTypeUse(org.abs_models.frontend.ast.DataTypeUse) TypeUse(org.abs_models.frontend.ast.TypeUse) ParametricDataTypeUse(org.abs_models.frontend.ast.ParametricDataTypeUse) SyncCall(org.abs_models.frontend.ast.SyncCall) TypeIdUse(org.abs_models.frontend.ast.TypeIdUse) VarUse(org.abs_models.frontend.ast.VarUse) ParametricDataTypeUse(org.abs_models.frontend.ast.ParametricDataTypeUse)

Example 4 with TypeUse

use of org.abs_models.frontend.ast.TypeUse in project abstools by abstools.

the class AbsASTBuilderUtil method getType.

public static final DataTypeUse getType(String n, TypeUse... types) {
    if (types.length > 0) {
        ParametricDataTypeUse set = new ParametricDataTypeUse();
        set.setName(n);
        for (TypeUse d : types) {
            set.addParam(d);
        }
        return set;
    } else {
        DataTypeUse set = new DataTypeUse();
        set.setName(n);
        return set;
    }
}
Also used : DataTypeUse(org.abs_models.frontend.ast.DataTypeUse) TypeUse(org.abs_models.frontend.ast.TypeUse) ParametricDataTypeUse(org.abs_models.frontend.ast.ParametricDataTypeUse) InterfaceTypeUse(org.abs_models.frontend.ast.InterfaceTypeUse) DataTypeUse(org.abs_models.frontend.ast.DataTypeUse) ParametricDataTypeUse(org.abs_models.frontend.ast.ParametricDataTypeUse) ParametricDataTypeUse(org.abs_models.frontend.ast.ParametricDataTypeUse)

Example 5 with TypeUse

use of org.abs_models.frontend.ast.TypeUse in project abstools by abstools.

the class ASTBasedABSTestRunnerGenerator method generateMainBlockAST.

private MainBlock generateMainBlockAST(List<Import> list) {
    final MainBlock block = new MainBlock();
    DataConstructorExp empty = new DataConstructorExp("EmptySet", new List<>());
    VarDeclStmt futsStatement = getVarDecl(futs, getType("Set", getFutUnitType()), empty);
    block.addStmtNoTransform(futsStatement);
    VarDeclStmt futStatement = getVarDecl(fut, getFutUnitType(), null);
    block.addStmtNoTransform(futStatement);
    Set<TypeUse> use = new HashSet<>();
    for (InterfaceDecl key : tests.keySet()) {
        for (ClassDecl clazz : tests.get(key)) {
            use.addAll(generateTestClassImplAST(key, clazz, block));
        }
    }
    block.addStmtNoTransform(generateWaitSyncAST());
    return block;
}
Also used : DataConstructorExp(org.abs_models.frontend.ast.DataConstructorExp) DataTypeUse(org.abs_models.frontend.ast.DataTypeUse) TypeUse(org.abs_models.frontend.ast.TypeUse) ParametricDataTypeUse(org.abs_models.frontend.ast.ParametricDataTypeUse) ClassDecl(org.abs_models.frontend.ast.ClassDecl) VarDeclStmt(org.abs_models.frontend.ast.VarDeclStmt) InterfaceDecl(org.abs_models.frontend.ast.InterfaceDecl) MainBlock(org.abs_models.frontend.ast.MainBlock) HashSet(java.util.HashSet)

Aggregations

DataTypeUse (org.abs_models.frontend.ast.DataTypeUse)7 ParametricDataTypeUse (org.abs_models.frontend.ast.ParametricDataTypeUse)7 TypeUse (org.abs_models.frontend.ast.TypeUse)7 InterfaceTypeUse (org.abs_models.frontend.ast.InterfaceTypeUse)4 HashSet (java.util.HashSet)3 Block (org.abs_models.frontend.ast.Block)3 VarDeclStmt (org.abs_models.frontend.ast.VarDeclStmt)3 ABSTest (org.abs_models.ABSTest)2 FrontendTest (org.abs_models.frontend.FrontendTest)2 InterfaceDecl (org.abs_models.frontend.ast.InterfaceDecl)2 MainBlock (org.abs_models.frontend.ast.MainBlock)2 MethodSig (org.abs_models.frontend.ast.MethodSig)2 Model (org.abs_models.frontend.ast.Model)2 VarUse (org.abs_models.frontend.ast.VarUse)2 Test (org.junit.Test)2 ClassDecl (org.abs_models.frontend.ast.ClassDecl)1 DataConstructorExp (org.abs_models.frontend.ast.DataConstructorExp)1 FromImport (org.abs_models.frontend.ast.FromImport)1 Import (org.abs_models.frontend.ast.Import)1 SyncCall (org.abs_models.frontend.ast.SyncCall)1