Search in sources :

Example 11 with Block

use of ast.ExpCore.Block in project L42 by ElvisResearchGroup.

the class InjectionOnCore method visit.

public ExpCore visit(Expression.RoundBlock s) {
    Doc doc = s.getDoc();
    assert s.getContents().size() <= 1 : s.getContents();
    List<Dec> decs = new ArrayList<Dec>();
    List<ExpCore.Block.On> ons = new ArrayList<ExpCore.Block.On>();
    ExpCore inner = s.getInner().accept(this);
    if (s.getContents().size() == 1) {
        Expression.BlockContent c = s.getContents().get(0);
        for (Ast.VarDec d : c.getDecs()) {
            assert d instanceof Ast.VarDecXE : d;
            Ast.VarDecXE sugarDec = (Ast.VarDecXE) d;
            //assert sugarDec.getT().isPresent() :sugarDec;
            Optional<Type> t = sugarDec.getT();
            String x = sugarDec.getX();
            ExpCore e = sugarDec.getInner().accept(this);
            decs.add(new Dec(sugarDec.isVar(), t, x, e));
        }
        //END FOR DECS
        ;
        for (Catch k : c.get_catch()) {
            assert k instanceof Expression.Catch1;
            Expression.Catch1 k1 = (Expression.Catch1) k;
            SignalKind kind = k1.getKind();
            String x = k1.getX();
            assert x.length() >= 1;
            ons.add(new ExpCore.Block.On(kind, x, k1.getT(), lift(k1.getInner()), k1.getP()));
        }
        return new Block(doc, decs, inner, ons, s.getP());
    }
    return new Block(doc, decs, inner, Collections.emptyList(), s.getP());
}
Also used : ExpCore(ast.ExpCore) Ast(ast.Ast) Catch(ast.Expression.Catch) ArrayList(java.util.ArrayList) Type(ast.Ast.Type) MethodType(ast.Ast.MethodType) Expression(ast.Expression) Doc(ast.Ast.Doc) Block(ast.ExpCore.Block) SignalKind(ast.Ast.SignalKind)

Aggregations

Block (ast.ExpCore.Block)11 ArrayList (java.util.ArrayList)7 ExpCore (ast.ExpCore)6 Dec (ast.ExpCore.Block.Dec)5 On (ast.ExpCore.Block.On)5 Type (ast.Ast.Type)4 WalkBy (ast.ExpCore.WalkBy)4 MethodType (ast.Ast.MethodType)2 MethodWithType (ast.ExpCore.ClassB.MethodWithType)2 Signal (ast.ExpCore.Signal)2 Ctx (auxiliaryGrammar.Ctx)2 Ast (ast.Ast)1 Doc (ast.Ast.Doc)1 Mdf (ast.Ast.Mdf)1 SignalKind (ast.Ast.SignalKind)1 MCall (ast.ExpCore.MCall)1 Using (ast.ExpCore.Using)1 Expression (ast.Expression)1 Catch (ast.Expression.Catch)1 Redex (ast.Redex)1