+ boolean implementsGladiator(SootClass c) { return c.implementsInterface("org.ibex.arenaj.Gladiator"); }
+ boolean implementsGladiator(Type t) {return (t instanceof RefType)&&implementsGladiator(((RefType)t).getSootClass());}
+ String getArenaName(SootClass sc) { return sc.getName().substring(0, sc.getName().lastIndexOf('$')); }
+ String getGladiatorName(SootClass sc) { return sc.getName().substring(sc.getName().lastIndexOf('$')+1); }
+ SootClass getArenaForGladiator(SootClass sc) { return Scene.v().getSootClass(getArenaName(sc)); }
+ InstanceFieldRef newIFR(Body b, SootFieldRef fr) { return Jimple.v().newInstanceFieldRef(b.getThisLocal(), fr); }
+ void assign(Body b, Value left, Value right) { b.getUnits().add(Jimple.v().newAssignStmt(left, right)); }
+ void assign(Body b, Value l, Value r, Stmt w) { b.getUnits().insertBefore(Jimple.v().newAssignStmt(l, r), w); }
+ Type getSliceElementType(Type t) { return implementsGladiator(t) ? IntType.v() : t; }
+ SootFieldRef getSliceForField(SootField f) { return getSliceForField(f.makeRef()); }
+ SootFieldRef getSliceForField(SootFieldRef f) {
+ return Scene.v().makeFieldRef(getArenaForGladiator(f.declaringClass()),
+ getGladiatorName(f.declaringClass())+"$$"+f.name(),
+ getSliceElementType(f.type()).makeArrayType(),
+ false);
+ }
+
+
+ // Operations performed on the Gladiator class //////////////////////////////////////////////////////////////////////////
+
+ public void processGladiatorClass(SootClass sc) {