List of usage examples for org.objectweb.asm Label toString
@Override
public String toString()
From source file:com.codename1.tools.translator.bytecodes.LabelInstruction.java
License:Open Source License
public static void labelIsUsed(Label l) { String s = l.toString(); if (!usedLabels.contains(s)) { usedLabels.add(s);//from ww w .j ava2 s. co m } }
From source file:com.sun.tdk.jcov.instrument.BranchCodeMethodAdapter.java
License:Open Source License
private String labelString(LabelNode lnode) { Label lab = lnode.getLabel(); return lab.toString(); }
From source file:net.nexustools.jvm.compiler.Compiler.java
License:Open Source License
public void compile(String rawClassname) throws IOException { if (processed.contains(rawClassname)) return;//from ww w .ja va 2 s.c om processed.add(rawClassname); System.out.println("Resolving class " + rawClassname); final String classname, runtimeClassname = convertRuntime(rawClassname); for (String builtin : BUILT_IN) if (builtin.equals(runtimeClassname)) { usedbuiltins.add(builtin); return; // Skip } if (javaClass.matcher(rawClassname).find()) classname = "net/nexustools/jvm/runtime/" + rawClassname; else classname = rawClassname; File findFile = resolve(classname + ".class"); ClassReader reader; try { if (findFile.exists()) { if (!classname.equals(rawClassname)) { if (processed.contains(classname)) return; processed.add(classname); } reader = new ClassReader(new FileInputStream(findFile)); } else { throw new CompileError("No implementation found: " + classname); //reader = new ClassReader(rawClassname); //System.err.println("\tUsing system provided class impl"); } } catch (IOException ex) { throw new CompileError(ex); } int offset = outputFolder.getPath().length() + 1; File output = resolveOutput(findFile, runtimeClassname + ".js"); File parentFile = output.getParentFile(); if (!parentFile.isDirectory() && !parentFile.mkdirs()) throw new RuntimeException("Cannot create directory: " + parentFile); File nativeFile = resolve(classname + ".native.js"); if (nativeFile.exists()) { File outputResolvedPath = new File(parentFile, nativeFile.getName()); copy(new FileInputStream(nativeFile), new FileOutputStream(outputResolvedPath)); natives.add(outputResolvedPath.getPath().substring(offset)); } compiled.add(output.getPath().substring(offset)); final List<String> references = new ArrayList(); final Referencer referencer = new Referencer() { @Override public boolean add(String reference) { reference = convertRuntime(reference); if (references.contains(reference)) return false; references.add(reference); return true; } }; final SignatureConverter converter = new SignatureConverter() { @Override public String convert(String input) { String ref = input; while (ref.startsWith("[")) ref = ref.substring(1); if (ref.startsWith("L") && ref.endsWith(";")) referencer.add(ref.substring(1, ref.length() - 1)); else if (ref.length() > 1) referencer.add(ref); return convertSignature(input); } }; final OutputStreamWriter oSw = new OutputStreamWriter(new FileOutputStream(output)); final BufferedWriter bw = new BufferedWriter(oSw); try { bw.append("(function JVM_"); bw.append(runtimeClassname.replaceAll("\\W", "_")); bw.append("($JVM, JVM){\n\t$JVM.ClassLoader.defineClass(\""); bw.append(runtimeClassname); bw.append("\", ["); String[] interfaces = reader.getInterfaces(); references.addAll(Arrays.asList(interfaces)); for (int i = 0; i < interfaces.length; i++) { if (i > 0) bw.append(','); bw.append('\"'); bw.append(convertRuntime(interfaces[i])); bw.append('\"'); } bw.append("], "); String parent = reader.getSuperName(); if (parent != null && !references.contains(parent)) { bw.append('\"'); bw.append(convertRuntime(parent)); bw.append('\"'); references.add(parent); } else bw.append("null"); bw.append(", [\n"); final List<String> fields = new ArrayList(); final List<String> methods = new ArrayList(); System.out.println("\tVisiting class " + classname); final int[] methodAccess = new int[1]; final MethodVisitor methodVisitor = new MethodVisitor(Opcodes.ASM4) { @Override public void visitEnd() { try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"end\"\n"); bw.append("\t\t\t\t}\n"); bw.append("\t\t\t],\n"); writeAccess(methodAccess[0], bw); bw.append("\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitTryCatchBlock(Label start, Label end, Label handler, String type) { System.out.println( "\t\t\tvisitTryCatchBlock: " + start + ", " + end + ", " + handler + ", " + type); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"try\",\n"); bw.append("\t\t\t\t\t\"start\": \""); bw.append(start.toString()); bw.append("\",\n"); bw.append("\t\t\t\t\t\"end\": \""); bw.append(end.toString()); bw.append("\",\n"); bw.append("\t\t\t\t\t\"handler\": \""); bw.append(handler.toString()); bw.append("\",\n"); bw.append("\t\t\t\t\t\"catch\": \""); bw.append(type); bw.append("\"\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { System.out.println("\t\t\tvisitMethodInsn: " + nameForOpcode(opcode) + ", " + owner + ", " + name + ", " + desc + ", " + itf); /*if(name.equals("<init>") && desc.equals("()V") && runtimeClassname.equals("java/lang/Object")) { try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"initobject\"\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } return; }*/ try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"method\",\n"); bw.append("\t\t\t\t\t\"opcode\": JVM.Opcodes."); bw.append(nameForOpcode(opcode)); bw.append(",\n"); bw.append("\t\t\t\t\t\"owner\": "); bw.append(converter.convert(owner)); bw.append(",\n"); bw.append("\t\t\t\t\t\"name\": \""); bw.append(name); bw.append("\",\n"); bw.append("\t\t\t\t\t\"signature\": {\n"); bw.append("\t\t\t\t\t\t\"raw\": \""); bw.append(convertRuntime(desc)); bw.append("\",\n"); bw.append("\t\t\t\t\t\t\"return\": "); Matcher matcher = methodSignature.matcher(desc); if (!matcher.matches()) throw new IllegalArgumentException("Corrupt or invalid method signature: " + desc); bw.append(converter.convert(matcher.group(2))); bw.append(",\n"); String args = matcher.group(1); if (args != null) { bw.append("\t\t\t\t\t\t\"args\": [\n"); String[] argsl = splitArguments(args); /*matcher = classSignature.matcher(args); while(matcher.find()) argsl.add(converter.convert(matcher.group(1)));*/ for (int i = 0; i < argsl.length; i++) { bw.append("\t\t\t\t\t\t\t"); bw.append(converter.convert(argsl[i])); if (i < argsl.length - 1) bw.append(','); bw.append('\n'); } bw.append("\t\t\t\t\t\t]\n"); } else bw.append("\t\t\t\t\t\t\"args\": []\n"); bw.append("\t\t\t\t\t},\n"); bw.append("\t\t\t\t\t\"interface\": "); bw.append(itf ? "true" : "false"); bw.append("\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitTableSwitchInsn(int min, int max, Label dflt, Label... labels) { System.out.println("\t\t\tvisitTableSwitchInsn: " + min + ", " + max + ", " + dflt + ", " + Arrays.toString(labels)); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"tableSwitch\",\n"); bw.append("\t\t\t\t\t\"min\": \""); bw.append(String.valueOf(min)); bw.append("\",\n"); bw.append("\t\t\t\t\t\"max\": \""); bw.append(String.valueOf(max)); bw.append("\",\n"); bw.append("\t\t\t\t\t\"default\": \""); bw.append(dflt.toString()); bw.append("\",\n"); bw.append("\t\t\t\t\t\"jumps\": [\n"); for (int i = 0; i < labels.length; i++) { bw.append("\t\t\t\t\t\t\""); bw.append(labels[i].toString()); bw.append('"'); if (i < labels.length - 1) bw.append(','); bw.append('\n'); } bw.append("\t\t\t\t\t]\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitMultiANewArrayInsn(String desc, int dims) { System.out.println("\t\t\tvisitMultiANewArrayInsn: " + desc + ", " + dims); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"array\",\n"); bw.append("\t\t\t\t\t\"desc\": \""); bw.append(desc); bw.append("\",\n"); bw.append("\t\t\t\t\t\"size\": \""); bw.append(String.valueOf(dims)); bw.append("\"\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitIincInsn(int var, int increment) { System.out.println("\t\t\tvisitIincInsn: " + var + ", " + increment); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"iinc\",\n"); bw.append("\t\t\t\t\t\"index\": \""); bw.append(String.valueOf(var)); bw.append("\",\n"); bw.append("\t\t\t\t\t\"by\": \""); bw.append(String.valueOf(increment)); bw.append("\"\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) { System.out.println("\t\t\tvisitLookupSwitchInsn: " + dflt + ", " + Arrays.toString(keys) + ", " + Arrays.toString(labels)); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"switch\",\n"); if (dflt != null) { bw.append("\t\t\t\t\t\"default\": \""); bw.append(dflt.toString()); bw.append("\",\n"); } bw.append("\t\t\t\t\t\"keys\": [\n"); for (int i = 0; i < keys.length; i++) { bw.append("\t\t\t\t\t\t"); bw.append(String.valueOf(keys[i])); if (i < keys.length - 1) bw.append(','); bw.append('\n'); } bw.append("\t\t\t\t\t],\n"); bw.append("\t\t\t\t\t\"jumps\": [\n"); for (int i = 0; i < labels.length; i++) { bw.append("\t\t\t\t\t\t\""); bw.append(labels[i].toString()); bw.append('"'); if (i < labels.length - 1) bw.append(','); bw.append('\n'); } bw.append("\t\t\t\t\t]\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) { System.out.println("\t\t\tvisitLocalVariable: " + name + ", " + desc + ", " + start + ", " + end + ", " + index); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"declare\",\n"); bw.append("\t\t\t\t\t\"name\": \""); bw.append(String.valueOf(name)); bw.append("\",\n"); bw.append("\t\t\t\t\t\"signature\": "); bw.append(converter.convert(desc)); bw.append(",\n"); bw.append("\t\t\t\t\t\"index\": \""); bw.append(String.valueOf(index)); bw.append("\",\n"); bw.append("\t\t\t\t\t\"start\": \""); bw.append(start.toString()); bw.append("\",\n"); bw.append("\t\t\t\t\t\"end\": \""); bw.append(end.toString()); bw.append("\"\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitParameter(String name, int access) { System.out.println("\t\t\tvisitParameter: " + name + ", " + access); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"arg\",\n"); bw.append("\t\t\t\t\t\"name\": \""); bw.append(name); bw.append("\",\n"); bw.append("\t\t\t\t\t\"access\": \""); bw.append(String.valueOf(access)); bw.append("\"\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitVarInsn(int opcode, int var) { System.out.println("\t\t\tvisitVarInsn: " + nameForOpcode(opcode) + ", " + var); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"var\",\n"); bw.append("\t\t\t\t\t\"opcode\": JVM.Opcodes."); bw.append(nameForOpcode(opcode)); bw.append(",\n"); bw.append("\t\t\t\t\t\"index\": \""); bw.append(String.valueOf(var)); bw.append("\"\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitTypeInsn(int opcode, String type) { System.out.println("\t\t\tvisitTypeInsn: " + nameForOpcode(opcode) + ", " + type); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"type\",\n"); bw.append("\t\t\t\t\t\"opcode\": JVM.Opcodes."); bw.append(nameForOpcode(opcode)); bw.append(",\n"); bw.append("\t\t\t\t\t\"signature\": "); bw.append(converter.convert(type)); bw.append('\n'); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitLdcInsn(Object cst) { System.out.println("\t\t\tvisitLdcInsn: " + cst); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"ldc\",\n"); if (cst instanceof String) { bw.append("\t\t\t\t\t\"stringValue\": "); bw.append(new Gson().toJson((String) cst)); bw.append("\n"); } else if (cst instanceof Number) { bw.append("\t\t\t\t\t\"numericValue\": "); bw.append(String.valueOf((Number) cst)); bw.append("\n"); } else if (cst instanceof org.objectweb.asm.Type) { org.objectweb.asm.Type type = (org.objectweb.asm.Type) cst; switch (type.getSort()) { case Type.OBJECT: System.out.println("OBJECT REFERENCE"); String ref = type.getInternalName(); bw.append("\t\t\t\t\t\"objectRef\": "); bw.append(converter.convert(ref)); bw.append("\n"); break; default: throw new UnsupportedOperationException("Cannot handle type: " + type.getSort()); } /*System.out.println("asm type: " + type.getInternalName()); System.out.println(type.getReturnType()); System.out.println(type.getDescriptor()); System.out.println(type.getElementType()); System.out.println(type.getDimensions()); System.out.println(type.getClassName()); throw new UnsupportedOperationException("Cannot handle types yet...");*/ } else throw new UnsupportedOperationException( "Unsupported type for LDC: " + cst.getClass().getName()); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitInvokeDynamicInsn(String name, String desc, Handle bsm, Object... bsmArgs) { throw new UnsupportedOperationException(); /*System.out.println("\t\t\tvisitInvokeDynamicInsn: " + name + ", " + desc + ", " + bsm + ", " + Arrays.toString(bsmArgs)); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"invokeDynamic\",\n"); bw.append("\t\t\t\t\t\"name\": \""); bw.append(name); bw.append("\",\n"); bw.append("\t\t\t\t\t\"signature\": \""); bw.append(desc); bw.append("\"\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); }*/ } @Override public void visitLabel(Label label) { System.out.println("\t\t\tvisitLabel: " + label.toString()); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"label\",\n"); bw.append("\t\t\t\t\t\"name\": \""); bw.append(label.toString()); bw.append("\"\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitJumpInsn(int opcode, Label label) { System.out.println("\t\t\tvisitJumpInsn: " + nameForOpcode(opcode) + ", " + label.toString()); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"jump\",\n"); bw.append("\t\t\t\t\t\"opcode\": JVM.Opcodes."); bw.append(nameForOpcode(opcode)); bw.append(",\n"); bw.append("\t\t\t\t\t\"name\": \""); bw.append(label.toString()); bw.append("\"\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitInsn(int opcode) { System.out.println("\t\t\tvisitInsn: " + nameForOpcode(opcode)); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"insn\",\n"); bw.append("\t\t\t\t\t\"opcode\": JVM.Opcodes."); bw.append(nameForOpcode(opcode)); bw.append("\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitIntInsn(int opcode, int operand) { System.out.println("\t\t\tvisitIntInsn: " + nameForOpcode(opcode) + ", " + operand); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"int\",\n"); bw.append("\t\t\t\t\t\"opcode\": JVM.Opcodes."); bw.append(nameForOpcode(opcode)); bw.append(",\n"); bw.append("\t\t\t\t\t\"operand\": \""); bw.append(String.valueOf(operand)); bw.append("\"\n"); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public void visitFieldInsn(int opcode, String owner, String name, String desc) { System.out.println("\t\t\tvisitFieldInsn: " + nameForOpcode(opcode) + ", " + owner + ", " + name + ", " + desc); try { bw.append("\t\t\t\t{\n"); bw.append("\t\t\t\t\t\"type\": \"field\",\n"); bw.append("\t\t\t\t\t\"opcode\": JVM.Opcodes."); bw.append(nameForOpcode(opcode)); bw.append(",\n"); bw.append("\t\t\t\t\t\"class\": "); bw.append(converter.convert(owner)); bw.append(",\n"); bw.append("\t\t\t\t\t\"name\": \""); bw.append(name); bw.append("\",\n"); bw.append("\t\t\t\t\t\"signature\": "); bw.append(converter.convert(desc)); bw.append('\n'); bw.append("\t\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } }; final ClassOptimizer[] classOptimizer = new ClassOptimizer[1]; ClassVisitor classVisitor = new ClassVisitor(Opcodes.ASM4) { @Override public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { System.out.println("\t\tField: " + name + ", " + desc + ", " + value + ", " + access); if (!fields.contains(name)) { fields.add(name); } try { bw.append("\t\t{\n"); bw.append("\t\t\t\"type\": \"field\",\n"); bw.append("\t\t\t\"name\": \""); bw.append(name); bw.append("\",\n"); bw.append("\t\t\t\"signature\": "); bw.append(converter.convert(desc)); bw.append(",\n"); if (value instanceof String) { bw.append("\t\t\t\"stringValue\": \""); bw.append(((String) value).replace("\n", "\\n").replace("\"", "\\\"")); bw.append("\",\n"); } else if (value instanceof Number) { bw.append("\t\t\t\"numericValue\": "); bw.append(String.valueOf((Number) value)); bw.append(",\n"); } else if (value != null) throw new RuntimeException("Unhandled initial value: " + value); writeAccess(access, bw); bw.append("\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } //if(signature != null) { Matcher matcher = classSignature.matcher(desc); if (matcher.matches() && !references.contains(matcher.group(1))) references.add(matcher.group(1)); //} return super.visitField(access, name, desc, signature, value); } @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { System.out.println("\t\tMethod: " + name + ", " + desc + ", " + signature + ", " + access + ", " + Arrays.toString(exceptions)); if (!methods.contains(name)) methods.add(name); try { bw.append("\t\t{\n"); bw.append("\t\t\t\"type\": \"method\",\n"); bw.append("\t\t\t\"name\": \""); bw.append(name); bw.append("\",\n"); bw.append("\t\t\t\"signature\": \""); bw.append(convertRuntime(desc)); bw.append("\",\n"); bw.append("\t\t\t\"sigparts\": {\n"); bw.append("\t\t\t\t\"return\": "); Matcher matcher = methodSignature.matcher(desc); if (!matcher.matches()) throw new IllegalArgumentException("Corrupt or invalid method signature: " + desc); bw.append(converter.convert(matcher.group(2))); bw.append(",\n"); String args = matcher.group(1); if (args != null) { bw.append("\t\t\t\t\"args\": [\n"); String[] argsl = splitArguments(args); /*matcher = classSignature.matcher(args); while(matcher.find()) argsl.add(converter.convert(matcher.group(1)));*/ for (int i = 0; i < argsl.length; i++) { bw.append("\t\t\t\t\t"); bw.append(converter.convert(argsl[i])); if (i < argsl.length - 1) bw.append(','); bw.append('\n'); } bw.append("\t\t\t\t]\n"); } else bw.append("\t\t\t\t\"args\": []\n"); bw.append("\t\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } if (exceptions != null) { try { bw.append("\t\t\t\"exceptions\": [\n"); } catch (IOException ex) { throw new RuntimeException(ex); } for (int i = 0; i < exceptions.length; i++) { String exception = exceptions[i]; if (!references.contains(exception)) references.add(exception); try { bw.append("\t\t\t\t\""); bw.append(convertRuntime(exception)); bw.append('"'); if (i < exceptions.length - 1) bw.append(','); bw.append('\n'); } catch (IOException ex) { throw new RuntimeException(ex); } } try { bw.append("\t\t\t],\n"); } catch (IOException ex) { throw new RuntimeException(ex); } } Matcher matcher = methodSignature.matcher(desc); matcher.matches(); String args = matcher.group(1); String ret = matcher.group(2); matcher = classSignature.matcher(ret); if (matcher.matches() && !references.contains(matcher.group(1))) references.add(matcher.group(1)); if (args != null) { matcher = classSignature.matcher(args); while (matcher.find()) if (!references.contains(matcher.group(1))) references.add(matcher.group(1)); } if ((access & Opcodes.ACC_NATIVE) != 0) { try { bw.append("\t\t\t\"implementation\": \""); bw.append(runtimeClassname + ".native.js"); bw.append("\",\n"); writeAccess(access, bw); bw.append("\t\t},\n"); } catch (IOException ex) { throw new RuntimeException(ex); } return super.visitMethod(access, name, desc, signature, exceptions); } try { bw.append("\t\t\t\"implementation\": [\n"); bw.flush(); } catch (IOException ex) { throw new RuntimeException(ex); } methodAccess[0] = access; //return new MethodOptimizer(classOptimizer[0], access, desc, methodVisitor, new Remapper() {}); return methodVisitor; } }; //classOptimizer[0] = new ClassOptimizer(classVisitor, new Remapper() {}); //reader.accept(classOptimizer[0], 0); reader.accept(classVisitor, 0); bw.append("\t\t{\n"); bw.append("\t\t\t\"type\": \"references\",\n"); bw.append("\t\t\t\"value\": [\n"); List<String> written = new ArrayList(); for (int i = 0; i < references.size(); i++) { String ref = convertRuntime(references.get(i)); if (written.contains(ref)) continue; written.add(ref); bw.append("\t\t\t\t\""); bw.append(ref); bw.append('"'); if (i < references.size() - 1) bw.append(','); bw.append('\n'); } bw.append("\t\t\t]\n"); bw.append("\t\t}\n"); bw.append("\t]);\n"); bw.append("})($currentJVM, JVM);"); } finally { bw.close(); } System.out.println("\tProcessing references: " + references); for (String ref : references) compile(ref); referenceMap.put(runtimeClassname, references); }
From source file:org.adjective.stout.tools.StackVisualiserMethodVisitor.java
License:Apache License
public void visitJumpInsn(int opcode, Label label) { switch (opcode) { case Opcodes.IFEQ: pop(Type.INT_TYPE, Type.BOOLEAN_TYPE); break;//from w w w . j a v a 2 s . co m case Opcodes.GOTO: break; default: throw new IllegalArgumentException("Unsupported opcode " + OPCODES[opcode]); } print(opcode, label.toString()); label(label, OPCODES[opcode]); }
From source file:org.conqat.engine.java.fingerprinting.HashingMethodVisitor.java
License:Apache License
/** Get a hashable representation of a label. */ private String getLabel(Label label) { String value = labelCache.get(label.toString()); if (value == null) { value = "label" + labelCache.size(); labelCache.put(label.toString(), value); }//from ww w .jav a 2s. c om return value; }
From source file:org.lambdamatic.analyzer.ast.InsnCursor.java
License:Open Source License
/** * Moves to the first {@link AbstractInsnNode} in the list having the given {@code label}. * * @param label the target label to reach * @return {@code this}, by convenience. * @throws NoSuchElementException if the iteration has no next element *///from w w w . j av a2 s. co m public InsnCursor move(final Label label) { final AbstractInsnNode targetInstruction = this.labels.get(label.toString()); if (this.instructions.indexOf(targetInstruction) > this.currentPosition) { while (this.currentInstruction != targetInstruction) { next(); } } else { while (this.currentInstruction != targetInstruction) { previous(); } } return this; }
From source file:org.testeoa.estatica.AdapterInstrum.java
License:Open Source License
void inserirLabel(Label label) { super.visitLdcInsn(label.toString()); super.visitMethodInsn(Opcodes.INVOKESTATIC, "org/testeoa/dinamica/AnaliseDinamica", "LABEL", "(Ljava/lang/String;)V"); }
From source file:serianalyzer.SerianalyzerMethodVisitor.java
License:Open Source License
/** * {@inheritDoc}/* ww w .j av a 2s.c o m*/ * * @see org.objectweb.asm.MethodVisitor#visitJumpInsn(int, org.objectweb.asm.Label) */ @Override public void visitJumpInsn(int opcode, Label label) { this.foundJump = true; boolean tainted = JVMImpl.handleJVMJump(opcode, label, this.stack); if (this.foundLabels.contains(label)) { this.backwardJumpsToLabels.add(label); if (this.log.isTraceEnabled()) { this.log.trace((tainted ? "Tainted " : "") + "backward jump to " + label.toString()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } } else { if (this.log.isTraceEnabled()) { this.log.trace((tainted ? "Tainted " : "") + "forward jump to " + label.toString()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } } super.visitJumpInsn(opcode, label); }