From c7e9da89f18efb8ad06e94d9ba4a855c15fd509c Mon Sep 17 00:00:00 2001
From: Anders Nilsson <csandersn@bode>
Date: Tue, 26 May 2009 08:56:41 +0200
Subject: [PATCH] First demo version for Actors meeting in Lund.

---
 examples/actors/MergeActors.java           |  2 +-
 examples/actors/xdf/MergeActors.jrag       | 30 +++++++++++++++++++++-
 examples/actors/xdf/SSR.jrag               |  4 +--
 examples/actors/xlim/GeneratedAspects.jrag |  2 +-
 4 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/examples/actors/MergeActors.java b/examples/actors/MergeActors.java
index b37e10f..41fb854 100644
--- a/examples/actors/MergeActors.java
+++ b/examples/actors/MergeActors.java
@@ -27,7 +27,7 @@ public class MergeActors extends XdfParser {
 // 		}
 
 		ast.mergeActors();
-		ast.prettyPrint("",System.out);
+// 		ast.prettyPrint("",System.out);
 	}
 }
 
diff --git a/examples/actors/xdf/MergeActors.jrag b/examples/actors/xdf/MergeActors.jrag
index 586daa1..6e5fe29 100644
--- a/examples/actors/xdf/MergeActors.jrag
+++ b/examples/actors/xdf/MergeActors.jrag
@@ -7,6 +7,9 @@
  */                                                             
 
 import java.util.HashSet;
+import java.io.File; 
+import java.io.FileNotFoundException; 
+import java.io.PrintStream; 
 
 aspect MergeActors {
 	void Element.mergeActors() {}
@@ -45,7 +48,10 @@ aspect MergeActors {
 			}
 		}
 		// Now generate files for the newly merged actor instances.
-		for (Instance i : getInstances()) {}
+		System.out.println("** Merging finished, now generate files **");
+		for (Instance i : getInstances()) {
+			i.genFile();
+		}
 	}
 // 	void Connection.mergeActors() {
 // 		Instance src = getSource();
@@ -60,6 +66,18 @@ aspect MergeActors {
 		xlimInstance().merge(inst.xlimInstance());
 	}
 
+	void Instance.genFile() {		
+		System.out.println("generating actor: "+name());
+		try {
+			if (!(xlimInstance() instanceof xlimAST.EmptyStart)) {
+				System.out.println("  Writing");
+				xlimInstance().prettyPrint("",new PrintStream(new File(name()+".xlim")));
+			}
+		} catch (FileNotFoundException e) {
+			System.out.println("Could not print to file: "+name());
+		} 
+	}
+
 }
 
 aspect Misc {
@@ -79,6 +97,16 @@ aspect Misc {
 		return getInstances(new HashSet<Instance>());
 	}
 	syn HashSet<Instance> Element.getInstances(HashSet<Instance> inst) = inst;
+	eq XDF.getInstances(HashSet<Instance> inst) {
+		for (Element e : getElements()) {
+			inst = e.getInstances(inst);
+		}
+		return inst;
+	}
+	eq Instance.getInstances(HashSet<Instance> inst) {
+		inst.add(this);
+		return inst;
+	}
 }
 
 aspect Rewrites {
diff --git a/examples/actors/xdf/SSR.jrag b/examples/actors/xdf/SSR.jrag
index fb58374..3407e26 100644
--- a/examples/actors/xdf/SSR.jrag
+++ b/examples/actors/xdf/SSR.jrag
@@ -30,14 +30,14 @@ aspect SSR {
 aspect SDF {
 	syn boolean Instance.isSDF() = xlimInstance().isSDF();
 
-	syn xlimAST.Start Instance.xlimInstance() {
+	syn lazy xlimAST.Start Instance.xlimInstance() {
 		try {
  			System.out.println("Trying to open: "+name());
 			xlimAST.XmlParser parser = new xlimAST.XmlParser(new FileReader(name()+".xlim"));
 			return parser.Start();
 		} catch (Exception e) {
 			System.out.println( name()+".xlim not found");
-// 			e.printStackTrace();
+ 			e.printStackTrace();
 			return new xlimAST.EmptyStart();
 		}
 	}
diff --git a/examples/actors/xlim/GeneratedAspects.jrag b/examples/actors/xlim/GeneratedAspects.jrag
index f5a41a0..b7f5eab 100644
--- a/examples/actors/xlim/GeneratedAspects.jrag
+++ b/examples/actors/xlim/GeneratedAspects.jrag
@@ -215,7 +215,7 @@ aspect PrettyPrinter {
   }
 
   public void actor_port.prettyPrint(String ind, PrintStream pStream) {
-    pStream.print(ind+"<actor_port ");
+    pStream.print(ind+"<actor-port ");
     for (int i=0; i<getNumAttribute(); i++) {
       getAttribute(i).prettyPrint(ind,pStream);
     }
-- 
GitLab