< prev index next >
samples/Main.asm
Print this page
*** 36,52 ****
//
// java -cp <asmtools.jar> org.openjdk.asmtools.Main jasm Main.asm
//
// See also: https://wiki.openjdk.java.net/display/CodeTools/asmtools
//
! // NOTE: Uses nashorn internals and so *may* break with later nashorn!
super public class Main
version 52:0
{
public Method "<init>":"()V"
stack 1 locals 1
{
aload_0;
invokespecial Method java/lang/Object."<init>":"()V";
--- 36,113 ----
//
// java -cp <asmtools.jar> org.openjdk.asmtools.Main jasm Main.asm
//
// See also: https://wiki.openjdk.java.net/display/CodeTools/asmtools
//
! // NOTE: Uses dynalink API defined by JEP-276 (http://openjdk.java.net/jeps/276)
super public class Main
version 52:0
{
+ private static final Field linker:"Ljdk/dynalink/DynamicLinker;";
+ /*
+ static {
+ // create dynalink linker factory
+ final DynamicLinkerFactory factory = new DynamicLinkerFactory();
+
+ // create standard linker that can handle Java POJOs
+ linker = factory.createLinker();
+ }
+ */
+ static Method "<clinit>":"()V"
+ stack 2 locals 1
+ {
+ new class jdk/dynalink/DynamicLinkerFactory;
+ dup;
+ invokespecial Method jdk/dynalink/DynamicLinkerFactory."<init>":"()V";
+ astore_0;
+ aload_0;
+ invokevirtual Method jdk/dynalink/DynamicLinkerFactory.createLinker:"()Ljdk/dynalink/DynamicLinker;";
+ putstatic Field linker:"Ljdk/dynalink/DynamicLinker;";
+ return;
+ }
+
+ /*
+ // Bootstrap method used with invokedynamic methods
+
+ public static CallSite bootstrap(MethodHandles.Lookup caller, String name, MethodType type) {
+ // use dynalink linker to perform the actual linking
+ return linker.link(
+ new SimpleRelinkableCallSite(
+ new CallSiteDescriptor(
+ MethodHandles.publicLookup(),
+ new NamedOperation(StandardOperation.GET_PROPERTY, name), type)
+ )
+ );
+ }
+
+ */
+ public static Method bootstrap:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;"
+ stack 10 locals 3
+ {
+ getstatic Field linker:"Ljdk/dynalink/DynamicLinker;";
+ new class jdk/dynalink/support/SimpleRelinkableCallSite;
+ dup;
+ new class jdk/dynalink/CallSiteDescriptor;
+ dup;
+ invokestatic Method java/lang/invoke/MethodHandles.publicLookup:"()Ljava/lang/invoke/MethodHandles$Lookup;";
+ new class jdk/dynalink/NamedOperation;
+ dup;
+ getstatic Field jdk/dynalink/StandardOperation.GET_PROPERTY:"Ljdk/dynalink/StandardOperation;";
+ aload_1;
+ invokespecial Method jdk/dynalink/NamedOperation."<init>":"(Ljdk/dynalink/Operation;Ljava/lang/Object;)V";
+ aload_2;
+ invokespecial Method jdk/dynalink/CallSiteDescriptor."<init>":"(Ljava/lang/invoke/MethodHandles$Lookup;Ljdk/dynalink/Operation;Ljava/lang/invoke/MethodType;)V";
+ invokespecial Method jdk/dynalink/support/SimpleRelinkableCallSite."<init>":"(Ljdk/dynalink/CallSiteDescriptor;)V";
+ invokevirtual Method jdk/dynalink/DynamicLinker.link:"(Ljdk/dynalink/RelinkableCallSite;)Ljdk/dynalink/RelinkableCallSite;";
+ checkcast class java/lang/invoke/CallSite;
+ areturn;
+ }
+
+ // default constructor that does nothing!
public Method "<init>":"()V"
stack 1 locals 1
{
aload_0;
invokespecial Method java/lang/Object."<init>":"()V";
*** 88,101 ****
stack 2 locals 1
{
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
aload_0;
! // Using nashorn embedded dynalink linker with the following invokedynamic
// 'length' property on a bean - arrays, lists supported
! invokedynamic InvokeDynamic REF_invokeStatic:jdk/nashorn/internal/runtime/linker/Bootstrap.bootstrap:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/CallSite;":"dyn:getProp|getElem|getMethod:length":"(Ljava/lang/Object;)Ljava/lang/Object;" int 0;
// print 'length' value
invokevirtual Method java/io/PrintStream.println:"(Ljava/lang/Object;)V";
return;
}
--- 149,163 ----
stack 2 locals 1
{
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
aload_0;
! // Using bootstrap method in this class with the following invokedynamic
! // which uses dynalink linker. Dynalink's bean linker handles Java beans.
// 'length' property on a bean - arrays, lists supported
! invokedynamic InvokeDynamic REF_invokeStatic:Main.bootstrap:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;":"length":"(Ljava/lang/Object;)Ljava/lang/Object;";
// print 'length' value
invokevirtual Method java/io/PrintStream.println:"(Ljava/lang/Object;)V";
return;
}
< prev index next >