diff --git a/reusablecfg/src/main/jastadd/CFG.relast b/reusablecfg/src/main/jastadd/CFG.relast index c6a3f6585ca3e80c47fe52d1922b0266edf1c6e0..a5ce74a17c8a2645b1195f2a159ad1ef53d17e76 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 cc881f8bc2e746752bd5a7e8ed88022c5a3c81da..0feb15b3d18fc3636717fe968c36d44ffe9cba1f 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 51dded1b579ebb5661501ebed26c8b89d0bef822..791cf0297d1b35c2057af0e0bf848f44cfb7bb42 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 64938e08b68d5bf0fae4b5fda3969e0f6656d633..c57b672726d62414f97aa53ca117f6db402e588c 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();