- fo.write("abc_code_t* abc_%s(abc_code_t*prev%s)\n" % (name, paramstr))
- fo.write("{\n")
- fo.write(" abc_code_t*self = add_opcode(prev, %s);\n" % op)
- i = 0
- for pname,c in zip(names,params):
- if(c == "2"):
- fo.write(" self->params[%d] = %s;\n" % (i,pname));
- elif(c in "nu"):
- fo.write(" self->params[%d] = (void*)(ptroff_t)%s;\n" % (i,pname))
- elif(c == "b"):
- fo.write(" self->params[%d] = (void*)(ptroff_t)%s;\n" % (i,pname))
- elif(c == "s"):
- fo.write(" self->params[%d] = strdup(%s);\n" % (i,pname))
- elif(c == "m"):
- fo.write(" self->params[%d] = %s;\n" % (i,pname))
- elif(c == "c"):
- fo.write(" self->params[%d] = %s;\n" % (i,pname))
- elif(c == "i"):
- fo.write(" self->params[%d] = %s;\n" % (i,pname))
- elif(c == "j"):
- fo.write(" /* FIXME: write label %s */\n" % pname)
- elif(c == "S"):
- fo.write(" /* FIXME: write labels %s */\n" % pname)
- else:
- raise "Unknown type "+c
- i = i+1
- fo.write(" return self;\n")
- fo.write("}\n")
+ foc.write("code_t* abc_%s(code_t*prev%s)\n" % (name, paramstr))
+ foc.write("{\n")
+ foc.write(" code_t*self = add_opcode(prev, %s);\n" % op)
+ i = 0
+ for pname,c in zip(names,params):
+ if(c == "2"):
+ if iteration==0:
+ foc.write(" self->data[%d] = multiname_fromstring(%s);\n" % (i,pname));
+ else:
+ foc.write(" self->data[%d] = multiname_clone(%s);\n" % (i,pname));
+ elif(c in "nur"):
+ 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 "f"):
+ foc.write(" double*fp = malloc(sizeof(double));\n")
+ foc.write(" *fp = %s;\n" % (pname))
+ foc.write(" self->data[%d] = fp;\n" % (i))
+ 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))
+ elif(c == "m"):
+ foc.write(" self->data[%d] = %s;\n" % (i,pname))
+ elif(c == "c"):
+ foc.write(" self->data[%d] = %s;\n" % (i,pname))
+ elif(c == "i"):
+ foc.write(" self->data[%d] = %s;\n" % (i,pname))
+ elif(c == "j"):
+ foc.write(" self->data[%d] = 0; //placeholder\n" % i)
+ foc.write(" self->branch = %s;\n" % pname)
+ elif(c == "S"):
+ foc.write(" self->data[%d] = %s;\n" % (i,pname))
+ elif(c == "D"):
+ foc.write(" /* FIXME: write debuginfo %s */\n" % pname)
+ else:
+ raise "Unknown type "+c
+ i = i+1
+ foc.write(" return self;\n")
+ foc.write("}\n")