Search in sources :

Example 1 with Block

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

the class TraitTest method addAddModifierAtRuntimeBackComp.

@Test
public void addAddModifierAtRuntimeBackComp() {
    Model model = assertParse("module M;" + "class C { Unit m(){skip;} }");
    ClassDecl cls = (ClassDecl) findDecl(model, "M", "C");
    MethodSig sig = AbsASTBuilderUtil.createMethodSig("n", AbsASTBuilderUtil.getUnit());
    MethodImpl impl = new MethodImpl(sig, new Block(new List<>(), new List<>(new SkipStmt())));
    AddMethodModifier opr = new AddMethodModifier(impl);
    assertNotNull(opr.getMethodImpl());
    ModifyClassModifier mcn = new ModifyClassModifier();
    mcn.setName("M.C");
    DeltaAccess acc = new DeltaAccess(cls.getModuleDecl().getName());
    DeltaDecl dd = new DeltaDecl();
    dd.setName("MyDelta");
    dd.setImportedModule(acc);
    dd.addModuleModifier(mcn);
    mcn.addModifier(opr);
    mcn.setParent(dd);
    acc.setParent(dd);
    opr.setParent(mcn);
    sig.setParent(opr);
    CompilationUnit cu = model.getCompilationUnitList().getChild(0);
    cu.addDeltaDecl(dd);
    dd.setParent(cu);
    model.applyDelta(dd);
    assertEquals(2, cls.getMethods().getNumChild());
}
Also used : CompilationUnit(org.abs_models.frontend.ast.CompilationUnit) MethodSig(org.abs_models.frontend.ast.MethodSig) ClassDecl(org.abs_models.frontend.ast.ClassDecl) MethodImpl(org.abs_models.frontend.ast.MethodImpl) DeltaAccess(org.abs_models.frontend.ast.DeltaAccess) AddMethodModifier(org.abs_models.frontend.ast.AddMethodModifier) Model(org.abs_models.frontend.ast.Model) Block(org.abs_models.frontend.ast.Block) List(org.abs_models.frontend.ast.List) DeltaDecl(org.abs_models.frontend.ast.DeltaDecl) SkipStmt(org.abs_models.frontend.ast.SkipStmt) ModifyClassModifier(org.abs_models.frontend.ast.ModifyClassModifier) Test(org.junit.Test)

Example 2 with Block

use of org.abs_models.frontend.ast.Block 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 3 with Block

use of org.abs_models.frontend.ast.Block 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 4 with Block

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

the class ASTBasedABSTestRunnerGenerator method generateWaitSyncAST.

private WhileStmt generateWaitSyncAST() {
    WhileStmt ws = new WhileStmt();
    ws.setCondition(getFnApp("hasNext", new VarUse(futs)));
    Block body = new Block();
    DataTypeUse u = getType("Pair", getType("Set", getType("Fut", getType("Unit"))), getType("Fut", getType("Unit")));
    body.addStmtNoTransform(getVarDecl("nt", u, getFnApp("next", new VarUse(futs))));
    body.addStmtNoTransform(getVAssign(fut, getFnApp("snd", new VarUse("nt"))));
    body.addStmtNoTransform(getVAssign(futs, getFnApp("fst", new VarUse("nt"))));
    body.addStmtNoTransform(getExpStmt(new GetExp(new VarUse("fut"))));
    // Attach body at the end, since JastAdd will avoid touching ASTs without parents.
    ws.setBody(body);
    return ws;
}
Also used : WhileStmt(org.abs_models.frontend.ast.WhileStmt) DataTypeUse(org.abs_models.frontend.ast.DataTypeUse) ParametricDataTypeUse(org.abs_models.frontend.ast.ParametricDataTypeUse) Block(org.abs_models.frontend.ast.Block) MainBlock(org.abs_models.frontend.ast.MainBlock) GetExp(org.abs_models.frontend.ast.GetExp) VarUse(org.abs_models.frontend.ast.VarUse)

