Charj: add macros for sdag pup/c'tor codegen
authorAaron Becker <akbecker@gmail.com>
Mon, 23 Aug 2010 22:28:53 +0000 (17:28 -0500)
committerAaron Becker <akbecker@gmail.com>
Mon, 23 Aug 2010 22:28:53 +0000 (17:28 -0500)
src/langs/charj/src/charj/translator/Charj.stg
src/langs/charj/src/charj/translator/ClassSymbol.java

index 1b549e247c96883dbbe2086401e95287b3a1a8fc..46c1c03fb8d8caebcf5bddf3e90f63141d941436 100644 (file)
@@ -249,6 +249,7 @@ void <sym.name>::pup(PUP::er &p)
 
 <endif>
     <pupers; separator="\n">
+    <if(sym.hasSDAG)>__sdag_pup(p)<endif>
 }
 
 <if(!sym.hasDefaultCtor)>
@@ -268,6 +269,7 @@ void <sym.name>::pup(PUP::er &p)
 void <sym.name>::constructorHelper()
 {
     <inits; separator="\n">
+    <if(sym.hasSDAG)>__sdag_init(p)<endif>
 }
 
 <if(needsMigration)>
@@ -305,6 +307,7 @@ chareDeclaration_h_cont(pds, sym, ident, ext, csds, needsPupInit, needsMigration
 <else>
 <if(ext)>/* superclass: <ext> */<endif>
 class <ident>: public CBase_<ident> {
+    <if(hasSDAG)><ident>_SDAG_CODE<endif>
     <csds; separator="\n">
     <if(needsPupInit)>
     private: void pupInitMethod();
index 37309f91a0a8788ed756ffdd73db25ff348c7c94..20a25a847f7fc9628e3d11536432c3806a39ecfe 100644 (file)
@@ -345,4 +345,12 @@ public class ClassSymbol extends SymbolWithScope implements Scope, Type {
         }
         return PUPers;
     }
+
+    public boolean hasSDAG() {
+        List<String> inits = new ArrayList<String>();
+        for (Map.Entry<String, MethodSymbol> e : methods.entrySet()) {
+            if (e.getValue().hasSDAG) return true;
+        }
+        return false;
+    }
 }