Search in sources :

Example 6 with Stmt

use of org.abs_models.frontend.ast.Stmt 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)

Aggregations

Stmt (org.abs_models.frontend.ast.Stmt)6 FrontendTest (org.abs_models.frontend.FrontendTest)3 ClassDecl (org.abs_models.frontend.ast.ClassDecl)3 Test (org.junit.Test)3 FunctionDecl (org.abs_models.frontend.ast.FunctionDecl)2 Model (org.abs_models.frontend.ast.Model)2 ReturnStmt (org.abs_models.frontend.ast.ReturnStmt)2 VarDeclStmt (org.abs_models.frontend.ast.VarDeclStmt)2 Type (org.abs_models.frontend.typechecker.Type)2 AssignStmt (org.abs_models.frontend.ast.AssignStmt)1 Exp (org.abs_models.frontend.ast.Exp)1 ExpressionStmt (org.abs_models.frontend.ast.ExpressionStmt)1 MethodImpl (org.abs_models.frontend.ast.MethodImpl)1 PureExp (org.abs_models.frontend.ast.PureExp)1 DataTypeType (org.abs_models.frontend.typechecker.DataTypeType)1 KindedName (org.abs_models.frontend.typechecker.KindedName)1