added slots to class
[swftools.git] / lib / as3 / mklib.c
index 5d9bd04..98d54cd 100644 (file)
@@ -104,7 +104,6 @@ void load_libraries(char*filename, int pass, FILE*fi)
     tosort=abc->classes;
     for(t=0;t<abc->classes->num;t++) {index[t]=t;}
     qsort(index, abc->classes->num, sizeof(int), compare_classes);
-
     for(t=0;t<abc->classes->num;t++) {
         abc_class_t*cls = array_getvalue(abc->classes, index[t]);
         int access = cls->classname->ns->access;
@@ -131,6 +130,7 @@ void load_libraries(char*filename, int pass, FILE*fi)
             fprintf(fi, "static classinfo_t %s;\n", id);
         } else if(pass==1) {
             fprintf(fi, "static classinfo_t %s = {0x%02x, 0x%02x, \"%s\", \"%s\"", id, access, flags, package, name);
+            fprintf(fi, ", 0"); //slot
             if(superid)
                 fprintf(fi, ", &%s, interfaces:{", superid);
             else
@@ -192,10 +192,17 @@ void load_libraries(char*filename, int pass, FILE*fi)
                 default:
                     fprintf(stderr, "Unknown trait type %d\n", trait->kind);
             }
+            int flags = is_static?FLAG_STATIC:0;
+
+            if(access == ACCESS_PACKAGE) flags|=FLAG_PUBLIC;
+            if(access == ACCESS_PRIVATE) flags|=FLAG_PRIVATE;
+            if(access == ACCESS_PROTECTED) flags|=FLAG_PROTECTED;
+            if(access == ACCESS_PACKAGEINTERNAL) flags|=FLAG_INTERNAL;
+
             if(pass==0) {
                 fprintf(fi, "static memberinfo_t %s;\n", id2);
             } if(pass==1) {
-                fprintf(fi, "static memberinfo_t %s = {%s, \"%s\"", id2, type, name);
+                fprintf(fi, "static memberinfo_t %s = {%s, 0x%02x, \"%s\"", id2, type, flags, name);
                 if(!retvalue)
                     fprintf(fi, ", 0");
                 else
@@ -217,6 +224,18 @@ cont:
         if(id) free(id);
         if(superid) free(superid);
     }
+    
+    for(t=0;t<abc->scripts->num;t++) {
+        abc_script_t*s = array_getvalue(abc->scripts, t);
+        trait_list_t*l=0;
+       for(l=s->traits;l;l=l->next) {
+            trait_t*trait = l->trait;
+            if(trait->kind == TRAIT_METHOD) {
+               printf("%s\n", multiname_tostring(trait->name));
+           }
+       }
+    }
+
 
     swf_FreeABC(abc);
     memfile_close(file);tag->data=0;