-package org.simantics.scl.compiler.tests;\r
-\r
-import java.lang.reflect.Method;\r
-\r
-import org.objectweb.asm.ClassWriter;\r
-import org.objectweb.asm.MethodVisitor;\r
-import org.objectweb.asm.Opcodes;\r
-\r
-public class FindAllowedChars {\r
- public static class MyClassLoader extends ClassLoader {\r
- final String className;\r
- final byte[] classBytes;\r
- \r
- public MyClassLoader(ClassLoader parent, String className, byte[] classBytes) {\r
- super(parent);\r
- this.className = className;\r
- this.classBytes = classBytes;\r
- }\r
- \r
- public MyClassLoader(String className, byte[] classBytes) {\r
- this.className = className;\r
- this.classBytes = classBytes;\r
- }\r
-\r
- @Override\r
- protected Class<?> findClass(String name) throws ClassNotFoundException {\r
- if(name.equals(name))\r
- return defineClass(name, classBytes, 0, classBytes.length);\r
- else\r
- return super.findClass(name);\r
- }\r
- }\r
- \r
- public static void test(String className, String methodName) throws Exception {\r
- ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);\r
- classWriter.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, className, null, "java/lang/Object", null);\r
- \r
- MethodVisitor methodVisitor = classWriter.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, methodName, "()V", null, null);\r
- /*methodVisitor.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");\r
- methodVisitor.visitLdcInsn("Hello world!");\r
- methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);*/\r
- methodVisitor.visitInsn(Opcodes.RETURN);\r
- methodVisitor.visitMaxs(0, 0);\r
- methodVisitor.visitEnd();\r
- classWriter.visitEnd();\r
- \r
- ClassLoader loader = new MyClassLoader(className, classWriter.toByteArray());\r
- Class<?> clazz = loader.loadClass(className);\r
- Method method = clazz.getMethod(methodName);\r
- method.invoke(null);\r
- }\r
- \r
- public static void main(String[] args) throws Exception {\r
- for(int a=Character.MIN_VALUE;a<Character.MAX_VALUE;++a) {\r
- //for(char b=0;b<256;++b) {\r
- String name = new String(new char[] {(char)a});\r
- try {\r
- test(name, "test");\r
- } catch(Throwable e) {\r
- System.out.println(name + " (" + a + ")");\r
- }\r
- //} \r
- }\r
- System.out.println((int)Character.MAX_VALUE);\r
- }\r
-}\r
+package org.simantics.scl.compiler.tests;
+
+import java.lang.reflect.Method;
+
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+
+public class FindAllowedChars {
+ public static class MyClassLoader extends ClassLoader {
+ final String className;
+ final byte[] classBytes;
+
+ public MyClassLoader(ClassLoader parent, String className, byte[] classBytes) {
+ super(parent);
+ this.className = className;
+ this.classBytes = classBytes;
+ }
+
+ public MyClassLoader(String className, byte[] classBytes) {
+ this.className = className;
+ this.classBytes = classBytes;
+ }
+
+ @Override
+ protected Class<?> findClass(String name) throws ClassNotFoundException {
+ if(name.equals(name))
+ return defineClass(name, classBytes, 0, classBytes.length);
+ else
+ return super.findClass(name);
+ }
+ }
+
+ public static void test(String className, String methodName) throws Exception {
+ ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
+ classWriter.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, className, null, "java/lang/Object", null);
+
+ MethodVisitor methodVisitor = classWriter.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, methodName, "()V", null, null);
+ /*methodVisitor.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+ methodVisitor.visitLdcInsn("Hello world!");
+ methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);*/
+ methodVisitor.visitInsn(Opcodes.RETURN);
+ methodVisitor.visitMaxs(0, 0);
+ methodVisitor.visitEnd();
+ classWriter.visitEnd();
+
+ ClassLoader loader = new MyClassLoader(className, classWriter.toByteArray());
+ Class<?> clazz = loader.loadClass(className);
+ Method method = clazz.getMethod(methodName);
+ method.invoke(null);
+ }
+
+ public static void main(String[] args) throws Exception {
+ for(int a=Character.MIN_VALUE;a<Character.MAX_VALUE;++a) {
+ //for(char b=0;b<256;++b) {
+ String name = new String(new char[] {(char)a});
+ try {
+ test(name, "test");
+ } catch(Throwable e) {
+ System.out.println(name + " (" + a + ")");
+ }
+ //}
+ }
+ System.out.println((int)Character.MAX_VALUE);
+ }
+}