public void loadLocal(LocalVariable local) { if (local == null) { throw new IllegalArgumentException("No local variable specified"); } int stackAdjust = local.getType().isDoubleWord() ? 2 : 1; mInstructions.new LoadLocalInstruction(stackAdjust, local); }
public LocalVariable getLocalVariable(int useLocation, int number) { // TODO: Build some sort of index to improve performance. for (Entry entry : mEntries) { LocalVariable var = entry.mLocalVar; if (var.getNumber() == number) { for (LocationRange range : var.getLocationRangeSet()) { int start = range.getStartLocation().getLocation(); int end = range.getEndLocation().getLocation(); if (start >= 0 && end >= 0) { if (start <= useLocation && useLocation < end) { return var; } } } } } return null; }
/** * Add an entry into the LocalVariableTableAttr. */ public void addEntry(LocalVariable localVar) { String varName = localVar.getName(); if (varName == null) { int num = localVar.getNumber(); varName = num < 0 ? "_" : ("v" + num + '$'); } ConstantUTFInfo name = getConstantPool().addConstantUTF(varName); ConstantUTFInfo descriptor = getConstantPool().addConstantUTF(localVar.getType().getDescriptor()); mEntries.add(new Entry(localVar, name, descriptor)); mCleanEntries = null; }
private void addRegisterUser(List<List<LocalVariable>> registerUsers, LocalVariable var) { int num = var.getNumber(); if (num < 0) { throw new IllegalStateException("Local variable number not resolved: " + var); } getRegisterUsers(registerUsers, num).add(var); if (var.isDoubleWord()) { getRegisterUsers(registerUsers, num + 1).add(var); } }
public void storeLocal(LocalVariable local) { println(mBulder + "storeLocal(" + local.getName() + ')'); }
public int getRangeCount() { return mLocalVar.getLocationRangeSet().size(); } }
mBulder + "getParameter(" + i + ')'); LocalVariable localVar = new NamedLocal(varName, paramTypes[i], varNum); varNum += (localVar.isDoubleWord() ? 2 : 1); mParams[i] = localVar;
private void addRegisterUser(List<List<LocalVariable>> registerUsers, LocalVariable var) { int num = var.getNumber(); if (num < 0) { throw new IllegalStateException("Local variable number not resolved: " + var); } getRegisterUsers(registerUsers, num).add(var); if (var.isDoubleWord()) { getRegisterUsers(registerUsers, num + 1).add(var); } }
public void loadLocal(LocalVariable local) { println(mBulder + "loadLocal(" + local.getName() + ')'); }
LocalVariable localVar = entry.mLocalVar; Set<LocationRange> ranges = localVar.getLocationRangeSet(); if (ranges == null || ranges.size() == 0) { continue;
mBulder + "getParameter(" + i + ')'); LocalVariable localVar = new NamedLocal(varName, paramTypes[i], varNum); varNum += (localVar.isDoubleWord() ? 2 : 1); mParams[i] = localVar;
public void storeLocal(LocalVariable local) { if (local == null) { throw new IllegalArgumentException("No local variable specified"); } int stackAdjust = local.getType().isDoubleWord() ? -2 : -1; mInstructions.new StoreLocalInstruction(stackAdjust, local); }
/** * Add an entry into the LocalVariableTableAttr. */ public void addEntry(LocalVariable localVar) { String varName = localVar.getName(); if (varName == null) { int num = localVar.getNumber(); varName = num < 0 ? "_" : ("v" + num + '$'); } ConstantUTFInfo name = getConstantPool().addConstantUTF(varName); ConstantUTFInfo descriptor = getConstantPool().addConstantUTF(localVar.getType().getDescriptor()); mEntries.add(new Entry(localVar, name, descriptor)); mCleanEntries = null; }
public void writeDataTo(DataOutput dout) throws IOException { dout.writeShort(mRangeCount); int size = mCleanEntries.size(); for (int i=0; i<size; i++) { Entry entry = mCleanEntries.get(i); LocalVariable localVar = entry.mLocalVar; Set<LocationRange> ranges = localVar.getLocationRangeSet(); if (ranges == null) { continue; } int name_index = entry.mName.getIndex(); int descriptor_index = entry.mDescriptor.getIndex(); int index = localVar.getNumber(); check("local variable table entry name index", name_index); check("local variable table entry descriptor index", descriptor_index); check("local variable table entry index", index); for (LocationRange range : ranges) { Location startLocation = range.getStartLocation(); Location endLocation = range.getEndLocation(); int start_pc = startLocation.getLocation(); int length = endLocation.getLocation() - start_pc - 1; check("local variable table entry start PC", start_pc); dout.writeShort(start_pc); dout.writeShort(length); dout.writeShort(name_index); dout.writeShort(descriptor_index); dout.writeShort(index); } } }
public void integerIncrement(LocalVariable local, int amount) { println(mBulder + "integerIncrement(" + local.getName() + ", " + amount + ')'); }
public int getRangeCount() { return mLocalVar.getLocationRangeSet().size(); } }
public LocalVariable getLocalVariable(int useLocation, int number) { // TODO: Build some sort of index to improve performance. for (Entry entry : mEntries) { LocalVariable var = entry.mLocalVar; if (var.getNumber() == number) { for (LocationRange range : var.getLocationRangeSet()) { int start = range.getStartLocation().getLocation(); int end = range.getEndLocation().getLocation(); if (start >= 0 && end >= 0) { if (start <= useLocation && useLocation < end) { return var; } } } } } return null; }