diff --git a/examples/actors/xdf/MergeActors.jrag b/examples/actors/xdf/MergeActors.jrag index b72d6e4301389f4b1df2cb91e994952feabec1fe..4763296c34e933a3808a8c2760d523de441c7f37 100644 --- a/examples/actors/xdf/MergeActors.jrag +++ b/examples/actors/xdf/MergeActors.jrag @@ -42,9 +42,9 @@ aspect MergeActors { } } System.out.println("Merging "+i.name()+":"+i.next.name()); + i.isMerged(true); i.merge(i.next); i.setName(i.name()+"_"+i.next.name()); - i.isMerged(true); i.next.disabled = true; i.next = i.next.next; } @@ -74,6 +74,10 @@ aspect MergeActors { System.out.println("Could not print to file: "+name()); } } + if (disabled) { + // remove from AST + is$Final(false); + } } private boolean Instance.isMerged = false; @@ -123,4 +127,10 @@ aspect Rewrites { return new ComplexElement(); } } + rewrite Instance { + when (disabled) to ComplexElement { + System.out.println("Removing instance: "+name()); + return new ComplexElement(); + } + } } diff --git a/examples/actors/xlim/Merge.jrag b/examples/actors/xlim/Merge.jrag index 234c0aaf5f0fd8a52584549a83ad023753633429..87f11218c6d9d54df1a70fc223e5ed80ea606228 100644 --- a/examples/actors/xlim/Merge.jrag +++ b/examples/actors/xlim/Merge.jrag @@ -15,12 +15,16 @@ aspect Merge { public void EmptyStart.merge(Start dest) {} public void design.merge(design dest) { - HashSet<module> ops = getActions(new HashSet<module>()); - System.out.println("Adding actions to: "+name()); + HashSet<module> ops = dest.getActions(new HashSet<module>()); + System.out.println("Adding actions from: "+dest.name()+" to: "+name()); + setName(name()+"_"+dest.name()); List<Element> eList = getElements(); for (module o : ops) { + o.setName(dest.name()+"_"+o.name()); System.out.println(" Adding "+o.name()); - eList.insertChild(o,eList.getNumChild()-2); + eList.insertChild(o,eList.getNumChild()-2); + actionScheduler().addTaskCall(o); +// eList.addChild(o); } } } @@ -48,3 +52,29 @@ aspect Actions { return ops; } } + +aspect ActionScheduler { + syn module Element.actionScheduler() = null; + eq ComplexElement.actionScheduler() { + for (Element e : getElements()) { + if (e.actionScheduler() != null) { + return e.actionScheduler(); + } + } + return null; + } + eq module.actionScheduler() { + if (isActionScheduler()) { + return this; + } + return null; + } + + boolean module.isActionScheduler() { + return kind().equals("action-scheduler"); + } + + void module.addTaskCall(module m) { + + } +} \ No newline at end of file diff --git a/examples/actors/xlim/SDF.jrag b/examples/actors/xlim/SDF.jrag index 309375cf3e92fd5946a22923cf87e94dcb3704ea..5b3164b6fd5eeab1f0b547a69117e39240f49d18 100644 --- a/examples/actors/xlim/SDF.jrag +++ b/examples/actors/xlim/SDF.jrag @@ -56,6 +56,18 @@ aspect Misc { return super.name(); } + public void Element.setName(String name) {} + public void ComplexElement.setName(String name) { + for (Attribute a : getAttributes()) { + a.setName(name); + } + } + void Attribute.setName(String name) {} + void name.setName(String name) { + getAttrValue().setLITERAL(fix(name)); + } + + static String ASTNode.fix(String s) { if (s.indexOf('"') == 0) { return s.substring(1,s.length()-1);