package reduction; import java.util.ArrayList; import java.util.HashMap; import platformSpecific.javaTranslation.Resources; import ast.Ast; import ast.ErrorMessage; import ast.ExpCore; import ast.Ast.Mdf; import ast.Ast.NormType; import ast.Ast.Path; import ast.Ast.Stage; import ast.ExpCore.ClassB; import ast.ExpCore.WalkBy; import ast.ExpCore.ClassB.Member; import ast.ExpCore.ClassB.NestedClass; import auxiliaryGrammar.Ctx; import auxiliaryGrammar.Functions; import programReduction.Program; import coreVisitors.CloneVisitor; import coreVisitors.CollectPaths0; import coreVisitors.ExtractCtxCompiled; import coreVisitors.IsCompiled; import coreVisitors.ReplaceCtx; import facade.Configuration; import facade.ErrorFormatter; import facade.PData; public class SmallStep extends Executor{ protected ClassB meta1(Program p, ClassB cb, NestedClass m) { log("---meta1--"); ExpCore e1=m.getInner(); //get cb-->ct //?Functions.clearCache(cb, Stage.Plus); //?for(ClassB cbi:p.getInnerData()){Functions.clearCache(cb, Stage.Plus);} //?p.recomputeStage(); //get p' try{ Program p1=p.evilPush(cb); ErrorFormatter.printType(p1); //check p' //Configuration.typeSystem.checkAll(p1); //e1=Norm.of(p1,e1); //check e1 //Configuration.typeSystem.checkMetaExpr(p1.getExecutableStar(),e1); //run m.e1-->e2 ExpCore e2=executeAtomicStep(new PData(p1),e1,m.getName()); //if(!(e2 instanceof ClassB)){Configuration.typeSystem.checkMetaExpr(p1.getExecutableStar(),e2);}//TODO: as assert ClassB cbRes=cb.withMember(m.withInner(e2)); //TODO: if e2 is an error, terminate with error, do it better? //is it already stopping if that happens? //if(e2 instanceof ExpCore.Signal){throw new ErrorMessage.MalformedFinalResult(cbRes, "error raised in metaexpression evauation");} //replace cb[m.e2] return cbRes; }finally{ } } protected ExpCore executeAtomicStep(PData p1, ExpCore e1,Ast.C nestedName) { //return step(p1,e1);//TODO push withP in compiledStep if(!IsCompiled.of(e1)){return step(p1, e1);} return Resources.withPDo(p1,()-> step(p1, e1)); } @Override protected void log(String s) { //System.out.println(s); } }