Package org.objectweb.asm.tree

Examples of org.objectweb.asm.tree.FrameNode


   
    @Override
    public void visitFrame(int type, int nLocal, Object[] local, int nStack,
            Object[] stack) {
        frameNodes.put(instructions.size(), new FrameNode(type, nLocal, local, nStack, stack));
    }
View Full Code Here


      case 13:
        MultiANewArrayInsnNode ainsn = (MultiANewArrayInsnNode) insn;
        visitMultiANewArrayInsn(ainsn.desc, ainsn.dims);
        break;
      case 14:
        FrameNode fnode = (FrameNode) insn;
        switch (fnode.type)
        {
          case -1:
          case 0:
            visitFrame(fnode.type, fnode.local.size(), fnode.local.toArray(), fnode.stack.size(), fnode.stack.toArray());
View Full Code Here

      LabelNode a = new LabelNode(new Label());
      updateEntities.instructions.insert(n, n = a);
      updateEntities.instructions.insert(n, n = new LineNumberNode(-15004, a));
      updateEntities.instructions.insert(n, n = new JumpInsnNode(GOTO, lCond));
      updateEntities.instructions.insert(n, n = lStart);
      updateEntities.instructions.insert(n, n = new FrameNode(F_SAME, 0, null, 0, null));
      updateEntities.instructions.insert(n, n = new VarInsnNode(ALOAD, 0));
      updateEntities.instructions.insert(n, n = new FieldInsnNode(GETFIELD, "net/minecraft/world/World", "cofh_recentTiles", "Lcofh/lib/util/LinkedHashList;"));
      updateEntities.instructions.insert(n, n = new MethodInsnNode(INVOKEVIRTUAL, "cofh/lib/util/LinkedHashList", "shift", "()Ljava/lang/Object;", false));
      updateEntities.instructions.insert(n, n = new TypeInsnNode(CHECKCAST, "net/minecraft/tileentity/TileEntity"));
      updateEntities.instructions.insert(n, n = new InsnNode(DUP));
      updateEntities.instructions.insert(n, n = new JumpInsnNode(IFNULL, lGuard));
      updateEntities.instructions.insert(n, n = new MethodInsnNode(INVOKEVIRTUAL, "net/minecraft/tileentity/TileEntity", "cofh_validate", "()V", false));
      updateEntities.instructions.insert(n, n = new InsnNode(ACONST_NULL));
      updateEntities.instructions.insert(n, n = lGuard);
      updateEntities.instructions.insert(n, n = new InsnNode(POP));
      updateEntities.instructions.insert(n, n = lCond);
      updateEntities.instructions.insert(n, n = new FrameNode(F_SAME, 0, null, 0, null));
      updateEntities.instructions.insert(n, n = new VarInsnNode(ALOAD, 0));
      updateEntities.instructions.insert(n, n = new FieldInsnNode(GETFIELD, "net/minecraft/world/World", "cofh_recentTiles", "Lcofh/lib/util/LinkedHashList;"));
      updateEntities.instructions.insert(n, n = new MethodInsnNode(INVOKEVIRTUAL, "cofh/lib/util/LinkedHashList", "size", "()I", false));
      updateEntities.instructions.insert(n, n = new JumpInsnNode(IFNE, lStart));
    }
View Full Code Here

        List<?> local = null, stack = null;
        opcode = jsonObject.get("opcode").getAsInt();
        type = jsonObject.get("type").getAsInt();
        local = context.deserialize(jsonObject.get("local"), List.class);
        stack = context.deserialize(jsonObject.get("stack"), List.class);
        FrameNode node = new FrameNode(opcode, local.size(), local.toArray(), stack.size(), stack.toArray());
        node.type = type;
        return node;
    }
