added test for class-level anonymous functions
[swftools.git] / lib / as3 / mklib.c
index 0ba4e24..8ef8fe7 100644 (file)
@@ -125,18 +125,18 @@ void write_member_info(FILE*fi, char*parent, char*id2, const char*name, int flag
                 retvalue = 0;
         } //fallthrough
         case TRAIT_FUNCTION:
-            type = "MEMBER_METHOD";
+            type = "INFOTYPE_METHOD";
             break;
         case TRAIT_CONST:
         case TRAIT_GETTER:
         case TRAIT_SETTER:
         case TRAIT_SLOT:
-            type = "MEMBER_SLOT";
+            type = "INFOTYPE_SLOT";
             break;
         default:
             fprintf(stderr, "Unknown trait type %d\n", trait->kind);
     }
-    fprintf(fi, "static memberinfo_t %s = {%s, 0x%02x, \"%s\"", id2, type, flags, name);
+    fprintf(fi, "static memberinfo_t %s = {%s, 0x%02x, \"%s\"", type, flags, id2, name);
     if(!retvalue)
         fprintf(fi, ", 0");
     else
@@ -147,16 +147,13 @@ void write_member_info(FILE*fi, char*parent, char*id2, const char*name, int flag
     else
         fprintf(fi, ", &%s", parent); // parent
 
-    fprintf(fi, "};\n");
+    fprintf(fi, ", 0,0,0};\n");
 }
 
-int access2flags(int access)
+int access2flags(multiname_t*m)
 {
+    int access = m->ns->access;
     int flags=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;
     return flags;
 }
 
@@ -218,11 +215,11 @@ 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
+                fprintf(fi, ", (void*)0"); //slot
                 if(superid)
                     fprintf(fi, ", &%s, interfaces:{", superid);
                 else
-                    fprintf(fi, ", 0, {");
+                    fprintf(fi, ", (void*)0, interfaces:{");
                 if(cls->interfaces) {
                     multiname_list_t*i=cls->interfaces;
                     while(i) {
@@ -231,7 +228,7 @@ void load_libraries(char*filename, int pass, FILE*fi)
                         i = i->next;
                     }
                 }
-                fprintf(fi, "0}};\n");
+                fprintf(fi, "(void*)0}};\n");
             } else if(pass==2) {
                 trait_list_t*l=cls->traits;
                 fprintf(fi, "    dict_put(d, &%s, &%s);\n", id, id);
@@ -258,7 +255,7 @@ void load_libraries(char*filename, int pass, FILE*fi)
                 }
                 int flags = is_static?FLAG_STATIC:0;
                 //flags |= access2flags(access);
-                flags |= access2flags(trait->name->ns->access);
+                flags |= access2flags(trait->name);
 
                 if(pass==0) {
                     fprintf(fi, "static memberinfo_t %s;\n", id2);
@@ -315,16 +312,16 @@ void load_libraries(char*filename, int pass, FILE*fi)
                 const char*name = trait->name->name;
                 char*pid = mkpid(package);
                 char*id2 = mkid2(trait->name);
-                int flags = FLAG_STATIC|access2flags(trait->name->ns->access);
+                int flags = FLAG_STATIC|access2flags(trait->name);
                 NEW(memberinfo_t,m);
                 char np = 0;
-                int clsflags = FLAG_STATIC | FLAG_METHOD;
+                int clsflags = FLAG_STATIC;
                 if(pass==0) {
                     fprintf(fi, "static memberinfo_t %s;\n", id2);
                     fprintf(fi, "static classinfo_t %s_class;\n", id2);
                 } else if(pass==1) {
                     write_member_info(fi, 0, id2, name, flags, trait);
-                    fprintf(fi, "static classinfo_t %s_class = {0x%02x, 0x%02x, \"%s\", \"%s\", &%s, 0, members:{0}};\n", 
+                    fprintf(fi, "static classinfo_t %s_class = {0x%02x, 0x%02x, \"%s\", \"%s\", &%s, (void*)0, members:{(void*)0}};\n", 
                             id2,
                             trait->name->ns->access, clsflags,
                             package, name, 
@@ -368,7 +365,7 @@ int main()
    
     fprintf(fi, "dict_t* builtin_getclasses()\n");
     fprintf(fi, "{\n");
-    fprintf(fi, "    dict_t*d = dict_new2(&classinfo_type);\n");
+    fprintf(fi, "    dict_t*d = dict_new2(&slotinfo_type);\n");
     load_libraries("builtin.abc", 2, fi);
     load_libraries("playerglobal.abc", 2, fi);
     load_libraries("builtin.abc", 3, fi);