]> gerrit.simantics Code Review - simantics/platform.git/blob - tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/FindAllowedChars.java
(refs #7250) Merging master, minor CHR bugfixes
[simantics/platform.git] / tests / org.simantics.scl.compiler.tests / src / org / simantics / scl / compiler / tests / FindAllowedChars.java
1 package org.simantics.scl.compiler.tests;
2
3 import java.lang.reflect.Method;
4
5 import org.objectweb.asm.ClassWriter;
6 import org.objectweb.asm.MethodVisitor;
7 import org.objectweb.asm.Opcodes;
8
9 public class FindAllowedChars {
10     public static class MyClassLoader extends ClassLoader {
11         final String className;
12         final byte[] classBytes;
13         
14         public MyClassLoader(ClassLoader parent, String className, byte[] classBytes) {
15             super(parent);
16             this.className = className;
17             this.classBytes = classBytes;
18         }
19         
20         public MyClassLoader(String className, byte[] classBytes) {
21             this.className = className;
22             this.classBytes = classBytes;
23         }
24
25         @Override
26         protected Class<?> findClass(String name) throws ClassNotFoundException {
27             if(name.equals(name))
28                 return defineClass(name, classBytes, 0, classBytes.length);
29             else
30                 return super.findClass(name);
31         }
32     }
33     
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);
37         
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();
46  
47         ClassLoader loader = new MyClassLoader(className, classWriter.toByteArray());
48         Class<?> clazz = loader.loadClass(className);
49         Method method = clazz.getMethod(methodName);
50         method.invoke(null);
51     }
52     
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});
57                 try {
58                     test(name, "test");
59                 } catch(Throwable e) {
60                     System.out.println(name + " (" + a + ")");
61                 }
62             //}   
63         }
64         System.out.println((int)Character.MAX_VALUE);
65     }
66 }