View Full Code Here

          case "IINC":
            return new IincInsnNode(toint(args[1]), toint(args[2]));
          case "FRAME":
            switch (args[1].toUpperCase()) {
              case "SAME":
                return new FrameNode(F_SAME, 0, null, 0, null);

              case "SAME1":
                switch (Character.toUpperCase(args[2].charAt(0))) {
                  case 'T':
                    return new FrameNode(F_SAME1, 0, null, 1, new Object[] {0});
                  case 'I':
                    return new FrameNode(F_SAME1, 0, null, 1, new Object[] {1});
                  case 'F':
                    return new FrameNode(F_SAME1, 0, null, 1, new Object[] {2});
                  case 'D':
                    return new FrameNode(F_SAME1, 0, null, 1, new Object[] {3});
                  case 'J':
                    return new FrameNode(F_SAME1, 0, null, 1, new Object[] {4});
                  case 'N':
                    return new FrameNode(F_SAME1, 0, null, 1, new Object[] {5});
                  case 'U':
                    return new FrameNode(F_SAME1, 0, null, 1, new Object[] {6});
                  case 'L':
                    return new FrameNode(F_SAME1, 0, null, 1, new Object[] {new Label()});// FIXME
                  case '[':
                  default:
                    return new FrameNode(F_SAME1, 0, null, 1, new Object[] {args[2]});
                }

              case "CHOP":
                return new FrameNode(F_CHOP, toint(args[2]), null, 0, null);

              case "FULL":
              case "NEW": {// DAMN THIS IS GONNA SUCK DDD:
                boolean doingLocals = true;
                boolean done = false;

                List<Object> locals = new ArrayList<Object>();
                List<Object> stack = new ArrayList<Object>();
                for (int i = 2; i < args.length; i++) {
                  if (args[i].length() > 0) {
                    String part = args[i];
                    if (part.charAt(0) == '[') {
                      part = part.substring(1);
                    } else if (part.endsWith("]")) {
                      if (!doingLocals) {
                        done = true;
                      } else {
                        locals.add(part.substring(0, part.length() - 1));

                        doingLocals = false;
                      }
                      part = part.substring(0, part.length() - 1);

                      switch (Character.toUpperCase(args[i].charAt(0))) {
                        case 'T':
                          (doingLocals ? locals : stack).add(0);
                        case 'I':
                          (doingLocals ? locals : stack).add(1);
                        case 'F':
                          (doingLocals ? locals : stack).add(2);
                        case 'D':
                          (doingLocals ? locals : stack).add(3);
                        case 'J':
                          (doingLocals ? locals : stack).add(4);
                        case 'N':
                          (doingLocals ? locals : stack).add(5);
                        case 'U':
                          (doingLocals ? locals : stack).add(6);
                        case 'L':
                          (doingLocals ? locals : stack).add(new CustomLabel(toint(part
                              .substring(1))));
                        case '[':
                        default:
                          (doingLocals ? locals : stack).add(args[i]);
                      }
                    }
                    if (done) {
                      break;
                    }
                  }
                }
                return new FrameNode(args[1].equalsIgnoreCase("new") ? F_NEW : F_FULL,
                    locals.size(), locals.toArray(), stack.size(), stack.toArray());
              }
              case "APPEND": {
                boolean done = false;
                List<Object> locals = new ArrayList<Object>();
                for (int i = 2; i < args.length; i++) {
                  String part = args[i];
                  if (part.length() > 0) {
                    if (part.charAt(0) == '[') {
                      part = part.substring(1);
                    } else if (part.endsWith("]")) {
                      done = true;
                      part = part.substring(0, part.length() - 1);
                    }
                    if (!part.contains("/")) {
                      switch (Character.toUpperCase(part.charAt(0))) {
                        case 'T':
                          locals.add(0);
                        case 'I':
                          locals.add(1);
                        case 'F':
                          locals.add(2);
                        case 'D':
                          locals.add(3);
                        case 'J':
                          locals.add(4);
                        case 'N':
                          locals.add(5);
                        case 'U':
                          locals.add(6);
                        case 'L':
                          locals.add(new CustomLabel(toint(part.substring(1))));
                        case '[':
                        default:
                          locals.add(part);
                      }
                    } else {
                      locals.add(part);
                    }



                  }

                  if (done) {
                    break;
                  }
                }
                return new FrameNode(F_APPEND, locals.size(), locals.toArray(), 0, null);
              }
            }
        }
        throw new InvalidBytecodeException(args);
View Full Code Here

          InvokeDynamicInsnNode idin = (InvokeDynamicInsnNode) ain;
          // idin.
          // TODO all of invokedynamic.
          break;
        case AbstractInsnNode.FRAME:
          FrameNode fn = (FrameNode) ain;
          fullInsn = translateFrameToText(fn, instructions);
          break;


      // TODO the rest.
View Full Code Here

        method.instructions.add(new FieldInsnNode(GETSTATIC, classNode.name, "LISTENER_LIST", tList.getDescriptor()));
        LabelNode initLisitener = new LabelNode();
        method.instructions.add(new JumpInsnNode(IFNULL, initLisitener));
        method.instructions.add(new InsnNode(RETURN));
        method.instructions.add(initLisitener);
        method.instructions.add(new FrameNode(F_SAME, 0, null, 0, null));
        method.instructions.add(new TypeInsnNode(NEW, tList.getInternalName()));
        method.instructions.add(new InsnNode(DUP));
        method.instructions.add(new VarInsnNode(ALOAD, 0));
        method.instructions.add(new MethodInsnNode(INVOKESPECIAL, tSuper.getInternalName(), "getListenerList", getMethodDescriptor(tList), false));
        method.instructions.add(new MethodInsnNode(INVOKESPECIAL, tList.getInternalName(), "<init>", getMethodDescriptor(VOID_TYPE, tList), false));
View Full Code Here

TOP

Related Classes of org.objectweb.asm.tree.FrameNode

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.