Search in sources :

Example 6 with Catch

use of ast.Expression.Catch in project L42 by ElvisResearchGroup.

the class ToAst method visitCurlyBlock.

@Override
public Expression visitCurlyBlock(CurlyBlockContext ctx) {
    Doc doc = parseDoc(ctx.docsOpt());
    List<BlockContent> contents = new ArrayList<BlockContent>();
    for (BbContext b : ctx.bb()) {
        List<VarDec> decs = new ArrayList<VarDec>();
        for (DContext d : b.d()) {
            decs.add(parseVDec(d));
        }
        assert b.ks() != null;
        List<Catch> _catch = parseKs(b.ks());
        contents.add(new BlockContent(decs, _catch));
    }
    return new Expression.CurlyBlock(position(ctx), doc, contents);
}
Also used : Catch(ast.Expression.Catch) VarDec(ast.Ast.VarDec) BlockContent(ast.Expression.BlockContent) Doc(ast.Ast.Doc)

Example 7 with Catch

use of ast.Expression.Catch in project L42 by ElvisResearchGroup.

the class ToAst method visitRoundBlockAux.

private Expression visitRoundBlockAux(ParserRuleContext ctx, DocsOptContext docsOpt, List<BbContext> bB, ETopContext eTop) {
    Doc doc = parseDoc(docsOpt);
    List<BlockContent> contents = new ArrayList<BlockContent>();
    for (BbContext b : bB) {
        List<VarDec> decs = new ArrayList<VarDec>();
        for (DContext d : b.d()) {
            decs.add(parseVDec(d));
        }
        assert b.ks() != null;
        List<Catch> _catch = parseKs(b.ks());
        contents.add(new BlockContent(decs, _catch));
    }
    Expression inner = eTop.accept(this);
    return new Expression.RoundBlock(position(ctx), doc, inner, contents);
}
Also used : Expression(ast.Expression) Catch(ast.Expression.Catch) VarDec(ast.Ast.VarDec) BlockContent(ast.Expression.BlockContent) Doc(ast.Ast.Doc)

Example 8 with Catch

use of ast.Expression.Catch 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

Catch (ast.Expression.Catch)8 Expression (ast.Expression)6 Type (ast.Ast.Type)5 BlockContent (ast.Expression.BlockContent)5 ArrayList (java.util.ArrayList)5 VarDec (ast.Ast.VarDec)4 X (ast.Expression.X)4 Doc (ast.Ast.Doc)3 MethodWithType (ast.Expression.ClassB.MethodWithType)3 RoundBlock (ast.Expression.RoundBlock)3 MethodType (ast.Ast.MethodType)2 VarDecXE (ast.Ast.VarDecXE)2 Ast (ast.Ast)1 MethodSelectorX (ast.Ast.MethodSelectorX)1 Parameters (ast.Ast.Parameters)1 SignalKind (ast.Ast.SignalKind)1 ExpCore (ast.ExpCore)1 Block (ast.ExpCore.Block)1 Catch1 (ast.Expression.Catch1)1 FCall (ast.Expression.FCall)1