package coreVisitors; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; import tools.Map; import ast.Ast.*; import ast.ExpCore.ClassB; import ast.ExpCore; public class FromInClass extends CloneVisitor { private int j; private Path path; public FromInClass(int j,Path path){ this.j=j;this.path=path; } @Override protected Path liftP(Path p){ assert j>=1; if(p.isPrimitive()){return p;} int n=p.outerNumber(); if(n<j){return p;} //Path result=From.fromP(p, addOuter(j-1,path)); Path nLessJ=addOuter(-j,p); nLessJ=From.fromP(nLessJ,path); Path result= addOuter(j,nLessJ); return result; } public ExpCore visit(ClassB s) { int oldJ=this.j; this.j+=1; try{return super.visit(s);} finally{this.j=oldJ;} } private static Path addOuter(int k,Path p){ return Path.outer(p.outerNumber()+k,p.getCBar()); } public static ExpCore of(ClassB cb, Path source){ return cb.accept(new FromInClass(0,source)); } }