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