Example 5 with Block

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

the class ASTBasedABSTestRunnerGenerator method generateTestClassImplAST.

private Set<TypeUse> generateTestClassImplAST(InterfaceDecl inf, ClassDecl clazz, MainBlock block) {
    Set<TypeUse> accesses = new HashSet<>();
    TypeUse dataType = generateDataPointsAST(inf, clazz, accesses, block);
    String namePrefix = clazz.getName();
    int instance = 0;
    for (MethodSig method : getTestMethods(inf)) {
        Block thisBlock = block;
        WhileStmt ws = null;
        if (method.getNumParam() > 0) {
            if (dataType == null) {
                throw new IllegalStateException("Test method requires arguments but test class defines no data point");
            }
            /*
                 * a while loop over all data points
                 */
            String dataPointSet = dataPointSetName(clazz);
            ws = new WhileStmt();
            ws.setCondition(getFnApp("hasNext", new VarUse(dataPointSet)));
            Block body = new Block();
            thisBlock = body;
            DataTypeUse u = getType("Pair", getType("Set", (TypeUse) dataType.copy()), (TypeUse) dataType.copy());
            thisBlock.addStmtNoTransform(getVarDecl("nt", u, getFnApp("next", new VarUse(dataPointSet))));
            thisBlock.addStmtNoTransform(getVarDecl(dataValue, (TypeUse) dataType.copy(), getFnApp("snd", new VarUse("nt"))));
            thisBlock.addStmtNoTransform(getVAssign(dataPointSet, getFnApp("fst", new VarUse("nt"))));
            ws.setBody(body);
        }
        /*
             * Add those methods that are not ignored
             */
        if (!isIgnored(clazz, method)) {
            String objectRef = uncap(namePrefix) + instance;
            thisBlock.addStmtNoTransform(newObj(inf, clazz, objectRef, false));
            generateAsyncTestCallAST(thisBlock, objectRef, method);
        }
        if (ws != null) {
            block.addStmtNoTransform(ws);
        }
        instance++;
    }
    return accesses;
}
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) WhileStmt(org.abs_models.frontend.ast.WhileStmt) DataTypeUse(org.abs_models.frontend.ast.DataTypeUse) ParametricDataTypeUse(org.abs_models.frontend.ast.ParametricDataTypeUse) Block(org.abs_models.frontend.ast.Block) MainBlock(org.abs_models.frontend.ast.MainBlock) VarUse(org.abs_models.frontend.ast.VarUse) HashSet(java.util.HashSet)

Aggregations

Block (org.abs_models.frontend.ast.Block)7 DataTypeUse (org.abs_models.frontend.ast.DataTypeUse)4 Model (org.abs_models.frontend.ast.Model)4 ParametricDataTypeUse (org.abs_models.frontend.ast.ParametricDataTypeUse)4 Test (org.junit.Test)4 CompilationUnit (org.abs_models.frontend.ast.CompilationUnit)3 MethodSig (org.abs_models.frontend.ast.MethodSig)3 TypeUse (org.abs_models.frontend.ast.TypeUse)3 ABSTest (org.abs_models.ABSTest)2 FrontendTest (org.abs_models.frontend.FrontendTest)2 ClassDecl (org.abs_models.frontend.ast.ClassDecl)2 DeltaAccess (org.abs_models.frontend.ast.DeltaAccess)2 DeltaDecl (org.abs_models.frontend.ast.DeltaDecl)2 InterfaceTypeUse (org.abs_models.frontend.ast.InterfaceTypeUse)2 List (org.abs_models.frontend.ast.List)2 MainBlock (org.abs_models.frontend.ast.MainBlock)2 MethodImpl (org.abs_models.frontend.ast.MethodImpl)2 ModifyClassModifier (org.abs_models.frontend.ast.ModifyClassModifier)2 SkipStmt (org.abs_models.frontend.ast.SkipStmt)2 VarDeclStmt (org.abs_models.frontend.ast.VarDeclStmt)2