use of sugarVisitors.InjectionOnCore in project L42 by ElvisResearchGroup.
the class TranslationTest method runTypeSystem.
private static Program runTypeSystem(String scb1) {
ClassB cb1 = (ClassB) Desugar.of(Parser.parse(null, scb1)).accept(new InjectionOnCore());
Program p = Program.emptyLibraryProgram();
ClassB cb = newTypeSystem.TypeSystem.instance().topTypeLib(Phase.Coherent, p.evilPush(cb1));
return p.evilPush(cb);
}
use of sugarVisitors.InjectionOnCore in project L42 by ElvisResearchGroup.
the class ReplState method add.
public ReplState add(String code) {
Expression.ClassB cbEmpty = new ClassB(Doc.empty(), new ast.Ast.InterfaceHeader(), Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), Position.noInfo);
try {
//parse
Expression.ClassB codeTmp = (ClassB) Parser.parse("Repl", "{" + code + "}");
//new original
ClassReuse newOriginal = this.originalL;
List<ast.Expression.ClassB.Member> newOriginalMs = newOriginal.getInner().getMs();
newOriginalMs.addAll(codeTmp.getMs());
newOriginal.withInner(newOriginal.getInner().withMs(newOriginalMs));
//new src to desugar
List<ClassB.Member> newMs = new ArrayList<>();
int nestedAdded = 0;
for (Member m : this.desugaredL.getMs()) {
if (!(m instanceof NestedClass)) {
continue;
}
NestedClass nc = (NestedClass) m;
newMs.add(new ClassB.NestedClass(Doc.empty(), nc.getName(), cbEmpty, nc.getP()));
nestedAdded += 1;
}
newMs.addAll(codeTmp.getMs());
codeTmp = codeTmp.withMs(newMs);
Expression code2 = Desugar.of(codeTmp);
ExpCore.ClassB code3 = (ExpCore.ClassB) code2.accept(new InjectionOnCore());
// TODO: will die after new reduction Refresh of position identities, it is used to generate correct Java code.
code3 = (ExpCore.ClassB) code3.accept(new CloneVisitor() {
@Override
public ExpCore visit(ExpCore.ClassB cb) {
Position p = cb.getP();
cb = cb.withP(new Position(p.getFile(), p.getLine1(), p.getPos1(), p.getLine2(), p.getPos2(), p.get_next()));
return super.visit(cb);
}
});
//integrate new desugared src with old desugared code
List<Member> resultMs = new ArrayList<>(this.desugaredL.getMs());
for (int i = nestedAdded; i < code3.getMs().size(); i++) {
resultMs.add(code3.getMs().get(i));
}
code3 = code3.withMs(resultMs);
//call the repl and return
ExpCore.ClassB result = ProgramReduction.allSteps(code3);
return new ReplState(this.originalS + "\n" + code, newOriginal, result);
} catch (ParseCancellationException parser) {
System.out.println(parser.getMessage());
return null;
} catch (ErrorMessage msg) {
ErrorFormatter.topFormatErrorMessage(msg);
return null;
}
}
use of sugarVisitors.InjectionOnCore in project L42 by ElvisResearchGroup.
the class TestHelper method getExpCore.
public static ExpCore getExpCore(String source, String _e1) {
Expression code1 = Parser.parse("GeneratedByTestHelper_", _e1);
Expression code2 = Desugar.of(code1);
ExpCore e1 = code2.accept(new InjectionOnCore());
return e1;
}
use of sugarVisitors.InjectionOnCore in project L42 by ElvisResearchGroup.
the class TestHelper method getProgram.
public static Program getProgram(/*List<Path> paths,*/
String[] code) {
Program p0 = Program.emptyLibraryProgram();
Integer outerCount = code.length;
for (String s : code) {
Expression e = Parser.parse("This" + outerCount, s);
--outerCount;
ClassB ec = (ClassB) Desugar.of(e).accept(new InjectionOnCore());
p0 = p0.evilPush(ec);
}
return p0;
}
use of sugarVisitors.InjectionOnCore in project L42 by ElvisResearchGroup.
the class TestHelper method getClassB.
public static ClassB getClassB(String source, String e1) {
Expression code1 = Parser.parse("GeneratedByTestHelper_" + source, e1);
auxiliaryGrammar.WellFormedness.checkAll(code1);
Expression code2 = Desugar.of(code1);
assert auxiliaryGrammar.WellFormedness.checkAll(code2);
ExpCore.ClassB code3 = (ExpCore.ClassB) code2.accept(new InjectionOnCore());
assert coreVisitors.CheckNoVarDeclaredTwice.of(code3);
return code3;
}
Aggregations