changes
authorbdemsky <bdemsky>
Thu, 19 Jul 2007 00:06:13 +0000 (00:06 +0000)
committerbdemsky <bdemsky>
Thu, 19 Jul 2007 00:06:13 +0000 (00:06 +0000)
Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java
Robust/src/IR/Flat/BuildCode.java
Robust/src/IR/TypeUtil.java

index 6da94379bc60418b66f4dbb1f5f18611a13fb679..c5b626a943b54fb6fba5f91b1167de91791cc920 100644 (file)
@@ -131,8 +131,6 @@ public class TaskAnalysis {
            
            analyseTasks(trigger);
        }
-
-
        
        /** Creating DOT files */
        Enumeration e=flagstates.keys();
index 34e2209640405ab07956078b4fd5c1f190a1c73a..1aa4a1e326bee3558bb3e4aa3ef554fcd6a20269 100644 (file)
@@ -293,31 +293,18 @@ public class BuildCode {
            outmethod.println("  }");
 
 
-           ClassDescriptor cd=typeutil.getClass(state.main);
-           Set mainset=cd.getMethodTable().getSet("main");
-           for(Iterator mainit=mainset.iterator();mainit.hasNext();) {
-               MethodDescriptor md=(MethodDescriptor)mainit.next();
-               if (md.numParameters()!=1)
-                   continue;
-               Descriptor pd=md.getParameter(0);
-               TypeDescriptor tpd=(pd instanceof TagVarDescriptor)?((TagVarDescriptor)pd).getType():((VarDescriptor)pd).getType();
-               if (tpd.getArrayCount()!=1)
-                   continue;
-               if (!tpd.getSymbol().equals("String"))
-                   continue;
-
-               if (!md.getModifiers().isStatic())
-                   throw new Error("Error: Non static main");
-               outmethod.println("   {");
-               if (GENERATEPRECISEGC) {
-                   outmethod.print("       struct "+cd.getSafeSymbol()+md.getSafeSymbol()+"_"+md.getSafeMethodDescriptor()+"_params __parameterlist__={");
-                   outmethod.println("1, NULL,"+"stringarray};");
-                   outmethod.println("     "+cd.getSafeSymbol()+md.getSafeSymbol()+"_"+md.getSafeMethodDescriptor()+"(& __parameterlist__);");
-               } else
-                   outmethod.println("     "+cd.getSafeSymbol()+md.getSafeSymbol()+"_"+md.getSafeMethodDescriptor()+"(stringarray);");
-               outmethod.println("   }");
-               break;
-           }
+           MethodDescriptor md=typeutil.getMain();
+           ClassDescriptor cd=typeutil.getMainClass();
+
+           outmethod.println("   {");
+           if (GENERATEPRECISEGC) {
+               outmethod.print("       struct "+cd.getSafeSymbol()+md.getSafeSymbol()+"_"+md.getSafeMethodDescriptor()+"_params __parameterlist__={");
+               outmethod.println("1, NULL,"+"stringarray};");
+               outmethod.println("     "+cd.getSafeSymbol()+md.getSafeSymbol()+"_"+md.getSafeMethodDescriptor()+"(& __parameterlist__);");
+           } else
+               outmethod.println("     "+cd.getSafeSymbol()+md.getSafeSymbol()+"_"+md.getSafeMethodDescriptor()+"(stringarray);");
+           outmethod.println("   }");
+           
            if (state.THREAD) {
                outmethod.println("pthread_mutex_lock(&gclistlock);");
                outmethod.println("threadcount--;");
index 044a2316a3ce45ae157a9da650829d3581066f08..981a098da102bc556f61196ae1d1b82b77c1f41e 100644 (file)
@@ -34,6 +34,32 @@ public class TypeUtil {
        }
     }
 
+    public ClassDescriptor getMainClass() {
+       return getClass(state.main);
+    }
+
+    public MethodDescriptor getMain() {
+       ClassDescriptor cd=getMainClass();
+       Set mainset=cd.getMethodTable().getSet("main");
+       for(Iterator mainit=mainset.iterator();mainit.hasNext();) {
+           MethodDescriptor md=(MethodDescriptor)mainit.next();
+           if (md.numParameters()!=1)
+               continue;
+           Descriptor pd=md.getParameter(0);
+           TypeDescriptor tpd=(pd instanceof TagVarDescriptor)?((TagVarDescriptor)pd).getType():((VarDescriptor)pd)
+               .getType();
+           if (tpd.getArrayCount()!=1)
+               continue;
+           if (!tpd.getSymbol().equals("String"))
+               continue;
+           
+           if (!md.getModifiers().isStatic())
+               throw new Error("Error: Non static main");
+           return md;
+       }
+       throw new Error(cd+" has no main");
+    }
+
     public void createFullTable() {
        subclasstable=new Hashtable();