From d27b3ab445abe46fd328f6b28f161effc4b266b0 Mon Sep 17 00:00:00 2001
From: rschoene <rene.schoene@tu-dresden.de>
Date: Mon, 16 Dec 2019 18:10:09 +0100
Subject: [PATCH] still wip, but build succeeds now.

- removed calls to parameterized constructor of CfgEntry (looks like a bug in relast: the constructor without relations is not generated)
---
 reusablecfg/src/main/jastadd/CFG.relast       |  1 +
 .../src/main/jastadd/PrintCfgTest.jrag        |  2 +-
 reusablecfg/src/main/jastadd/ReusableCfg.jrag |  4 +--
 reusablecfg/src/main/jastadd/SimpleCFG.jrag   | 32 +++++++++++++------
 4 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/reusablecfg/src/main/jastadd/CFG.relast b/reusablecfg/src/main/jastadd/CFG.relast
index c6a3f65..a5ce74a 100644
--- a/reusablecfg/src/main/jastadd/CFG.relast
+++ b/reusablecfg/src/main/jastadd/CFG.relast
@@ -13,6 +13,7 @@ CfgException : CfgNode;
 CfgMarker : CfgNode;
 
 rel CfgNode.successor* <-> CfgNode.predecessor* ;
+rel CfgNode.stmt -> Stmt ;
 
 // ==== legacy stuff ====
 /** The CFG entry node. */
diff --git a/reusablecfg/src/main/jastadd/PrintCfgTest.jrag b/reusablecfg/src/main/jastadd/PrintCfgTest.jrag
index cc881f8..0feb15b 100644
--- a/reusablecfg/src/main/jastadd/PrintCfgTest.jrag
+++ b/reusablecfg/src/main/jastadd/PrintCfgTest.jrag
@@ -65,7 +65,7 @@ aspect PrintCfgTest {
       Set<CfgNode> visited,
       Map<CfgNode, String> vars,
       Map<String, Integer> nextIds) {
-    Set<? extends CfgNode> successors = successors();
+    Collection<? extends CfgNode> successors = successors();
     if (successors.size() == 1) {
       CfgNode succ = successors.iterator().next();
       String nodeName = nextVarName(succ.varName(), nextIds);
diff --git a/reusablecfg/src/main/jastadd/ReusableCfg.jrag b/reusablecfg/src/main/jastadd/ReusableCfg.jrag
index 51dded1..791cf02 100644
--- a/reusablecfg/src/main/jastadd/ReusableCfg.jrag
+++ b/reusablecfg/src/main/jastadd/ReusableCfg.jrag
@@ -26,8 +26,8 @@ aspect ReusableCfg {
     first.cfgSuccessors().forEach(succ -> todo.put(result, succ));
     while (!todo.isEmpty()) {
 //      Stmt current = todo.pop(); // this should be an tuple (node, successor). to set the relation
-      CfgNode cfgNodeForPredecessor = todo.entrySet().iterator().next();
-      Stmt current = todo.remove(predecessor);
+      CfgNode cfgNodeForPredecessor = todo.entrySet().iterator().next().getKey();
+      Stmt current = todo.remove(cfgNodeForPredecessor);
 
       CfgNode cfgNodeForCurrent;
       if (cfgNodes.containsKey(current)) {
diff --git a/reusablecfg/src/main/jastadd/SimpleCFG.jrag b/reusablecfg/src/main/jastadd/SimpleCFG.jrag
index 64938e0..c57b672 100644
--- a/reusablecfg/src/main/jastadd/SimpleCFG.jrag
+++ b/reusablecfg/src/main/jastadd/SimpleCFG.jrag
@@ -88,18 +88,28 @@ aspect SimpleCFG {
   /**
    * The entry node in a filtered CFG.
    */
-  syn lazy CfgEntry BodyDecl.entry() = new CfgEntry(exit());
+//  syn lazy CfgEntry BodyDecl.entry() = new CfgEntry(exit());
+//
+//  eq MethodDecl.entry() =
+//      hasBlock()
+//      ?  new CfgEntry(getBlock().entry())
+//      : new CfgEntry(exit());
+//
+//  eq ConstructorDecl.entry() = new CfgEntry(getBlock().entry());
+//
+//  eq InstanceInitializer.entry() = new CfgEntry(getBlock().entry());
+//
+//  eq StaticInitializer.entry() = new CfgEntry(getBlock().entry());
 
-  eq MethodDecl.entry() =
-      hasBlock()
-      ?  new CfgEntry(getBlock().entry())
-      : new CfgEntry(exit());
+  syn lazy CfgEntry BodyDecl.entry() = new CfgEntry();
 
-  eq ConstructorDecl.entry() = new CfgEntry(getBlock().entry());
+  eq MethodDecl.entry() = new CfgEntry();
 
-  eq InstanceInitializer.entry() = new CfgEntry(getBlock().entry());
+  eq ConstructorDecl.entry() = new CfgEntry();
 
-  eq StaticInitializer.entry() = new CfgEntry(getBlock().entry());
+  eq InstanceInitializer.entry() = new CfgEntry();
+
+  eq StaticInitializer.entry() = new CfgEntry();
 
   /**
    * The exit node in a filtered CFG.
@@ -526,8 +536,10 @@ aspect SimpleCFG {
   }
 
   syn lazy CfgEntry LambdaBody.entry();
-  eq BlockLambdaBody.entry() = new CfgEntry(getBlock().entry());
-  eq ExprLambdaBody.entry() = new CfgEntry(getExpr().entry());
+//  eq BlockLambdaBody.entry() = new CfgEntry(getBlock().entry());
+//  eq ExprLambdaBody.entry() = new CfgEntry(getExpr().entry());
+  eq BlockLambdaBody.entry() = new CfgEntry();
+  eq ExprLambdaBody.entry() = new CfgEntry();
 
   syn nta CfgExit LambdaBody.exit() = new CfgExit();
 
-- 
GitLab