org.objectweb.asm.tree.LocalVariableNode类的使用及代码示例

x33g5p2x  于2022-01-24 转载在 其他  
字(8.9k)|赞(0)|评价(0)|浏览(129)

本文整理了Java中org.objectweb.asm.tree.LocalVariableNode类的一些代码示例,展示了LocalVariableNode类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。LocalVariableNode类的具体详情如下:
包路径:org.objectweb.asm.tree.LocalVariableNode
类名称:LocalVariableNode

LocalVariableNode介绍

[英]A node that represents a local variable declaration.
[中]表示局部变量声明的节点。

代码示例

代码示例来源:origin: jphp-group/jphp

@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();
}

代码示例来源:origin: kilim/kilim

private void visitLocals(MethodVisitor mv) {
  for (Object l: methodFlow.localVariables) {
    ((LocalVariableNode)l).accept(mv);
  }
}

代码示例来源:origin: gradle.plugin.com.xk/wormhole-gradle

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.");

代码示例来源:origin: com.android.tools.build/gradle-core

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.");

代码示例来源:origin: qmx/jitescript

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;
}

代码示例来源:origin: org.ow2.asm/asm-debug-all

localVariables.get(i).accept(mv);

代码示例来源:origin: apache/felix

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));
}

代码示例来源:origin: co.paralleluniverse/quasar

((LocalVariableNode) o).accept(mv);

代码示例来源:origin: fge/grappa

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;
}

代码示例来源:origin: org.ow2.asm/asm-tree

localVariables.get(i).accept(methodVisitor);

代码示例来源:origin: org.parboiled/parboiled-java

@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));
  }
}

代码示例来源:origin: fge/grappa

@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));
}

代码示例来源:origin: mjanicek/rembulan

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;
}

代码示例来源:origin: org.ow2.asm/asm-debug-all

@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));
}

代码示例来源:origin: org.ow2.asm/asm-tree

@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));
}

代码示例来源:origin: org.multiverse/multiverse-instrumentation

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;
}

代码示例来源:origin: org.multiverse/multiverse-instrumentation

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;
}

代码示例来源:origin: org.multiverse/multiverse-alpha-unborn

LocalVariableNode transactionVar = new LocalVariableNode(
    "transaction",
    Type.getDescriptor(AlphaTransaction.class),
  LocalVariableNode tranlocalVar = new LocalVariableNode(
      "tranlocalThis",
      internalToDesc(tranlocalName),
    LocalVariableNode clonedLocalVar = new LocalVariableNode(
        originalLocalVar.name,
        originalLocalVar.desc,

代码示例来源:origin: usethesource/rascal

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;
}

代码示例来源:origin: mjanicek/rembulan

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));

相关文章

微信公众号

最新文章

更多