Search in sources :

Example 1 with Header

use of ast.Ast.Header in project L42 by ElvisResearchGroup.

the class CloneVisitor method visit.

public Expression visit(ClassB s) {
    Header h = liftH(s.getH());
    List<FieldDec> fs = Map.of(this::liftF, s.getFields());
    List<Type> superT = Map.of(this::liftT, s.getSupertypes());
    List<Member> ms = Map.of(this::liftM, s.getMs());
    return new ClassB(liftDoc(s.getDoc1()), h, fs, superT, ms, s.getP());
}
Also used : FieldDec(ast.Ast.FieldDec) Type(ast.Ast.Type) MethodType(ast.Ast.MethodType) Header(ast.Ast.Header) ConcreteHeader(ast.Ast.ConcreteHeader) Member(ast.Expression.ClassB.Member) ClassB(ast.Expression.ClassB)

Example 2 with Header

use of ast.Ast.Header in project L42 by ElvisResearchGroup.

the class InjectionOnSugar method visit.

@Override
public Expression visit(ClassB s) {
    Doc doc1 = s.getDoc1();
    Header h = (s.isInterface()) ? new Ast.InterfaceHeader() : new Ast.TraitHeader();
    List<Type> supertypes = s.getSupertypes();
    List<Member> members = new ArrayList<>();
    for (ast.ExpCore.ClassB.Member mi : s.getMs()) {
        members.add(mi.match(nc -> new Expression.ClassB.NestedClass(nc.getDoc(), nc.getName(), lift(nc.getInner()), nc.getP()), mimpl -> new Expression.ClassB.MethodImplemented(mimpl.getDoc(), mimpl.getS(), lift(mimpl.getInner()), mimpl.getP()), mwt -> {
            Doc idoc = mwt.getDoc();
            MethodSelector is = mwt.getMs();
            MethodType mt = mwt.getMt();
            return new Expression.ClassB.MethodWithType(idoc, is, mt, lift(mwt.get_inner()), mwt.getP());
        }));
    }
    return new Expression.ClassB(doc1, h, Collections.emptyList(), supertypes, members, s.getP());
}
Also used : VarDecXE(ast.Ast.VarDecXE) UpdateVar(ast.ExpCore.UpdateVar) Ast(ast.Ast) Header(ast.Ast.Header) MCall(ast.ExpCore.MCall) Type(ast.Ast.Type) Member(ast.Expression.ClassB.Member) WellFormedness(auxiliaryGrammar.WellFormedness) MethodType(ast.Ast.MethodType) Loop(ast.ExpCore.Loop) MethodSelector(ast.Ast.MethodSelector) ArrayList(java.util.ArrayList) Visitor(coreVisitors.Visitor) ClassB(ast.ExpCore.ClassB) WalkBy(ast.ExpCore.WalkBy) Mdf(ast.Ast.Mdf) X(ast.ExpCore.X) VarDec(ast.Ast.VarDec) Path(ast.Ast.Path) Signal(ast.ExpCore.Signal) Match(tools.Match) Doc(ast.Ast.Doc) ExpCore._void(ast.ExpCore._void) ExpCore(ast.ExpCore) Block(ast.ExpCore.Block) Expression(ast.Expression) List(java.util.List) Position(ast.Ast.Position) Using(ast.ExpCore.Using) Optional(java.util.Optional) Collections(java.util.Collections) MethodType(ast.Ast.MethodType) MethodSelector(ast.Ast.MethodSelector) Ast(ast.Ast) ArrayList(java.util.ArrayList) Type(ast.Ast.Type) MethodType(ast.Ast.MethodType) Header(ast.Ast.Header) Expression(ast.Expression) Doc(ast.Ast.Doc) Member(ast.Expression.ClassB.Member) ClassB(ast.ExpCore.ClassB)

Example 3 with Header

use of ast.Ast.Header in project L42 by ElvisResearchGroup.

the class ToAst method visitClassB.

@Override
public Expression visitClassB(ClassBContext ctx) {
    //the number 1 if present is ignored
    Doc doc1 = parseDoc(ctx.docsOpt().get(0));
    Header h = parseHeader(ctx.header());
    List<Type> supertypes = new ArrayList<>();
    ImplsContext impl = ctx.impls();
    if (impl != null) {
        {
            int i = -1;
            for (TerminalNode p : impl.Path()) {
                i += 1;
                supertypes.add(Path.sugarParse(nameU(p)).toImmNT().withDoc(parseDoc(impl.docsOpt().get(0))));
            }
        }
    }
    List<Member> ms = visitMembers(ctx.member());
    List<Ast.FieldDec> fs = new ArrayList<>();
    for (FieldDecContext f : ctx.fieldDec()) {
        fs.add(parseFieldDec(f));
    }
    return new Expression.ClassB(doc1, h, fs, supertypes, ms, position(ctx));
}
Also used : Type(ast.Ast.Type) FieldDec(ast.Ast.FieldDec) Header(ast.Ast.Header) ConcreteHeader(ast.Ast.ConcreteHeader) InterfaceHeader(ast.Ast.InterfaceHeader) TraitHeader(ast.Ast.TraitHeader) Doc(ast.Ast.Doc) ClassB(ast.Expression.ClassB)

Aggregations

Header (ast.Ast.Header)3 Type (ast.Ast.Type)3 ConcreteHeader (ast.Ast.ConcreteHeader)2 Doc (ast.Ast.Doc)2 FieldDec (ast.Ast.FieldDec)2 MethodType (ast.Ast.MethodType)2 ClassB (ast.Expression.ClassB)2 Member (ast.Expression.ClassB.Member)2 Ast (ast.Ast)1 InterfaceHeader (ast.Ast.InterfaceHeader)1 Mdf (ast.Ast.Mdf)1 MethodSelector (ast.Ast.MethodSelector)1 Path (ast.Ast.Path)1 Position (ast.Ast.Position)1 TraitHeader (ast.Ast.TraitHeader)1 VarDec (ast.Ast.VarDec)1 VarDecXE (ast.Ast.VarDecXE)1 ExpCore (ast.ExpCore)1 Block (ast.ExpCore.Block)1 ClassB (ast.ExpCore.ClassB)1