@SuppressWarnings("unchecked") void writeFooter(){ LabelNode endL = new LabelNode(); node.instructions.add(endL); for(LocalVariable variable : localVariables.values()){ String description = Type.getDescriptor(variable.getClazz() == null ? Object.class : variable.getClazz()); if (variable.name.equals("~this")) { //if (variable.getClazz() != Memory.class && !clazz.statement.isTrait()) { description = "L" + clazz.entity.getCompiledInternalName() + ";"; //} } node.localVariables.add(new LocalVariableNode( variable.name, description, null, variable.label == null ? labelStart : variable.label, variable.getEndLabel() == null ? endL : variable.getEndLabel(), variable.index )); } //node.maxStack = this.stackMaxSize; !!! we don't need this, see: ClassWriter.COMPUTE_FRAMES //node.maxLocals = this.localVariables.size(); }
private void visitLocals(MethodVisitor mv) { for (Object l: methodFlow.localVariables) { ((LocalVariableNode)l).accept(mv); } }
if (!startsInBody && !endsInBody) { if (variable.index != 0) { // '#0' on init$args is not 'this' variable.accept(initArgs); variable.accept(body); } else if (!startsInBody && endsInBody) { LocalVariableNode var0 = new LocalVariableNode(variable.name, variable.desc, variable.signature, variable.start, labelBefore, variable.index); var0.accept(initArgs); LocalVariableNode var1 = new LocalVariableNode(variable.name, variable.desc, variable.signature, labelAfter, variable.end, variable.index); var1.accept(body); } else { throw new IllegalStateException("Local variable starts after it ends.");
if (!startsInBody && !endsInBody) { if (variable.index != 0) { // '#0' on init$args is not 'this' variable.accept(initArgs); variable.accept(body); } else if (!startsInBody && endsInBody) { LocalVariableNode var0 = new LocalVariableNode(variable.name, variable.desc, variable.signature, variable.start, labelBefore, variable.index); var0.accept(initArgs); LocalVariableNode var1 = new LocalVariableNode(variable.name, variable.desc, variable.signature, labelAfter, variable.end, variable.index); var1.accept(body); } else { throw new IllegalStateException("Local variable starts after it ends.");
public CodeBlock visitLocalVariable(final String varName, final String varDesc, final String signature, final LabelNode scopeStart, final LabelNode scopeEnd, final int varIndex) { localVariableList.add(new LocalVariableNode(varName, varDesc, signature, scopeStart, scopeEnd, varIndex)); return this; }
localVariables.get(i).accept(mv);
public void addLocalVariable(String name, String desc, String signature, int index) { m_locals.put(index, new LocalVariableNode(name, desc, signature, null, null, index)); if (index >= m_argsVarLength) { // keep only argument-related local variables definitions (others relate to code which isn't in this method) return; } if (m_argLocalVariables == null) { m_argLocalVariables = new ArrayList<LocalVariableNode>(); } m_argLocalVariables.add(new LocalVariableNode(name, desc, signature, null, null, index)); }
((LocalVariableNode) o).accept(mv);
public CodeBlock visitLocalVariable(final String varName, final String varDesc, @Nullable final String signature, final LabelNode scopeStart, final LabelNode scopeEnd, final int varIndex) { localVariableList.add(new LocalVariableNode(varName, varDesc, signature, scopeStart, scopeEnd, varIndex)); return this; }
localVariables.get(i).accept(methodVisitor);
@Override public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) { // only remember the local variables of Type org.parboiled.support.Var that are not parameters if (index > parameterCount && Var.class.isAssignableFrom(getClassForType(Type.getType(desc)))) { if (localVarVariables == null) localVarVariables = new ArrayList<LocalVariableNode>(); localVarVariables.add(new LocalVariableNode(name, desc, null, null, null, index)); } }
@Override public void visitLocalVariable(final String name, final String desc, final String signature, final Label start, final Label end, final int index) { // only remember the local variables of Type com.github.fge.grappa.support.Var that are not parameters final Type type = Type.getType(desc); if (index > parameterCount && Var.class.isAssignableFrom(getClassForType(type))) localVarVariables.add(new LocalVariableNode(name, desc, null, null, null, index)); }
private List<LocalVariableNode> baseLocals(LabelNode l_begin, LabelNode l_end) { List<LocalVariableNode> locals = new ArrayList<>(); locals.add(new LocalVariableNode("this", context.thisClassType().getDescriptor(), null, l_begin, l_end, 0)); locals.add(new LocalVariableNode("context", Type.getDescriptor(ExecutionContext.class), null, l_begin, l_end, LV_CONTEXT)); locals.add(new LocalVariableNode("rp", Type.INT_TYPE.getDescriptor(), null, l_begin, l_end, LV_RESUME)); if (context.isVararg()) { locals.add(new LocalVariableNode( "varargs", ASMUtils.arrayTypeFor(Object.class).getDescriptor(), null, l_begin, l_end, LV_VARARGS )); } for (int i = 0; i < numOfRegisters(); i++) { locals.add(new LocalVariableNode("s_" + i, Type.getDescriptor(Object.class), null, l_begin, l_end, slotOffset() + i)); } return locals; }
@Override public void visitLocalVariable(final String name, final String desc, final String signature, final Label start, final Label end, final int index) { localVariables.add(new LocalVariableNode(name, desc, signature, getLabelNode(start), getLabelNode(end), index)); }
@Override public void visitLocalVariable( final String name, final String descriptor, final String signature, final Label start, final Label end, final int index) { localVariables.add( new LocalVariableNode( name, descriptor, signature, getLabelNode(start), getLabelNode(end), index)); }
public static List cloneVariableTable(MethodNode methodNode, CloneMap cloneMap) { List<LocalVariableNode> result = new LinkedList<LocalVariableNode>(); //copy all the rest of the local variables. for (LocalVariableNode originalLocalVar : (List<LocalVariableNode>) methodNode.localVariables) { LocalVariableNode clonedLocalVar = new LocalVariableNode( originalLocalVar.name, originalLocalVar.desc, originalLocalVar.signature, cloneMap.get(originalLocalVar.start), cloneMap.get(originalLocalVar.end), originalLocalVar.index); result.add(clonedLocalVar); } return result; }
public static List<LocalVariableNode> cloneLocalVariableTable(MethodNode originalMethod, CloneMap cloneMap) { if (originalMethod.localVariables == null) { return null; } List<LocalVariableNode> localVariableTable = new LinkedList<LocalVariableNode>(); for (LocalVariableNode localVariableNode : (List<LocalVariableNode>) originalMethod.localVariables) { LocalVariableNode cloned = new LocalVariableNode( localVariableNode.name, localVariableNode.desc, localVariableNode.signature, cloneMap.get(localVariableNode.start), cloneMap.get(localVariableNode.end), localVariableNode.index ); localVariableTable.add(cloned); } return localVariableTable; }
LocalVariableNode transactionVar = new LocalVariableNode( "transaction", Type.getDescriptor(AlphaTransaction.class), LocalVariableNode tranlocalVar = new LocalVariableNode( "tranlocalThis", internalToDesc(tranlocalName), LocalVariableNode clonedLocalVar = new LocalVariableNode( originalLocalVar.name, originalLocalVar.desc,
List<LocalVariableNode> buildLocalVariables(IList iList) { ArrayList<LocalVariableNode> al = new ArrayList<LocalVariableNode>(); for (IValue v : iList) { al.add(new LocalVariableNode(((IString)((IConstructor)v).get(0)).getValue(), ((IString)((IConstructor)v).get(1)).getValue(), emptyIsNull(((IString)((IConstructor)v).get(2)).getValue()), getLabel(((IInteger)((IConstructor)v).get(3)).intValue()), getLabel(((IInteger)((IConstructor)v).get(4)).intValue()), ((IInteger)((IConstructor)v).get(5)).intValue())); } return al; }
locals.add(new LocalVariableNode("this", context.thisClassType().getDescriptor(), null, begin, end, 0)); locals.add(new LocalVariableNode("rp", Type.INT_TYPE.getDescriptor(), null, begin, end, 1)); if (context.isVararg()) { locals.add(new LocalVariableNode("varargs", ASMUtils.arrayTypeFor(Object.class).getDescriptor(), null, begin, end, 2)); locals.add(new LocalVariableNode("r_" + i, Type.getDescriptor(Object.class), null, begin, end, regOffset + i));