-package org.simantics.scl.compiler.tests.experimentation;\r
-\r
-import java.io.PrintWriter;\r
-import java.lang.reflect.Method;\r
-import java.util.concurrent.atomic.AtomicReference;\r
-\r
-import org.objectweb.asm.ClassVisitor;\r
-import org.objectweb.asm.ClassWriter;\r
-import org.objectweb.asm.MethodVisitor;\r
-import org.objectweb.asm.Opcodes;\r
-import org.objectweb.asm.util.TraceClassVisitor;\r
-\r
-public class RecursiveInitialization {\r
-\r
- public static void main(String[] args) throws Exception {\r
- ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);\r
- ClassVisitor classVisitor = new TraceClassVisitor(classWriter, new PrintWriter(System.out));\r
- classVisitor.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, "test/Test", null, "java/lang/Object", new String[0]);\r
- MethodVisitor methodWriter = classVisitor.visitMethod(\r
- Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC,\r
- "main", "()Ljava/lang/Object;", null, null);\r
- \r
- methodWriter.visitCode(); \r
- methodWriter.visitTypeInsn(Opcodes.NEW, "java/util/concurrent/atomic/AtomicReference");\r
- methodWriter.visitVarInsn(Opcodes.ASTORE, 2);\r
-\r
- methodWriter.visitTypeInsn(Opcodes.NEW, "java/util/concurrent/atomic/AtomicReference");\r
- methodWriter.visitVarInsn(Opcodes.ASTORE, 1);\r
- \r
- methodWriter.visitVarInsn(Opcodes.ALOAD, 2);\r
- methodWriter.visitVarInsn(Opcodes.ALOAD, 1);\r
- //methodWriter.visitInsn(Opcodes.ACONST_NULL);\r
- methodWriter.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/concurrent/atomic/AtomicReference", "<init>", "(Ljava/lang/Object;)V", false);\r
- \r
- methodWriter.visitVarInsn(Opcodes.ALOAD, 1);\r
- methodWriter.visitVarInsn(Opcodes.ALOAD, 2);\r
- methodWriter.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/concurrent/atomic/AtomicReference", "<init>", "(Ljava/lang/Object;)V", false);\r
-\r
- methodWriter.visitVarInsn(Opcodes.ALOAD, 2);\r
- methodWriter.visitInsn(Opcodes.ARETURN);\r
- methodWriter.visitMaxs(0, 0);\r
- methodWriter.visitEnd();\r
- \r
- byte[] bytes = classWriter.toByteArray();\r
- ClassLoader classLoader = new ClassLoader() {\r
- @Override\r
- protected Class<?> findClass(String name) throws ClassNotFoundException {\r
- if(!name.equals("test.Test"))\r
- throw new ClassNotFoundException();\r
- return defineClass("test.Test", bytes, 0, bytes.length);\r
- }\r
- };\r
- Class<?> clazz = classLoader.loadClass("test.Test");\r
- Method method = clazz.getMethod("main");\r
- AtomicReference<Object> result = (AtomicReference<Object>)method.invoke(null);\r
- System.out.println(result.hashCode());\r
- //System.out.println(result.get().hashCode());\r
- }\r
- \r
-}\r
+package org.simantics.scl.compiler.tests.experimentation;
+
+import java.io.PrintWriter;
+import java.lang.reflect.Method;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.util.TraceClassVisitor;
+
+public class RecursiveInitialization {
+
+ public static void main(String[] args) throws Exception {
+ ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
+ ClassVisitor classVisitor = new TraceClassVisitor(classWriter, new PrintWriter(System.out));
+ classVisitor.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, "test/Test", null, "java/lang/Object", new String[0]);
+ MethodVisitor methodWriter = classVisitor.visitMethod(
+ Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC,
+ "main", "()Ljava/lang/Object;", null, null);
+
+ methodWriter.visitCode();
+ methodWriter.visitTypeInsn(Opcodes.NEW, "java/util/concurrent/atomic/AtomicReference");
+ methodWriter.visitVarInsn(Opcodes.ASTORE, 2);
+
+ methodWriter.visitTypeInsn(Opcodes.NEW, "java/util/concurrent/atomic/AtomicReference");
+ methodWriter.visitVarInsn(Opcodes.ASTORE, 1);
+
+ methodWriter.visitVarInsn(Opcodes.ALOAD, 2);
+ methodWriter.visitVarInsn(Opcodes.ALOAD, 1);
+ //methodWriter.visitInsn(Opcodes.ACONST_NULL);
+ methodWriter.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/concurrent/atomic/AtomicReference", "<init>", "(Ljava/lang/Object;)V", false);
+
+ methodWriter.visitVarInsn(Opcodes.ALOAD, 1);
+ methodWriter.visitVarInsn(Opcodes.ALOAD, 2);
+ methodWriter.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/concurrent/atomic/AtomicReference", "<init>", "(Ljava/lang/Object;)V", false);
+
+ methodWriter.visitVarInsn(Opcodes.ALOAD, 2);
+ methodWriter.visitInsn(Opcodes.ARETURN);
+ methodWriter.visitMaxs(0, 0);
+ methodWriter.visitEnd();
+
+ byte[] bytes = classWriter.toByteArray();
+ ClassLoader classLoader = new ClassLoader() {
+ @Override
+ protected Class<?> findClass(String name) throws ClassNotFoundException {
+ if(!name.equals("test.Test"))
+ throw new ClassNotFoundException();
+ return defineClass("test.Test", bytes, 0, bytes.length);
+ }
+ };
+ Class<?> clazz = classLoader.loadClass("test.Test");
+ Method method = clazz.getMethod("main");
+ AtomicReference<Object> result = (AtomicReference<Object>)method.invoke(null);
+ System.out.println(result.hashCode());
+ //System.out.println(result.get().hashCode());
+ }
+
+}