private Object[] arg;
private ConstantPool.Ent[] cparg;
+ public void insertBlank(int idx) {
+ for(int i=0;i<size();i++) {
+ switch(op[i]) {
+ case TABLESWITCH:
+ case LOOKUPSWITCH: {
+ Switch si = (Switch) arg[i];
+ int pos = si.getDefaultTarget();
+ if (pos >= idx) si.setDefaultTarget(pos+1);
+ for(int j=0;j<si.size();j++) {
+ pos = si.getTarget(j);
+ if (pos >= idx) si.setTarget(j, pos+1);
+ }
+ break;
+ }
+ default:
+ if (OP_BRANCH(op[i])) {
+ int pos = ((Integer)arg[i]).intValue();
+ if (pos >= idx) arg[i] = N(pos+1);
+ }
+ break;
+ }
+ }
+ size++;
+ for(int i=size; i>idx; i--) {
+ op[i] = op[i-1];
+ arg[i] = arg[i-1];
+ cparg = null;
+ }
+ }
+
// Constructors //////////////////////////////////////////////////////////////////////////////
} else if (argLength == 7) {
throw new Error("should never happen - variable length instruction not explicitly handled");
} else {
- int iarg = ((Integer)arg).intValue();
+ int iarg = (arg instanceof Type.Primitive)
+ ? ((Type.Primitive)arg).toArraySpec()
+ : ((Integer)arg).intValue();
if (argLength == 1) {
if ((opdata & OP_UNSIGNED_FLAG) != 0 ? iarg >= 256 : (iarg < -128 || iarg >= 128))
throw new ClassFile.Exn("overflow of s/u1 option");
String s = null;
if (arg[i] instanceof Type) s = ((Type)arg[i]).toString();
else if (arg[i] instanceof Type.Class.Member) s = ((Type.Class.Member)arg[i]).toString();
- else if (arg[i] instanceof String) s = "\"" + s + "\"";
+ else if (arg[i] instanceof String) s = "\"" + arg[i] + "\"";
else if (arg[i] != null) s = arg[i].toString();
if (s != null) sb.append(" ").append(s);
sb.append("\n");