started integrating expression ast
[swftools.git] / lib / as3 / mkabc.py
index 57d68f5..029ebfc 100644 (file)
@@ -1,4 +1,24 @@
 #!/usr/bin/python
+#
+# mkops.py
+#
+# Generate opcodes.h, opcodes.h
+#
+# Copyright (c) 2008 Matthias Kramm <kramm@quiss.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
 import re
 
@@ -23,7 +43,7 @@ for line in fi.readlines():
         op,name,params = m.group(1),m.group(2),m.group(3)
 
         iterations=1
-        if "2" in params:
+        if "2" in params or "s" in params:
             iterations=2
 
         for iteration in range(iterations):
@@ -42,13 +62,18 @@ for line in fi.readlines():
                     else:
                         type,pname="multiname_t*","name"
                 elif c == "s":
-                    type,pname="char*","s"
+                    if iteration==0:
+                        type,pname="char*","name"
+                    else:
+                        type,pname="string_t*","s"
+                elif c == "N":
+                    type,pname="namespace_t*","ns"
                 elif c in "nubs":
                     type,pname="int","v"
                 elif c == "m":
-                    type,pname="abc_method_body_t*","m"
-                elif c == "i":
                     type,pname="abc_method_t*","m"
+                elif c == "i":
+                    type,pname="abc_method_body_t*","m"
                 elif c == "c":
                     type,pname="abc_class_t*","m"
                 elif c == "j":
@@ -93,6 +118,8 @@ for line in fi.readlines():
                     foc.write("    self->data[%d] = (void*)(ptroff_t)%s;\n" % (i,pname))
                 elif(c in "IU"):
                     foc.write("    self->data[%d] = (void*)(ptroff_t)%s;\n" % (i,pname))
+                elif(c in "N"):
+                    foc.write("    self->data[%d] = namespace_clone(%s);\n" % (i,pname))
                 elif(c in "f"):
                     foc.write("    double*fp = malloc(sizeof(double));\n")
                     foc.write("    *fp = %s;\n" % (pname))
@@ -100,7 +127,10 @@ for line in fi.readlines():
                 elif(c == "b"):
                     foc.write("    self->data[%d] = (void*)(ptroff_t)%s;\n" % (i,pname))
                 elif(c == "s"):
-                    foc.write("    self->data[%d] = strdup(%s);\n" % (i,pname))
+                    if iteration==0:
+                        foc.write("    self->data[%d] = string_new4(%s);\n" % (i,pname))
+                    else:
+                        foc.write("    self->data[%d] = string_dup3(%s);\n" % (i,pname))
                 elif(c == "m"):
                     foc.write("    self->data[%d] = %s;\n" % (i,pname))
                 elif(c == "c"):