5 fi = open("abc.c", "rb")
6 fo = open("abc_ops.c", "wb")
8 R = re.compile('{(0x..),\s*"([^"]*)"\s*,\s*"([^"]*)"\s*}\s*,\s*')
10 for line in fi.readlines():
14 op,name,params = m.group(1),m.group(2),m.group(3)
15 params = params.strip()
23 type,pname="char*","name"
25 type,pname="char*","s"
29 type,pname="abc_method_body_t*","m"
31 type,pname="abc_method_t*","m"
33 type,pname="abc_class_t*","m"
35 type,pname="abc_label_t*","j"
37 type,pname="void*","labels"
39 raise "Unknown type "+c
44 pname += str(seen[pname])
50 fo.write("abc_code_t* abc_%s(abc_code_t*prev%s)\n" % (name, paramstr))
52 fo.write(" abc_code_t*self = add_opcode(prev, %s);\n" % op)
54 for pname,c in zip(names,params):
56 fo.write(" self->params[%d] = %s;\n" % (i,pname));
58 fo.write(" self->params[%d] = (void*)(ptroff_t)%s;\n" % (i,pname))
60 fo.write(" self->params[%d] = (void*)(ptroff_t)%s;\n" % (i,pname))
62 fo.write(" self->params[%d] = strdup(%s);\n" % (i,pname))
64 fo.write(" self->params[%d] = %s;\n" % (i,pname))
66 fo.write(" self->params[%d] = %s;\n" % (i,pname))
68 fo.write(" self->params[%d] = %s;\n" % (i,pname))
70 fo.write(" /* FIXME: write label %s */\n" % pname)
72 fo.write(" /* FIXME: write labels %s */\n" % pname)
74 raise "Unknown type "+c
76 fo.write(" return self;\n")
79 fo.write("#define "+name+"(")
80 fo.write(",".join(["method"]+names))
81 fo.write(") {method->code = abc_"+name+"(")
82 fo.write(",".join(["method->code"]+names))
88 #{0x75, "convert_d", ""},