From: <fwi...@us...> - 2009-09-23 17:34:15
|
Revision: 6805 http://jython.svn.sourceforge.net/jython/?rev=6805&view=rev Author: fwierzbicki Date: 2009-09-23 17:34:06 +0000 (Wed, 23 Sep 2009) Log Message: ----------- Okay, simple call to a MethodHandle works from some bytecode works. Modified Paths: -------------- trunk/sandbox/wierzbicki/indy_jython/IndyDump.java Modified: trunk/sandbox/wierzbicki/indy_jython/IndyDump.java =================================================================== --- trunk/sandbox/wierzbicki/indy_jython/IndyDump.java 2009-09-22 22:45:39 UTC (rev 6804) +++ trunk/sandbox/wierzbicki/indy_jython/IndyDump.java 2009-09-23 17:34:06 UTC (rev 6805) @@ -137,7 +137,20 @@ mv.visitFieldInsn(GETSTATIC, "Hello", "self", "LHello;"); ////MethodHandle goes here -mv.visitInsn(ACONST_NULL); +////mv.visitInsn(ACONST_NULL); +mv.visitMethodInsn(INVOKESTATIC, "java/dyn/MethodHandles", "lookup", "()Ljava/dyn/MethodHandles$Lookup;"); +mv.visitLdcInsn(Type.getType("LHello;")); +mv.visitLdcInsn("f$0"); +mv.visitLdcInsn(Type.getType("Lorg/python/core/PyObject;")); +mv.visitLdcInsn(Type.getType("Lorg/python/core/PyFrame;")); +mv.visitInsn(ICONST_1); +mv.visitTypeInsn(ANEWARRAY, "java/lang/Class"); +mv.visitInsn(DUP); +mv.visitInsn(ICONST_0); +mv.visitLdcInsn(Type.getType("Lorg/python/core/ThreadState;")); +mv.visitInsn(AASTORE); +mv.visitMethodInsn(INVOKESTATIC, "java/dyn/MethodType", "make", "(Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/dyn/MethodType;"); +mv.visitMethodInsn(INVOKEVIRTUAL, "java/dyn/MethodHandles$Lookup", "findStatic", "(Ljava/lang/Class;Ljava/lang/String;Ljava/dyn/MethodType;)Ljava/dyn/MethodHandle;"); mv.visitInsn(ACONST_NULL); mv.visitInsn(ACONST_NULL); @@ -162,7 +175,20 @@ mv.visitFieldInsn(GETSTATIC, "Hello", "self", "LHello;"); ////MethodHandle goes here -mv.visitInsn(ACONST_NULL); +////mv.visitInsn(ACONST_NULL); +mv.visitMethodInsn(INVOKESTATIC, "java/dyn/MethodHandles", "lookup", "()Ljava/dyn/MethodHandles$Lookup;"); +mv.visitLdcInsn(Type.getType("LHello;")); +mv.visitLdcInsn("greet$1"); +mv.visitLdcInsn(Type.getType("Lorg/python/core/PyObject;")); +mv.visitLdcInsn(Type.getType("Lorg/python/core/PyFrame;")); +mv.visitInsn(ICONST_1); +mv.visitTypeInsn(ANEWARRAY, "java/lang/Class"); +mv.visitInsn(DUP); +mv.visitInsn(ICONST_0); +mv.visitLdcInsn(Type.getType("Lorg/python/core/ThreadState;")); +mv.visitInsn(AASTORE); +mv.visitMethodInsn(INVOKESTATIC, "java/dyn/MethodType", "make", "(Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/dyn/MethodType;"); +mv.visitMethodInsn(INVOKEVIRTUAL, "java/dyn/MethodHandles$Lookup", "findStatic", "(Ljava/lang/Class;Ljava/lang/String;Ljava/dyn/MethodType;)Ljava/dyn/MethodHandle;"); mv.visitInsn(ACONST_NULL); mv.visitInsn(ACONST_NULL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |