Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com Patches, unit tests, benchmarks, whitepaper, and outreach briefs. Public domain — no copyright claimed. Use freely.
78 lines
2.7 KiB
Text
78 lines
2.7 KiB
Text
/*
|
||
* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
|
||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||
*
|
||
* This code is free software; you can redistribute it and/or modify it
|
||
* under the terms of the GNU General Public License version 2 only, as
|
||
* published by the Free Software Foundation.
|
||
*
|
||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||
* version 2 for more details (a copy is included in the LICENSE file that
|
||
* accompanied this code).
|
||
*
|
||
* You should have received a copy of the GNU General Public License version
|
||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||
*
|
||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||
* or visit www.oracle.com if you need additional information or have any
|
||
* questions.
|
||
*
|
||
*/
|
||
|
||
/*
|
||
|
||
decompiled from
|
||
|
||
class OldConsumer {}
|
||
|
||
class StringConcatTestOld {
|
||
public static void main(String args[]) {
|
||
System.out.println("StringConcatTestOld <concat> " + new OldConsumer());
|
||
}
|
||
}
|
||
|
||
|
||
(1) Comment out this line
|
||
|
||
invokestatic Method java/lang/String.valueOf:"(Ljava/lang/Object;)Ljava/lang/String;";
|
||
|
||
(2) Change the MethodType parameter of makeConcatWithConstants from
|
||
|
||
"(Ljava/lang/String;)Ljava/lang/String;"
|
||
->
|
||
|
||
"(LOldConsumer;)Ljava/lang/String;"
|
||
|
||
*/
|
||
|
||
super class StringConcatTestOld
|
||
version 67:0
|
||
{
|
||
Method "<init>":"()V"
|
||
stack 1 locals 1
|
||
{
|
||
aload_0;
|
||
invokespecial Method java/lang/Object."<init>":"()V";
|
||
return;
|
||
}
|
||
public static Method main:"([Ljava/lang/String;)V"
|
||
stack 3 locals 1
|
||
{
|
||
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
|
||
new class OldConsumer;
|
||
dup;
|
||
invokespecial Method OldConsumer."<init>":"()V";
|
||
//invokestatic Method java/lang/String.valueOf:"(Ljava/lang/Object;)Ljava/lang/String;";
|
||
invokedynamic InvokeDynamic REF_invokeStatic:Method java/lang/invoke/StringConcatFactory.makeConcatWithConstants:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;":makeConcatWithConstants:"(LOldConsumer;)Ljava/lang/String;" {
|
||
String "StringConcatTestOld <concat> "
|
||
};
|
||
invokevirtual Method java/io/PrintStream.println:"(Ljava/lang/String;)V";
|
||
return;
|
||
}
|
||
|
||
public static final InnerClass Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles;
|
||
|
||
} // end Class StringConcatTestOld
|