changes
authorbdemsky <bdemsky>
Wed, 16 Aug 2006 07:24:43 +0000 (07:24 +0000)
committerbdemsky <bdemsky>
Wed, 16 Aug 2006 07:24:43 +0000 (07:24 +0000)
Robust/src/IR/Flat/BuildCode.java
Robust/src/Runtime/runtime.c
Robust/src/Runtime/runtime.h

index 09679d14b25c23cde5ab8de724fe6dd9a2327840..a86a8c39a08c02d9d36881c4132c2964a0be598d 100644 (file)
@@ -86,6 +86,7 @@ public class BuildCode {
        outstructs.println("#define STRINGTYPE "+typeutil.getClass(TypeUtil.StringClass).getId());
        outstructs.println("#define CHARARRAYTYPE "+
                           (state.getArrayNumber((new TypeDescriptor(TypeDescriptor.CHAR)).makeArray(state))+state.numClasses()));
+       outstructs.println("#define NUMCLASSES "+state.numClasses());
        if (state.TASK)
            outstructs.println("#define STARTUPTYPE "+typeutil.getClass(TypeUtil.StartupClass).getId());
 
@@ -486,8 +487,10 @@ public class BuildCode {
        /* Output class structure */
        classdefout.println("struct "+cn.getSafeSymbol()+" {");
        classdefout.println("  int type;");
-       if (cn.hasFlags())
+       if (cn.hasFlags()) {
            classdefout.println("  int flag;");
+           classdefout.println("  void * flagptr;");
+       }
        printClassStruct(cn, classdefout);
        classdefout.println("};\n");
 
@@ -1087,13 +1090,17 @@ public class BuildCode {
        while(orit.hasNext()) {
            TempDescriptor temp=(TempDescriptor)orit.next();
            int ormask=((Integer)flagortable.get(temp)).intValue();
-           output.println("flagor("+generateTemp(fm, temp)+", 0x"+Integer.toHexString(ormask)+");");
+           int andmask=0xFFFFFFF;
+           if (flagandtable.containsKey(temp))
+               andmask=((Integer)flagandtable.get(temp)).intValue();
+           output.println("flagorand("+generateTemp(fm, temp)+", 0x"+Integer.toHexString(ormask)+", 0x"+Integer.toHexString(andmask)+");");
        }
        Iterator andit=flagandtable.keySet().iterator();
        while(andit.hasNext()) {
            TempDescriptor temp=(TempDescriptor)andit.next();
            int andmask=((Integer)flagandtable.get(temp)).intValue();
-           output.println("flagand("+generateTemp(fm, temp)+", 0x"+Integer.toHexString(andmask)+");");
+           if (!flagortable.containsKey(temp))
+               output.println("flagorand("+generateTemp(fm, temp)+", 0, 0x"+Integer.toHexString(andmask)+");");
        }
     }
 }
index a6e2f6a94b6282b74056b374be9f1ea24007f73d..4272a0e9ef379c332718d944cc23f4ff132b1666 100644 (file)
@@ -11,12 +11,14 @@ extern int classsize[];
 #endif
 
 #ifdef TASK
+#include "tasks.h"
+
 int main(int argc, char **argv) {
   int i;
   /* Allocate startup object */
   struct ___StartupObject___ *startupobject=(struct ___StartupObject___*) allocate_new(STARTUPTYPE);
-  /* Set flag */
-  flagor(startupobject,1);
+  /* Set flags */
+  flagorand(startupobject,1,0xFFFFFFFF);
 
   /* Build array of strings */
   struct ArrayObject * stringarray=allocate_newarray(STRINGARRAYTYPE, argc); 
@@ -30,15 +32,25 @@ int main(int argc, char **argv) {
   processtasks();
 }
 
-void flagor(void * ptr, int ormask) {
+void flagorand(void * ptr, int ormask, int andmask) {
   ((int *)ptr)[1]|=ormask;
-}
-
-void flagand(void * ptr, int andmask) {
   ((int *)ptr)[1]&=andmask;
 }
 
-void processtasks();
+void processtasks() {
+  int i;
+
+  for(i=0;i<numtasks;i++) {
+    struct taskdescriptor * task=taskarray[i];
+    int j;
+
+    for(j=0;j<task->numParameters;j++) {
+      struct parameterdescriptor *param=task->descriptorarray[j];
+      
+    }
+  }
+
+}
 #endif
 
 int ___Object______hashcode____(struct ___Object___ * ___this___) {
index f9031810488241b5d74a1b28a96b3b8ff4a0c08b..c3d195279c60dd5cad7b1686bf2f7004b708abd0 100644 (file)
@@ -10,7 +10,7 @@ struct ___String___ * NewString(char *str,int length);
 
 void failedboundschk();
 void failednullptr();
-void flagor(void * ptr, int ormask);
-void flagand(void * ptr, int andmask);
+void flagorand(void * ptr, int ormask, int andmask);
+
 
 #endif