X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fas3%2Fmkabc.py;h=029ebfc50485ec012e9cedb4e3b13dc91a36a59c;hb=62a83d162b254d91da418cee25f5b87b067a3f92;hp=0a946d69fd0ba1dfba96778b229c2d505367224b;hpb=fee0a4873844d57b2889e24330c3b2afc425c503;p=swftools.git diff --git a/lib/as3/mkabc.py b/lib/as3/mkabc.py index 0a946d6..029ebfc 100644 --- a/lib/as3/mkabc.py +++ b/lib/as3/mkabc.py @@ -1,4 +1,24 @@ #!/usr/bin/python +# +# mkops.py +# +# Generate opcodes.h, opcodes.h +# +# Copyright (c) 2008 Matthias Kramm +# +# 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"): @@ -126,6 +156,8 @@ for line in fi.readlines(): foh.write(",".join(["method->code"]+names)) foh.write("))\n") + foh.write("#define OPCODE_"+name.upper()+" "+op+"\n") + foh.write("#endif\n") foh.close()