fixed format warnings
[swftools.git] / lib / as3 / code.c
index 403c85a..541ebf5 100644 (file)
@@ -255,10 +255,10 @@ code_t* code_atposition(codelookup_t*l, int pos)
 
 void lookupswitch_print(lookupswitch_t*l)
 {
-    printf("default: %08x\n", l->def);
+    printf("default: %08x\n", (int)l->def);
     code_list_t*t = l->targets;
     while(t) {
-        printf("target: %08x\n", t->code);
+        printf("target: %08x\n", (int)t->code);
         t = t->next;
     }
 }
@@ -471,72 +471,105 @@ static int opcode_write(TAG*tag, code_t*c, pool_t*pool, abc_file_t*file, int len
     while(*p) {
         void*data = c->data[pos++];
         assert(pos<=2);
-        if(*p == 'n') { // number
-            len += swf_SetU30(tag, (ptroff_t)data);
-        } else if(*p == '2') { //multiname
-            multiname_t*m = (multiname_t*)data;
-            len += swf_SetU30(tag, pool_register_multiname(pool, m));
-        } else if(*p == 'N') { //namespace
-            namespace_t*ns = (namespace_t*)data;
-            len += swf_SetU30(tag, pool_register_namespace(pool, ns));
-        } else if(*p == 'm') { //method
-            abc_method_t*m = (abc_method_t*)data;
-            len += swf_SetU30(tag, m->index);
-        } else if(*p == 'c') { //classinfo 
-            abc_class_t*cls = (abc_class_t*)data;
-            len += swf_SetU30(tag, cls->index);
-        } else if(*p == 'i') { //methodbody
-            abc_method_body_t*m = (abc_method_body_t*)data;
-            len += swf_SetU30(tag, m->index);
-        } else if(*p == 'I') { // int
-            len += swf_SetU30(tag, pool_register_int(pool, (ptroff_t)data));
-        } else if(*p == 'U') { // uint
-            len += swf_SetU30(tag, pool_register_uint(pool, (ptroff_t)data));
-        } else if(*p == 'f') { //  float
-            len += swf_SetU30(tag, pool_register_float(pool, *(double*)data));
-        } else if(*p == 'u') { // integer
-            len += swf_SetU30(tag, (ptroff_t)data);
-        } else if(*p == 'r') { // integer
-            len += swf_SetU30(tag, (ptroff_t)data);
-        } else if(*p == 'b') { // byte
-            if(tag)
-                swf_SetU8(tag, (ptroff_t)data);
-            len++;
-        } else if(*p == 'j') { // jump
-            int skip = length-c->pos-4;
-            if(c->branch) 
-                skip = (c->branch->pos) - c->pos - 4;
-            len += swf_SetS24(tag, skip);
-        } else if(*p == 's') { // string
-            int index = pool_register_string2(pool, (string_t*)data);
-            len += swf_SetU30(tag, index);
-        } else if(*p == 'D') { // debug statement
-            if(tag)
-                swf_SetU8(tag, 1);
-            len++;
-            len+=swf_SetU30(tag, pool_register_string(pool,c->data[0]));
-            if(tag)
-                swf_SetU8(tag, (ptroff_t)c->data[1]);
-            len++;
-            len+=swf_SetU30(tag, 0);
-        } else if(*p == 'S') { // switch statement
-            lookupswitch_t*l = (lookupswitch_t*)data;
-            int offset = 0;
-            len+=swf_SetS24(tag, l->def->pos-c->pos+offset); //default
-            code_list_t*t = l->targets;
-            if(list_length(t)) {
-                len+=swf_SetU30(tag, list_length(t)-1); //nr-1
+        switch(*p) {
+            case 'n': { // number
+                len += swf_SetU30(tag, (ptroff_t)data);
+                break;
+            }
+            case '2': { //multiname
+                multiname_t*m = (multiname_t*)data;
+                len += swf_SetU30(tag, pool_register_multiname(pool, m));
+                break;
+            }
+            case 'N': { //namespace
+                namespace_t*ns = (namespace_t*)data;
+                len += swf_SetU30(tag, pool_register_namespace(pool, ns));
+                break;
+            }
+            case 'm': { //method
+                abc_method_t*m = (abc_method_t*)data;
+                len += swf_SetU30(tag, m->index);
+                break;
+            }
+            case 'c': { //classinfo 
+                abc_class_t*cls = (abc_class_t*)data;
+                len += swf_SetU30(tag, cls->index);
+                break;
+            }
+            case 'i': { //methodbody
+                abc_method_body_t*m = (abc_method_body_t*)data;
+                len += swf_SetU30(tag, m->index);
+                break;
+            }
+            case 'I': { // int
+                len += swf_SetU30(tag, pool_register_int(pool, (ptroff_t)data));
+                break;
+            }
+            case 'U': { // uint
+                len += swf_SetU30(tag, pool_register_uint(pool, (ptroff_t)data));
+                break;
+            }
+            case 'f': { //  float
+                len += swf_SetU30(tag, pool_register_float(pool, *(double*)data));
+                break;
+            }
+            case 'u': { // integer
+                len += swf_SetU30(tag, (ptroff_t)data);
+                break;
+            }
+            case 'r': { // integer
+                len += swf_SetU30(tag, (ptroff_t)data);
+                break;
+            }
+            case 'b': { // byte
+                if(tag)
+                    swf_SetU8(tag, (ptroff_t)data);
+                len++;
+                break;
+            }
+            case 'j': { // jump
+                int skip = length-c->pos-4;
+                if(c->branch) 
+                    skip = (c->branch->pos) - c->pos - 4;
+                len += swf_SetS24(tag, skip);
+                break;
+            }
+            case 's': { // string
+                int index = pool_register_string2(pool, (string_t*)data);
+                len += swf_SetU30(tag, index);
+                break;
+            }
+            case 'D': { // debug statement
+                if(tag)
+                    swf_SetU8(tag, 1);
+                len++;
+                len+=swf_SetU30(tag, pool_register_string(pool,c->data[0]));
+                if(tag)
+                    swf_SetU8(tag, (ptroff_t)c->data[1]);
+                len++;
+                len+=swf_SetU30(tag, 0);
+                break;
+            }
+            case 'S': { // switch statement
+                lookupswitch_t*l = (lookupswitch_t*)data;
+                int offset = 0;
+                len+=swf_SetS24(tag, l->def->pos-c->pos+offset); //default
                 code_list_t*t = l->targets;
-                while(t) {
-                    len+=swf_SetS24(tag, t->code->pos - c->pos+offset);
-                    t = t->next;
+                if(list_length(t)) {
+                    len+=swf_SetU30(tag, list_length(t)-1); //nr-1
+                    code_list_t*t = l->targets;
+                    while(t) {
+                        len+=swf_SetS24(tag, t->code->pos - c->pos+offset);
+                        t = t->next;
+                    }
+                } else {
+                    len+=swf_SetU30(tag, 0); //nr-1
+                    len+=swf_SetS24(tag, l->def->pos-c->pos+offset);
                 }
-            } else {
-                len+=swf_SetU30(tag, 0); //nr-1
-                len+=swf_SetS24(tag, l->def->pos-c->pos+offset);
+                break;
             }
-        } else {
-            printf("Can't parse opcode param type \"%c\"\n", *p);
+            default:
+                printf("Can't parse opcode param type \"%c\"\n", *p);
         }
         p++;
     }
@@ -957,7 +990,7 @@ int code_dump2(code_t*c, abc_exception_list_t*exceptions, abc_file_t*file, char*
                     if(c->branch)
                         fprintf(fo, "->%d", c->branch->pos);
                     else
-                        fprintf(fo, "%08x", c->branch);
+                        fprintf(fo, "%08x", (unsigned int)c->branch);
                 } else if(*p == 's') {
                     char*s = string_escape((string_t*)data);
                     fprintf(fo, "\"%s\"", s);
@@ -1192,6 +1225,19 @@ code_t*code_cutlast(code_t*c)
     return code_cut(c);
 }
 
+char is_getlocal(code_t*c)
+{
+    if(!c) return 0;
+    if(c->opcode == OPCODE_GETLOCAL ||
+       c->opcode == OPCODE_GETLOCAL_0 ||
+       c->opcode == OPCODE_GETLOCAL_1 ||
+       c->opcode == OPCODE_GETLOCAL_2 ||
+       c->opcode == OPCODE_GETLOCAL_3) {
+       return 1;
+    }
+    return 0;
+}
+
 code_t* cut_last_push(code_t*c)
 {
     assert(!c->next);