+
+ public void fixClass(SootClass sc) {
+ SootClass mc = Scene.v().getMainClass();
+ String incFuncName = sc.getShortName().substring(sc.getShortName().lastIndexOf('$')+1) + "$$inc";
+ SootMethod method = new SootMethod(incFuncName, new LinkedList(),
+ IntType.v(), Modifier.PRIVATE,
+ new LinkedList());
+ mc.addMethod(method);
+ method.setActiveBody(body = Jimple.v().newBody(method));
+ body.setMethod(method);
+ ((JimpleBody)body).insertIdentityStmts();
+ InstanceFieldRef sfr = Jimple.v().newInstanceFieldRef(body.getThisLocal(), getGladiatorFieldSizeRef(sc));
+ InstanceFieldRef maxField = Jimple.v().newInstanceFieldRef(body.getThisLocal(), getGladiatorFieldMaxRef(sc));
+ Local l = Jimple.v().newLocal("tmpRef" + (tfr++), IntType.v());
+ body.getLocals().add(l);
+ Local l2 = Jimple.v().newLocal("tmpRef" + (tfr++), IntType.v());
+ body.getLocals().add(l2);
+ Local l3 = Jimple.v().newLocal("tmpRef" + (tfr++), IntType.v());
+ body.getLocals().add(l3);
+ body.getUnits().add(Jimple.v().newAssignStmt(l, sfr));
+ body.getUnits().add(Jimple.v().newAssignStmt(l2, Jimple.v().newAddExpr(l, IntConstant.v(1))));
+ body.getUnits().add(Jimple.v().newAssignStmt(l3, maxField));
+ /*
+ body.getUnits().add(Jimple.v().newIfStmt(Jimple.v().newLtExpr(l2, l3),
+ Jimple.v().newReturnStmt(l2)));
+ */
+ body.getUnits().add(Jimple.v().newReturnStmt(l2));
+ body.validate();
+ }
+