1// ASM: a very small and fast Java bytecode manipulation framework 2// Copyright (c) 2000-2011 INRIA, France Telecom 3// All rights reserved. 4// 5// Redistribution and use in source and binary forms, with or without 6// modification, are permitted provided that the following conditions 7// are met: 8// 1. Redistributions of source code must retain the above copyright 9// notice, this list of conditions and the following disclaimer. 10// 2. Redistributions in binary form must reproduce the above copyright 11// notice, this list of conditions and the following disclaimer in the 12// documentation and/or other materials provided with the distribution. 13// 3. Neither the name of the copyright holders nor the names of its 14// contributors may be used to endorse or promote products derived from 15// this software without specific prior written permission. 16// 17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 21// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 27// THE POSSIBILITY OF SUCH DAMAGE. 28package jdk11; 29 30/** 31 * A class with all the JDK11 specific instructions. A corresponding class file can be generated 32 * with the OpenJDK asmtools (https://wiki.openjdk.java.net/display/CodeTools/asmtools), 33 * version 7 or more. Usage: 34 * 35 * java -jar asmtools.jar jasm AllInstructions.jasm 36 * 37 * @author Eric Bruneton 38 */ 39super public class AllInstructions 40 version 55:0 41{ 42 43 44public Method "<init>":"()V" 45 stack 1 locals 1 46{ 47 aload_0; 48 invokespecial Method java/lang/Object."<init>":"()V"; 49 return; 50} 51 52public Method m:"()Ljava/lang/Object;" 53 stack 1 locals 1 54{ 55 ldc Dynamic REF_invokeStatic 56 :HandleOwner.handleField 57 :"(Ljava/lang/Object;)Ljava/lang/Object;" 58 :name 59 :"Ljava/lang/Object;" { 60 Dynamic REF_getStatic 61 :ArgumentHandleOwner.argumentHandleName 62 :"Ljava/lang/Object;" 63 :argumentName 64 :"Ljava/lang/Object;" 65 }; 66 areturn; 67} 68 69public static Method primitiveExample:"()J" 70 stack 2 locals 0 71{ 72 ldc2_w Dynamic REF_invokeStatic 73 :jdk11/AllInstructions.bsm 74 :"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;)J" 75 :test 76 :"J"; 77 lreturn; 78} 79 80private static Method bsm:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;)J" 81 stack 2 locals 3 82{ 83 bipush 42; 84 i2l; 85 lreturn; 86} 87 88public static Method main:"([Ljava/lang/String;)V" 89 stack 1 locals 2 90{ 91 ldc Dynamic REF_invokeStatic 92 :java/lang/invoke/LambdaMetafactory.metafactory 93 :"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/Object;" 94 :run 95 :"Ljava/lang/Runnable;" { 96 MethodType "()V", 97 MethodHandle REF_invokeStatic:AllInstructions.lambda$main$0:"()V", 98 MethodType "()V" 99 }; 100 astore_1; 101 aload_1; 102 invokeinterface InterfaceMethod java/lang/Runnable.run:"()V", 1; 103 return; 104} 105 106private static synthetic Method lambda$main$0:"()V" 107 stack 2 locals 0 108{ 109 getstatic Field java/lang/System.out:"Ljava/io/PrintStream;"; 110 ldc String "hello condy"; 111 invokevirtual Method java/io/PrintStream.println:"(Ljava/lang/String;)V"; 112 return; 113} 114 115public static final InnerClass Lookup= 116 class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles; 117 118} // end Class AllInstructions 119 120