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

No commit message

No commit message
parent 640e5ff8
Branches
Tags
No related merge requests found
......@@ -1101,6 +1101,9 @@ aspect JaddCodeGen {
// ES_2011-09-20: Code generation for incremental evaluation, modifying tree, set child 4
public void ASTDecl.jjtGenIncrementalASTChangeSetChild4(PrintWriter stream) {
if (ASTNode.incrementalLevelParam) {
stream.println(ind(2) + "if (getChild_handler[i] == null) {");
stream.println(ind(3) + "getChild_handler[i] = new ASTNode$DepGraphNode(this, \"getChild\", new Integer(i));");
stream.println(ind(2) + "}");
stream.println(ind(2) + "if (!state().IN_REWRITE_EVAL && !childIsNTA(i)) {");
stream.println(ind(3) + "for (int k = 0; k < children.length; k++) {");
stream.println(ind(4) + "if (getChild_handler[k] != null && !childIsNTA(k)) {");
......@@ -2101,8 +2104,8 @@ aspect JaddCodeGen {
if (ASTNode.incrementalLevelParam) {
stream.println(" getParent_handler.notifyDependencies();");
stream.println(" numChildren_handler.notifyDependencies();");
stream.println(" for (int i = 0; i < getNumChildNoTransform(); i++) {");
stream.println(" if (getChild_handler[i].hasDependants()) {");
stream.println(" for (int i = 0; i < numChildren; i++) {");
stream.println(" if (!childIsNTA(i) && getChild_handler[i].hasDependants()) {");
stream.println(" getChildNoTransform(i).notifyForRemove();");
stream.println(" getChild_handler[i].notifyDependencies();");
stream.println(" }");
......
......@@ -74,3 +74,7 @@ tracking during rewrites. The implementation of "clearDepsInTree" should not inv
For this reason, the looping over child nodes uses the "numChildren" attribute directly to circumvent a call to "getNumChild"
or "getNumChildNoTransform".
There is a default rewrite on List included to allow for the "rewrite A in B" construct allowing rewrites affecting siblings
in a list. The typical (only?) example is the rewrite of "int x,y;" to "int x; int y;", or similar.
Dependencies after b1.decl:
dep(A/List[0]/B[0]:decl -> A:getChild[0])
dep(A/List[0]/B[0]:decl -> A/List[0]:getParent)
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:getChild[0] -> A/List[0]:getChild[0])
dep(A:getChild[0] -> 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]: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]:getUse)
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:
A/List[0] rewritten from A/List
value(A/List[0]/B[0]:decl, A/List[0]/B[1])
Dependencies after b2.setName:
dep(A:getChild[0] -> A/List[0]:getChild[0])
dep(A:getChild[0] -> A/List[0]:getChild[1])
Cached values after b2.setName:
A/List[0] rewritten from A/List
Dependencies/Cache after b1.decl and b2.decl:
dep(A/List[0]/B[0]:decl -> A:getChild[0])
dep(A/List[0]/B[1]:decl -> A:getChild[0])
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:getChild[0] -> A/List[0]:getChild[0])
dep(A:getChild[0] -> A/List[0]:getChild[1])
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]:getUse)
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]: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])
A/List[0] rewritten from A/List
value(A/List[0]/B[0]:decl, A/List[0]/B[1])
value(A/List[0]/B[1]:decl, A/List[0]/B[0])
Dependencies/Cache after a.setChild(1):
A/List[0] rewritten from A/List
Dependencies/Cache in replaced child:
No preview for this file type
......@@ -8,15 +8,13 @@ public class Test125 {
B b1 = new B("b", "a");
B b2 = new B("a", "b");
A a = new A(new test.ast.List().add(b1).add(b2));
b1 = a.getB(0);
b2 = a.getB(1);
b1.decl();
b2.decl();
System.out.println("Dependencies/Cache after b1.decl and b2.decl:");
a.dumpDependencies();
a.getChild(0).dumpDependencies();
......@@ -27,7 +25,6 @@ public class Test125 {
b1.dumpCachedValues();
b2.dumpCachedValues();
B b3 = new B("c", "b");
a.getChild(0).addChild(b3);
......
Dependencies/Cache after b1.decl and b2.decl:
dep(A/List[0]/B[0]:decl -> A:getChild[0])
dep(A/List[0]/B[1]:decl -> A:getChild[0])
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[1]:decl -> A/List[0]/B[0]:getName)
dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:getUse)
dep(A:getChild[0] -> A/List[0]:getChild[0])
dep(A:getChild[0] -> A/List[0]:getChild[1])
dep(A/List[0]/B[0]:decl -> A/List[0]/B[0]:a)
dep(A/List[0]/B[0]:a -> A/List[0]/B[0]:b)
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]: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[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[0]:a -> A/List[0]/B[0]:b)
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]:a)
dep(A/List[0]/B[1]:a -> A/List[0]/B[1]:b)
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])
dep(A/List[0]/B[1]:a -> A/List[0]/B[1]:b)
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]:a, false)
value(A/List[0]/B[0]:b, false)
......@@ -25,10 +28,11 @@ value(A/List[0]/B[1]:decl, A/List[0]/B[0])
value(A/List[0]/B[1]:a, false)
value(A/List[0]/B[1]:b, false)
Dependencies/Cache after a.addChild():
dep(A/List[0]/B[0]:a -> A/List[0]/B[0]:b)
dep(A/List[0]/B[1]:a -> A/List[0]/B[1]:b)
value(A/List[0]/B[0]:a, false)
value(A/List[0]/B[0]:b, false)
value(A/List[0]/B[1]:a, false)
value(A/List[0]/B[1]:b, false)
dep(A/List/B[0]:a -> A/List/B[0]:b)
dep(A/List/B[1]:a -> A/List/B[1]:b)
A/List[0] rewritten from A/List
value(A/List/B[0]:a, false)
value(A/List/B[0]:b, false)
value(A/List/B[1]:a, false)
value(A/List/B[1]:b, false)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment