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); }
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); }
private void disassemble(LocalVariable var) { if (var != null) { print(" // "); print(var.getName()); print(": "); disassemble(var.getType()); } }
/** * 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 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 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); }
private void branchIfNull(CodeBuilder b, LocalVariable value, Label isNull) { if (!value.getType().isPrimitive()) { b.loadLocal(value); b.ifNullBranch(isNull, true); } }
private void genBatched(CodeBuilder b, LocalVariable supportVar, LocalVariable channelVar, boolean noTimeout) { b.loadLocal(supportVar); b.loadLocal(channelVar); String methodName = noTimeout ? "batched" : "batchedAndCancelTimeout"; b.invokeInterface(STUB_SUPPORT_TYPE, methodName, null, new TypeDesc[] {channelVar.getType()}); }
private void branchIfNull(CodeBuilder b, LocalVariable value, Label isNull) { if (!value.getType().isPrimitive()) { b.loadLocal(value); b.ifNullBranch(isNull, true); } }
void restore(CodeBuilder b) { b.loadThis(); b.loadLocal(copyVar); b.storeField(property.getName(), copyVar.getType()); } }
void makeCopy(CodeBuilder b) { b.loadThis(); b.loadField(property.getName(), copyVar.getType()); b.storeLocal(copyVar); }
void makeCopy(CodeBuilder b) { b.loadThis(); b.loadField(property.getName(), copyVar.getType()); b.storeLocal(copyVar); }
void restore(CodeBuilder b) { b.loadThis(); b.loadLocal(copyVar); b.storeField(property.getName(), copyVar.getType()); } }
private void disassemble(LocalVariable var) { if (var != null) { print(" // "); print(var.getName()); print(": "); disassemble(var.getType()); } }
private void genFinished(CodeBuilder b, LocalVariable supportVar, LocalVariable channelVar, LocalVariable batchedChannelVar, boolean noTimeout, boolean reset) { b.loadLocal(supportVar); b.loadLocal(channelVar); b.loadConstant(reset); String methodName = noTimeout ? "finished" : "finishedAndCancelTimeout"; b.invokeInterface(STUB_SUPPORT_TYPE, methodName, null, new TypeDesc[] {channelVar.getType(), TypeDesc.BOOLEAN}); genRebatch(b, supportVar, batchedChannelVar); }
/** * 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 branchIfNaN(CodeBuilder b, LocalVariable value, Label isNaN) { TypeDesc type = value.getType(); if (type == TypeDesc.FLOAT || type == TypeDesc.DOUBLE) { b.loadLocal(value); if (type == TypeDesc.FLOAT) { b.invokeStatic(TypeDesc.FLOAT.toObjectType(), "isNaN", TypeDesc.BOOLEAN, new TypeDesc[] {TypeDesc.FLOAT}); b.ifZeroComparisonBranch(isNaN, "!="); } else { b.invokeStatic(TypeDesc.DOUBLE.toObjectType(), "isNaN", TypeDesc.BOOLEAN, new TypeDesc[] {TypeDesc.DOUBLE}); b.ifZeroComparisonBranch(isNaN, "!="); } } }
private void branchIfNaN(CodeBuilder b, LocalVariable value, Label isNaN) { TypeDesc type = value.getType(); if (type == TypeDesc.FLOAT || type == TypeDesc.DOUBLE) { b.loadLocal(value); if (type == TypeDesc.FLOAT) { b.invokeStatic(TypeDesc.FLOAT.toObjectType(), "isNaN", TypeDesc.BOOLEAN, new TypeDesc[] {TypeDesc.FLOAT}); b.ifZeroComparisonBranch(isNaN, "!="); } else { b.invokeStatic(TypeDesc.DOUBLE.toObjectType(), "isNaN", TypeDesc.BOOLEAN, new TypeDesc[] {TypeDesc.DOUBLE}); b.ifZeroComparisonBranch(isNaN, "!="); } } }