Skip to content
Snippets Groups Projects
Commit 640e5ff8 authored by Emma Söderberg's avatar Emma Söderberg
Browse files

No commit message

No commit message
parent f5897f79
No related branches found
No related tags found
No related merge requests found
...@@ -693,6 +693,9 @@ aspect JaddCodeGen { ...@@ -693,6 +693,9 @@ aspect JaddCodeGen {
stream.println(ind(5) + "that.setChild(node, i);"); stream.println(ind(5) + "that.setChild(node, i);");
stream.println(ind(4) + "oldNode.in$Circle(false);"); stream.println(ind(4) + "oldNode.in$Circle(false);");
stream.println(ind(4) + "rewriteState = that.state().pop();"); stream.println(ind(4) + "rewriteState = that.state().pop();");
// ES_2011-09-30: Code generation for incremental evaluation, rewrites
if (ASTNode.incremental) jjtGenIncrementalTrackRewrite3(stream);
//
stream.println(ind(3) + "} while(rewriteState == ASTNode$State.REWRITE_CHANGE);"); stream.println(ind(3) + "} while(rewriteState == ASTNode$State.REWRITE_CHANGE);");
stream.println(ind(3) + "if(rewriteState == ASTNode$State.REWRITE_NOCHANGE && that.is$Final()) {"); stream.println(ind(3) + "if(rewriteState == ASTNode$State.REWRITE_NOCHANGE && that.is$Final()) {");
if(ASTNode.stagedRewrites) if(ASTNode.stagedRewrites)
...@@ -990,6 +993,7 @@ aspect JaddCodeGen { ...@@ -990,6 +993,7 @@ aspect JaddCodeGen {
public void ASTDecl.jjtGenIncrementalTrackRewrite1(PrintWriter stream) { public void ASTDecl.jjtGenIncrementalTrackRewrite1(PrintWriter stream) {
stream.println(ind(2) + "if(that.init_children == null) {"); stream.println(ind(2) + "if(that.init_children == null) {");
stream.println(ind(3) + "that.init_children = new ASTNode[that.children.length];"); stream.println(ind(3) + "that.init_children = new ASTNode[that.children.length];");
stream.println(ind(3) + "that.rewritten_children = new boolean[that.children.length];");
stream.println(ind(2) + "}"); stream.println(ind(2) + "}");
stream.println(ind(2) + "if(that.init_children[i] == null) {"); stream.println(ind(2) + "if(that.init_children[i] == null) {");
stream.println(ind(3) + "that.init_children[i] = node.fullCopy();"); stream.println(ind(3) + "that.init_children[i] = node.fullCopy();");
...@@ -1004,6 +1008,12 @@ aspect JaddCodeGen { ...@@ -1004,6 +1008,12 @@ aspect JaddCodeGen {
//stream.println(ind(2) + "that.children[i] = node;"); //stream.println(ind(2) + "that.children[i] = node;");
//stream.println(ind(2) + "that.children[i].setParent(that);"); //stream.println(ind(2) + "that.children[i].setParent(that);");
} }
// ES_2011-09-30: Code generation for incremental evaluation, tracking rewrites
public void ASTDecl.jjtGenIncrementalTrackRewrite3(PrintWriter stream) {
stream.println(ind(4) + "if (rewriteState == ASTNode$State.REWRITE_CHANGE) {");
stream.println(ind(5) + "that.rewritten_children[i] = true;");
stream.println(ind(4) + "}");
}
// ES_2011-09-20: Code generation for incremental evaluation, tracking getChild // ES_2011-09-20: Code generation for incremental evaluation, tracking getChild
...@@ -1064,6 +1074,9 @@ aspect JaddCodeGen { ...@@ -1064,6 +1074,9 @@ aspect JaddCodeGen {
stream.println(ind(3) + "ASTNode d[] = new ASTNode[i << 1];"); stream.println(ind(3) + "ASTNode d[] = new ASTNode[i << 1];");
stream.println(ind(3) + "System.arraycopy(init_children, 0, d, 0, init_children.length);"); stream.println(ind(3) + "System.arraycopy(init_children, 0, d, 0, init_children.length);");
stream.println(ind(3) + "init_children = d;"); stream.println(ind(3) + "init_children = d;");
stream.println(ind(3) + "boolean[] b = new boolean[i << 1];");
stream.println(ind(3) + "System.arraycopy(rewritten_children, 0, b, 0, rewritten_children.length);");
stream.println(ind(3) + "rewritten_children = b;");
stream.println(ind(2) + "}"); stream.println(ind(2) + "}");
// //
stream.println(ind(2) + "if (getChild_handler != null) {"); stream.println(ind(2) + "if (getChild_handler != null) {");
...@@ -1130,6 +1143,13 @@ aspect JaddCodeGen { ...@@ -1130,6 +1143,13 @@ aspect JaddCodeGen {
stream.println(ind(4) + "System.arraycopy(init_children, i, d, i+1, init_children.length);"); stream.println(ind(4) + "System.arraycopy(init_children, i, d, i+1, init_children.length);");
stream.println(ind(3) + "}"); stream.println(ind(3) + "}");
stream.println(ind(3) + "init_children = d;"); stream.println(ind(3) + "init_children = d;");
stream.println(ind(3) + "boolean b[] = new boolean[i << 1];");
stream.println(ind(3) + "System.arraycopy(rewritten_children, 0, b, 0, rewritten_children.length);");
stream.println(ind(3) + "if (i < rewritten_children.length) {");
stream.println(ind(4) + "System.arraycopy(rewritten_children, i, b, i+1, rewritten_children.length);");
stream.println(ind(3) + "}");
stream.println(ind(3) + "rewritten_children = b;");
stream.println(ind(2) + "}"); stream.println(ind(2) + "}");
// //
stream.println(ind(2) + "if (getChild_handler != null) {"); stream.println(ind(2) + "if (getChild_handler != null) {");
...@@ -1171,6 +1191,7 @@ aspect JaddCodeGen { ...@@ -1171,6 +1191,7 @@ aspect JaddCodeGen {
stream.println(ind(3) + "if (init_children != null) {"); stream.println(ind(3) + "if (init_children != null) {");
stream.println(ind(4) + "init_children[i] = null;"); stream.println(ind(4) + "init_children[i] = null;");
stream.println(ind(4) + "System.arraycopy(init_children, i+1, init_children, i, init_children.length-i-1);"); stream.println(ind(4) + "System.arraycopy(init_children, i+1, init_children, i, init_children.length-i-1);");
stream.println(ind(4) + "System.arraycopy(rewritten_children, i+1, rewritten_children, i, rewritten_children.length-i-1);");
stream.println(ind(3) + "}"); stream.println(ind(3) + "}");
// //
stream.println(ind(3) + "if (getChild_handler != null) {"); stream.println(ind(3) + "if (getChild_handler != null) {");
...@@ -1771,6 +1792,7 @@ aspect JaddCodeGen { ...@@ -1771,6 +1792,7 @@ aspect JaddCodeGen {
// rewrite code // rewrite code
if (name().equals("ASTNode")) { if (name().equals("ASTNode")) {
stream.println(ind + "protected ASTNode[] ASTNode.init_children;"); stream.println(ind + "protected ASTNode[] ASTNode.init_children;");
stream.println(ind + "protected boolean[] ASTNode.rewritten_children;");
} }
// //
...@@ -1911,9 +1933,10 @@ aspect JaddCodeGen { ...@@ -1911,9 +1933,10 @@ aspect JaddCodeGen {
if (name().equals("ASTNode")) { if (name().equals("ASTNode")) {
stream.println(" if (attrID.equals(\"getChild\")) {"); stream.println(" if (attrID.equals(\"getChild\")) {");
stream.println(" int i = (Integer)_parameters;"); stream.println(" int i = (Integer)_parameters;");
stream.println(" if (init_children != null && init_children[i] != null) {"); stream.println(" if (rewritten_children != null && rewritten_children[i]) {");
stream.println(" getChild(i).notifyForRemove();"); stream.println(" getChild(i).notifyForRemove();");
stream.println(" children[i] = init_children[i];"); stream.println(" children[i] = init_children[i];");
stream.println(" rewritten_children[i] = false;");
stream.println(" init_children[i] = null;"); stream.println(" init_children[i] = null;");
stream.println(" }"); stream.println(" }");
stream.println(" }"); stream.println(" }");
...@@ -2193,8 +2216,8 @@ aspect JaddCodeGen { ...@@ -2193,8 +2216,8 @@ aspect JaddCodeGen {
stream.println(" public void " + name() + ".dumpCachedValues() {"); stream.println(" public void " + name() + ".dumpCachedValues() {");
if (name().equals("ASTNode")) { if (name().equals("ASTNode")) {
// rewrite code // rewrite code
stream.println(" for (int k = 0; init_children != null && k < init_children.length; k++) {"); stream.println(" for (int k = 0; rewritten_children != null && k < rewritten_children.length; k++) {");
stream.println(" if (init_children[k] != null) {"); stream.println(" if (rewritten_children[k]) {");
stream.println(" System.out.println(getChildNoTransform(k).relativeNodeID() + " + stream.println(" System.out.println(getChildNoTransform(k).relativeNodeID() + " +
"\" rewritten from \" + init_children[k].relativeNodeID());"); "\" rewritten from \" + init_children[k].relativeNodeID());");
stream.println(" }"); stream.println(" }");
......
Dependencies: Dependencies:
dep(A:a1 -> A:getName) dep(A:a1 -> A:getName)
dep(A:b2 -> A:getName) dep(A:b2 -> A:getName)
dep(A:b3 -> A:getName)
dep(A:b6 -> A:getName)
dep(A:c4 -> A:getName)
dep(A:c5 -> A:getName)
dep(A:a3 -> A:b3) dep(A:a3 -> A:b3)
dep(A:b3 -> A:getName)
dep(A:a4 -> A:c4) dep(A:a4 -> A:c4)
dep(A:c4 -> A:getName)
dep(A:b5 -> A:c5) dep(A:b5 -> A:c5)
dep(A:c5 -> A:getName)
dep(A:a6 -> A:b6) dep(A:a6 -> A:b6)
dep(A:b6 -> A:getName)
dep(A:a7 -> A:b7_2) dep(A:a7 -> A:b7_2)
dep(A:a7 -> A:c7_1) dep(A:a7 -> A:c7_1)
dep(A:a8 -> A:c8_1) dep(A:a8 -> A:c8_1)
......
Dependencies: Dependencies:
dep(A:c_String[a] -> A:getName)
dep(A:c_String[b] -> A:getName)
dep(A:a1 -> A:c_String[b])
dep(A:a0 -> A:c_String[a]) dep(A:a0 -> A:c_String[a])
dep(A:a1 -> A:c_String[b])
dep(A:c_String[b] -> A:getName)
dep(A:c_String[a] -> A:getName)
Cached values: Cached values:
value(A:a0, false) value(A:a0, false)
value(A:a1, true) value(A:a1, true)
......
Dependencies after b1.decl: Dependencies after b1.decl:
dep(A/List[0]/B[0]:decl -> A:getChild[0]) dep(A:getChild[0] -> A/List[0]:getChild[0])
dep(A/List[0]/B[0]:decl -> A/List[0]:getParent) dep(A:getChild[0] -> A/List[0]:getChild[1])
dep(A/List[0]/B[0]:decl -> A/List[0]:getChild[0])
dep(A/List[0]/B[0]:decl -> A/List[0]:getChild[1])
dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:getName) dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:getName)
dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:getUse)
dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:getParent) dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:getParent)
dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:getUse)
dep(A/List[0]/B[0]:decl -> A/List[0]/B[1]:getName) dep(A/List[0]/B[0]:decl -> A/List[0]/B[1]:getName)
dep(A/List[0]/B[0]:decl -> A/List[0]:getChild[0])
dep(A/List[0]/B[0]:decl -> A/List[0]:getChild[1])
dep(A/List[0]/B[0]:decl -> A/List[0]:getParent)
dep(A/List[0]/B[0]:decl -> A:getChild[0])
Cached values after b1.decl: Cached values after b1.decl:
A/List[0] rewritten from A/List
value(A/List[0]/B[0]:decl, A/List[0]/B[1]) value(A/List[0]/B[0]:decl, A/List[0]/B[1])
Dependencies after b2.decl: Dependencies after b2.decl:
dep(A/List[0]/B[0]:decl -> A:getChild[0]) dep(A:getChild[0] -> A/List[0]:getChild[0])
dep(A/List[0]/B[1]:decl -> A:getChild[0]) dep(A:getChild[0] -> A/List[0]:getChild[1])
dep(A/List[0]/B[0]:decl -> A/List[0]:getParent)
dep(A/List[0]/B[1]:decl -> A/List[0]:getParent)
dep(A/List[0]/B[0]:decl -> A/List[0]:getChild[0])
dep(A/List[0]/B[1]:decl -> A/List[0]:getChild[0])
dep(A/List[0]/B[0]:decl -> A/List[0]:getChild[1])
dep(A/List[0]/B[1]:decl -> A/List[0]:getChild[1])
dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:getName) dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:getName)
dep(A/List[0]/B[1]:decl -> A/List[0]/B[0]:getName)
dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:getUse)
dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:getParent) dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:getParent)
dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:getUse)
dep(A/List[0]/B[0]:decl -> A/List[0]/B[1]:getName) dep(A/List[0]/B[0]:decl -> A/List[0]/B[1]:getName)
dep(A/List[0]/B[1]:decl -> A/List[0]/B[1]:getUse) dep(A/List[0]/B[0]:decl -> A/List[0]:getChild[0])
dep(A/List[0]/B[0]:decl -> A/List[0]:getChild[1])
dep(A/List[0]/B[0]:decl -> A/List[0]:getParent)
dep(A/List[0]/B[0]:decl -> A:getChild[0])
dep(A/List[0]/B[1]:decl -> A/List[0]/B[0]:getName)
dep(A/List[0]/B[1]:decl -> A/List[0]/B[1]:getParent) dep(A/List[0]/B[1]:decl -> A/List[0]/B[1]:getParent)
dep(A/List[0]/B[1]:decl -> A/List[0]/B[1]:getUse)
dep(A/List[0]/B[1]:decl -> A/List[0]:getChild[0])
dep(A/List[0]/B[1]:decl -> A/List[0]:getChild[1])
dep(A/List[0]/B[1]:decl -> A/List[0]:getParent)
dep(A/List[0]/B[1]:decl -> A:getChild[0])
Cached values after b2.decl: Cached values after b2.decl:
A/List[0] rewritten from A/List
value(A/List[0]/B[0]:decl, A/List[0]/B[1]) value(A/List[0]/B[0]:decl, A/List[0]/B[1])
value(A/List[0]/B[1]:decl, A/List[0]/B[0]) value(A/List[0]/B[1]:decl, A/List[0]/B[0])
...@@ -8,14 +8,12 @@ public class Test123 { ...@@ -8,14 +8,12 @@ public class Test123 {
B b1 = new B("b", "a"); B b1 = new B("b", "a");
B b2 = new B("a", "b"); B b2 = new B("a", "b");
A a = new A(new test.ast.List().add(b1).add(b2)); A a = new A(new test.ast.List().add(b1).add(b2));
b1 = a.getB(0); b1 = a.getB(0);
b2 = a.getB(1); b2 = a.getB(1);
b1.decl(); b1.decl();
System.out.println("Dependencies after b1.decl:"); System.out.println("Dependencies after b1.decl:");
a.dumpDependencies(); a.dumpDependencies();
a.getChild(0).dumpDependencies(); a.getChild(0).dumpDependencies();
...@@ -27,8 +25,8 @@ public class Test123 { ...@@ -27,8 +25,8 @@ public class Test123 {
b1.dumpCachedValues(); b1.dumpCachedValues();
b2.dumpCachedValues(); b2.dumpCachedValues();
b2.setName("c"); b2.setName("c");
System.out.println("Dependencies after b2.setName:"); System.out.println("Dependencies after b2.setName:");
a.dumpDependencies(); a.dumpDependencies();
a.getChild(0).dumpDependencies(); a.getChild(0).dumpDependencies();
......
...@@ -78,3 +78,4 @@ test/Test124.java passed ...@@ -78,3 +78,4 @@ test/Test124.java passed
test/Test125.java passed test/Test125.java passed
test/Test126.java passed test/Test126.java passed
test/Test127.java passed test/Test127.java passed
test/Test128.java passed
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment