import edu.neu.ccs.demeterf.ID; import edu.neu.ccs.demeterf.IDfa; import edu.neu.ccs.demeterf.Traversal; import edu.neu.ccs.demeterf.control.EdgeControl; import edu.neu.ccs.demeter.Ident; class FL2SL extends ID{ static Env empty = new Env(); static Traversal trav = new Traversal(new FL2SL(), EdgeControl.builtIns(Field.class, Formal.class, Method.class)); static Env convert(List c){ return trav.traverse(c); } static Env convert(MethodDefs d){ return trav.traverse(d.mthds); } Env apply(Formal f){ return empty.push(""+f.id); } Env apply(Field f){ return empty.push(""+f.id); } Env apply(ClassDecl c){ return empty.push(""+c.id); } Env apply(Method m){ return empty.push(""+m.id); } Env combine(ConsList c, Env f, Env r){ return r.push(f); } Env combine(EmptyList e){ return empty; } } class RewriteEx extends RuntimeException{ RewriteEx(String s){ super(s); } } public class Rewrite extends IDfa{ static Traversal trav = new Traversal(new Rewrite(), EdgeControl.builtIns(Ident.class)); static T rewrite(T t){ return trav.traverse(t, new Env().push("a")); } Env update(ClassDecl cl, Env env){ return FL2SL.convert(cl.flds); } Env update(Method m, Env env){ return env.push("this").push(FL2SL.convert(m.getArgs())); } Env update(Constr c, Env env){ return env.push(FL2SL.convert(c.getArgs())); } Env update(RevDefRest r, Env env){ return env.push(""+r.id); } VarExp apply(SymExp s, Env env){ return new AddrExp(env.lookup(""+s.id)); } }