1 package org.simantics.scl.compiler.tests;
3 import java.lang.reflect.Method;
5 import org.objectweb.asm.ClassWriter;
6 import org.objectweb.asm.MethodVisitor;
7 import org.objectweb.asm.Opcodes;
9 public class FindAllowedChars {
10 public static class MyClassLoader extends ClassLoader {
11 final String className;
12 final byte[] classBytes;
14 public MyClassLoader(ClassLoader parent, String className, byte[] classBytes) {
16 this.className = className;
17 this.classBytes = classBytes;
20 public MyClassLoader(String className, byte[] classBytes) {
21 this.className = className;
22 this.classBytes = classBytes;
26 protected Class<?> findClass(String name) throws ClassNotFoundException {
28 return defineClass(name, classBytes, 0, classBytes.length);
30 return super.findClass(name);
34 public static void test(String className, String methodName) throws Exception {
35 ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
36 classWriter.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, className, null, "java/lang/Object", null);
38 MethodVisitor methodVisitor = classWriter.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, methodName, "()V", null, null);
39 /*methodVisitor.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
40 methodVisitor.visitLdcInsn("Hello world!");
41 methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);*/
42 methodVisitor.visitInsn(Opcodes.RETURN);
43 methodVisitor.visitMaxs(0, 0);
44 methodVisitor.visitEnd();
45 classWriter.visitEnd();
47 ClassLoader loader = new MyClassLoader(className, classWriter.toByteArray());
48 Class<?> clazz = loader.loadClass(className);
49 Method method = clazz.getMethod(methodName);
53 public static void main(String[] args) throws Exception {
54 for(int a=Character.MIN_VALUE;a<Character.MAX_VALUE;++a) {
55 //for(char b=0;b<256;++b) {
56 String name = new String(new char[] {(char)a});
59 } catch(Throwable e) {
60 System.out.println(name + " (" + a + ")");
64 System.out.println((int)Character.MAX_VALUE);