# HG changeset patch
# User lana
# Date 1462475469 0
# Node ID 41844efbbcce4cc3ff63ae882c6a40104c1f9041
# Parent 5c95f33249167bf4bc63f8e50c8affbb6df4ce42# Parent dd626e6f59677eb64f959c32195436ec3c81c038
Merge
diff -r 5c95f3324916 -r 41844efbbcce jdk/make/Tools.gmk
--- a/jdk/make/Tools.gmk Thu May 05 17:35:48 2016 +0000
+++ b/jdk/make/Tools.gmk Thu May 05 19:11:09 2016 +0000
@@ -96,7 +96,13 @@
TOOL_SPP = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes build.tools.spp.Spp
# Nimbus is used somewhere in the swing build.
+
+ifeq ($(BOOT_JDK_MODULAR), true)
+ COMPILENIMBUS_ADD_MODS := -addmods java.xml.bind
+endif
+
TOOL_GENERATENIMBUS = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
+ $(COMPILENIMBUS_ADD_MODS) \
build.tools.generatenimbus.Generator
TOOL_WRAPPERGENERATOR = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
diff -r 5c95f3324916 -r 41844efbbcce jdk/make/gendata/GendataBreakIterator.gmk
--- a/jdk/make/gendata/GendataBreakIterator.gmk Thu May 05 17:35:48 2016 +0000
+++ b/jdk/make/gendata/GendataBreakIterator.gmk Thu May 05 19:11:09 2016 +0000
@@ -62,10 +62,13 @@
BIN := $(BREAK_ITERATOR_CLASSES)/jdk.localedata))
ifeq ($(BOOT_JDK_MODULAR), true)
- BREAK_ITERATOR_BOOTCLASSPATH := -Xpatch:$(BREAK_ITERATOR_CLASSES) \
- -XaddExports:java.base/sun.text=ALL-UNNAMED \
- -XaddExports:java.base/sun.text.resources=ALL-UNNAMED \
- -XaddExports:jdk.localedata/sun.text.resources.ext=ALL-UNNAMED
+ BREAK_ITERATOR_BOOTCLASSPATH := \
+ -Xpatch:java.base=$(BREAK_ITERATOR_CLASSES)/java.base \
+ -Xpatch:jdk.localedata=$(BREAK_ITERATOR_CLASSES)/jdk.localedata \
+ -XaddExports:java.base/sun.text=ALL-UNNAMED \
+ -XaddExports:java.base/sun.text.resources=ALL-UNNAMED \
+ -XaddExports:jdk.localedata/sun.text.resources.ext=ALL-UNNAMED \
+ #
else
BREAK_ITERATOR_BOOTCLASSPATH := -Xbootclasspath/p:$(call PathList, \
$(BREAK_ITERATOR_CLASSES)/java.base \
diff -r 5c95f3324916 -r 41844efbbcce jdk/make/launcher/Launcher-java.desktop.gmk
--- a/jdk/make/launcher/Launcher-java.desktop.gmk Thu May 05 17:35:48 2016 +0000
+++ b/jdk/make/launcher/Launcher-java.desktop.gmk Thu May 05 19:11:09 2016 +0000
@@ -31,7 +31,7 @@
ifndef BUILD_HEADLESS_ONLY
$(eval $(call SetupBuildLauncher, appletviewer, \
MAIN_CLASS := sun.applet.Main, \
- JAVA_ARGS := -addmods ALL-SYSTEM, \
+ JAVA_ARGS := -addmods ALL-DEFAULT, \
LIBS_unix := $(X_LIBS), \
))
endif
diff -r 5c95f3324916 -r 41844efbbcce jdk/make/launcher/Launcher-java.scripting.gmk
--- a/jdk/make/launcher/Launcher-java.scripting.gmk Thu May 05 17:35:48 2016 +0000
+++ b/jdk/make/launcher/Launcher-java.scripting.gmk Thu May 05 19:11:09 2016 +0000
@@ -27,4 +27,5 @@
$(eval $(call SetupBuildLauncher, jrunscript, \
MAIN_CLASS := com.sun.tools.script.shell.Main, \
+ JAVA_ARGS := -addmods ALL-DEFAULT, \
))
diff -r 5c95f3324916 -r 41844efbbcce jdk/make/launcher/Launcher-jdk.compiler.gmk
--- a/jdk/make/launcher/Launcher-jdk.compiler.gmk Thu May 05 17:35:48 2016 +0000
+++ b/jdk/make/launcher/Launcher-jdk.compiler.gmk Thu May 05 19:11:09 2016 +0000
@@ -27,7 +27,8 @@
$(eval $(call SetupBuildLauncher, javac, \
MAIN_CLASS := com.sun.tools.javac.Main, \
- CFLAGS := -DEXPAND_CLASSPATH_WILDCARDS \
+ JAVA_ARGS := -addmods ALL-DEFAULT, \
+ CFLAGS := -DEXPAND_CLASSPATH_WILDCARDS \
-DNEVER_ACT_AS_SERVER_CLASS_MACHINE, \
))
diff -r 5c95f3324916 -r 41844efbbcce jdk/make/launcher/Launcher-jdk.javadoc.gmk
--- a/jdk/make/launcher/Launcher-jdk.javadoc.gmk Thu May 05 17:35:48 2016 +0000
+++ b/jdk/make/launcher/Launcher-jdk.javadoc.gmk Thu May 05 19:11:09 2016 +0000
@@ -27,6 +27,7 @@
$(eval $(call SetupBuildLauncher, javadoc, \
MAIN_CLASS := jdk.javadoc.internal.tool.Main, \
+ JAVA_ARGS := -addmods ALL-DEFAULT, \
CFLAGS := -DEXPAND_CLASSPATH_WILDCARDS \
-DNEVER_ACT_AS_SERVER_CLASS_MACHINE, \
))
diff -r 5c95f3324916 -r 41844efbbcce jdk/make/launcher/Launcher-jdk.jlink.gmk
--- a/jdk/make/launcher/Launcher-jdk.jlink.gmk Thu May 05 17:35:48 2016 +0000
+++ b/jdk/make/launcher/Launcher-jdk.jlink.gmk Thu May 05 19:11:09 2016 +0000
@@ -32,6 +32,7 @@
$(eval $(call SetupBuildLauncher, jlink,\
MAIN_CLASS := jdk.tools.jlink.internal.Main, \
+ JAVA_ARGS := -addmods ALL-DEFAULT, \
CFLAGS := -DENABLE_ARG_FILES \
-DEXPAND_CLASSPATH_WILDCARDS \
-DNEVER_ACT_AS_SERVER_CLASS_MACHINE, \
diff -r 5c95f3324916 -r 41844efbbcce jdk/make/launcher/Launcher-jdk.scripting.nashorn.shell.gmk
--- a/jdk/make/launcher/Launcher-jdk.scripting.nashorn.shell.gmk Thu May 05 17:35:48 2016 +0000
+++ b/jdk/make/launcher/Launcher-jdk.scripting.nashorn.shell.gmk Thu May 05 19:11:09 2016 +0000
@@ -27,6 +27,6 @@
$(eval $(call SetupBuildLauncher, jjs, \
MAIN_CLASS := jdk.nashorn.tools.jjs.Main, \
- JAVA_ARGS := -addmods ALL-SYSTEM, \
+ JAVA_ARGS := -addmods ALL-DEFAULT, \
CFLAGS := -DENABLE_ARG_FILES, \
))
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystemProvider.java
--- a/jdk/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystemProvider.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/linux/classes/sun/nio/fs/LinuxFileSystemProvider.java Thu May 05 19:11:09 2016 +0000
@@ -102,7 +102,7 @@
@Override
FileTypeDetector getFileTypeDetector() {
- String userHome = GetPropertyAction.getProperty("user.home");
+ String userHome = GetPropertyAction.privilegedGetProperty("user.home");
Path userMimeTypes = Paths.get(userHome, ".mime.types");
Path etcMimeTypes = Paths.get("/etc/mime.types");
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/linux/native/libnio/ch/EPollArrayWrapper.c
--- a/jdk/src/java.base/linux/native/libnio/ch/EPollArrayWrapper.c Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/linux/native/libnio/ch/EPollArrayWrapper.c Thu May 05 19:11:09 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, 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
@@ -53,7 +53,7 @@
start = t.tv_sec * 1000 + t.tv_usec / 1000;
for (;;) {
- int res = epoll_wait(epfd, events, numfds, timeout);
+ int res = epoll_wait(epfd, events, numfds, remaining);
if (res < 0 && errno == EINTR) {
if (remaining >= 0) {
gettimeofday(&t, NULL);
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/macosx/classes/sun/nio/ch/KQueueArrayWrapper.java
--- a/jdk/src/java.base/macosx/classes/sun/nio/ch/KQueueArrayWrapper.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/macosx/classes/sun/nio/ch/KQueueArrayWrapper.java Thu May 05 19:11:09 2016 +0000
@@ -84,7 +84,8 @@
static {
IOUtil.load();
initStructSizes();
- String datamodel = GetPropertyAction.getProperty("sun.arch.data.model");
+ String datamodel =
+ GetPropertyAction.privilegedGetProperty("sun.arch.data.model");
is64bit = "64".equals(datamodel);
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystem.java
--- a/jdk/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystem.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystem.java Thu May 05 19:11:09 2016 +0000
@@ -29,8 +29,6 @@
import java.io.IOException;
import java.util.*;
import java.util.regex.Pattern;
-import java.security.AccessController;
-import sun.security.action.GetPropertyAction;
import static sun.nio.fs.MacOSXNativeDispatcher.*;
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystemProvider.java
--- a/jdk/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystemProvider.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/macosx/classes/sun/nio/fs/MacOSXFileSystemProvider.java Thu May 05 19:11:09 2016 +0000
@@ -46,8 +46,8 @@
@Override
FileTypeDetector getFileTypeDetector() {
- Path userMimeTypes = Paths.get(
- GetPropertyAction.getProperty("user.home"), ".mime.types");
+ Path userMimeTypes = Paths.get(GetPropertyAction
+ .privilegedGetProperty("user.home"), ".mime.types");
return chain(new MimeTypesFileTypeDetector(userMimeTypes),
new UTIFileTypeDetector());
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/io/File.java
--- a/jdk/src/java.base/share/classes/java/io/File.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/io/File.java Thu May 05 19:11:09 2016 +0000
@@ -1896,7 +1896,7 @@
// temporary directory location
private static final File tmpdir = new File(
- GetPropertyAction.getProperty("java.io.tmpdir"));
+ GetPropertyAction.privilegedGetProperty("java.io.tmpdir"));
static File location() {
return tmpdir;
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/Class.java
--- a/jdk/src/java.base/share/classes/java/lang/Class.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/Class.java Thu May 05 19:11:09 2016 +0000
@@ -470,7 +470,7 @@
* expression with an empty argument list. The class is initialized if it
* has not already been initialized.
*
- *
Note that this method propagates any exception thrown by the
+ * @deprecated This method propagates any exception thrown by the
* nullary constructor, including a checked exception. Use of
* this method effectively bypasses the compile-time exception
* checking that would otherwise be performed by the compiler.
@@ -500,6 +500,7 @@
* of this class.
*/
@CallerSensitive
+ @Deprecated(since="9")
public T newInstance()
throws InstantiationException, IllegalAccessException
{
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/ClassLoader.java
--- a/jdk/src/java.base/share/classes/java/lang/ClassLoader.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/ClassLoader.java Thu May 05 19:11:09 2016 +0000
@@ -2615,7 +2615,7 @@
ServicesCatalog createOrGetServicesCatalog() {
ServicesCatalog catalog = servicesCatalog;
if (catalog == null) {
- catalog = new ServicesCatalog();
+ catalog = ServicesCatalog.create();
boolean set = trySetObjectField("servicesCatalog", catalog);
if (!set) {
// beaten by someone else
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/ProcessBuilder.java
--- a/jdk/src/java.base/share/classes/java/lang/ProcessBuilder.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/ProcessBuilder.java Thu May 05 19:11:09 2016 +0000
@@ -468,7 +468,7 @@
*/
public abstract static class Redirect {
private static final File NULL_FILE = new File(
- (GetPropertyAction.getProperty("os.name")
+ (GetPropertyAction.privilegedGetProperty("os.name")
.startsWith("Windows") ? "NUL" : "/dev/null")
);
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/StackStreamFactory.java
--- a/jdk/src/java.base/share/classes/java/lang/StackStreamFactory.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/StackStreamFactory.java Thu May 05 19:11:09 2016 +0000
@@ -78,7 +78,8 @@
* Performance work and extensive testing is needed to replace the
* VM built-in backtrace filled in Throwable with the StackWalker.
*/
- final static boolean isDebug = getProperty("stackwalk.debug", false);
+ final static boolean isDebug =
+ "true".equals(GetPropertyAction.privilegedGetProperty("stackwalk.debug"));
static StackFrameTraverser
makeStackTraverser(StackWalker walker, Function super Stream, ? extends T> function)
@@ -988,11 +989,4 @@
c.getName().startsWith("java.lang.invoke.LambdaForm");
}
- private static boolean getProperty(String key, boolean value) {
- String s = GetPropertyAction.getProperty(key);
- if (s != null) {
- return Boolean.parseBoolean(s);
- }
- return value;
- }
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/System.java
--- a/jdk/src/java.base/share/classes/java/lang/System.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/System.java Thu May 05 19:11:09 2016 +0000
@@ -69,7 +69,6 @@
import jdk.internal.logger.LocalizedLoggerWrapper;
import jdk.internal.module.ModuleBootstrap;
-import jdk.internal.module.Modules;
import jdk.internal.module.ServicesCatalog;
/**
@@ -1924,10 +1923,6 @@
// initialize the module system
System.bootLayer = ModuleBootstrap.boot();
- // base module needs to be loose (CODETOOLS-7901619)
- Module base = Object.class.getModule();
- Modules.addReads(base, null);
-
// module system initialized
VM.initLevel(2);
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java
--- a/jdk/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java Thu May 05 19:11:09 2016 +0000
@@ -33,8 +33,6 @@
import sun.invoke.util.Wrapper;
import java.lang.ref.WeakReference;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Objects;
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java
--- a/jdk/src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java Thu May 05 19:11:09 2016 +0000
@@ -88,7 +88,7 @@
static {
final String key = "jdk.internal.lambda.dumpProxyClasses";
- String path = GetPropertyAction.getProperty(key);
+ String path = GetPropertyAction.privilegedGetProperty(key);
dumper = (null == path) ? null : ProxyClassesDumper.getInstance(path);
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/invoke/Invokers.java
--- a/jdk/src/java.base/share/classes/java/lang/invoke/Invokers.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/Invokers.java Thu May 05 19:11:09 2016 +0000
@@ -396,7 +396,7 @@
LambdaForm lform = new LambdaForm(name + ":VarHandle_invoke_MT_" + shortenSignature(basicTypeSignature(mtype)),
ARG_LIMIT + 1, names);
- lform.prepare();
+ lform.compileToBytecode();
return lform;
}
@@ -448,7 +448,7 @@
LambdaForm lform = new LambdaForm(name + ":VarHandle_exactInvoker" + shortenSignature(basicTypeSignature(mtype)),
ARG_LIMIT, names);
- lform.prepare();
+ lform.compileToBytecode();
return lform;
}
@@ -497,44 +497,33 @@
/*non-public*/ static
@ForceInline
- MethodHandle checkVarHandleGenericType(VarHandle vh, VarHandle.AccessDescriptor vad) {
- MethodType expected = vad.symbolicMethodType;
- MethodType actual = VarHandle.AccessType.getMethodType(vad.type, vh);
-
- MemberName mn = VarHandle.AccessMode.getMemberName(vad.mode, vh.vform);
- if (mn == null)
- throw vh.unsupported();
- // TODO the following MH is not constant, cache in stable field array
- // on VarForm?
- MethodHandle mh = DirectMethodHandle.make(mn);
- if (actual == expected) {
+ MethodHandle checkVarHandleGenericType(VarHandle handle, VarHandle.AccessDescriptor ad) {
+ // Test for exact match on invoker types
+ // TODO match with erased types and add cast of return value to lambda form
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ if (mh.type() == ad.symbolicMethodTypeInvoker) {
return mh;
}
else {
- // Adapt to the actual (which should never fail since mh's method
- // type is in the basic form), then to the expected (which my fail
- // if the symbolic type descriptor does not match)
- // TODO optimize for the case of actual.erased() == expected.erased()
- return mh.asType(actual.insertParameterTypes(0, VarHandle.class)).
- asType(expected.insertParameterTypes(0, VarHandle.class));
+ return mh.asType(ad.symbolicMethodTypeInvoker);
}
}
/*non-public*/ static
@ForceInline
- void checkVarHandleExactType(VarHandle vh, VarHandle.AccessDescriptor vad) {
- MethodType expected = vad.symbolicMethodType;
- MethodType actual = VarHandle.AccessType.getMethodType(vad.type, vh);
- if (actual != expected)
- throw newWrongMethodTypeException(expected, actual);
+ void checkVarHandleExactType(VarHandle handle, VarHandle.AccessDescriptor ad) {
+ MethodType erasedTarget = handle.vform.methodType_table[ad.type];
+ MethodType erasedSymbolic = ad.symbolicMethodTypeErased;
+ if (erasedTarget != erasedSymbolic)
+ throw newWrongMethodTypeException(erasedTarget, erasedSymbolic);
}
/*non-public*/ static
@ForceInline
- MemberName getVarHandleMemberName(VarHandle vh, VarHandle.AccessDescriptor vad) {
- MemberName mn = VarHandle.AccessMode.getMemberName(vad.mode, vh.vform);
+ MemberName getVarHandleMemberName(VarHandle handle, VarHandle.AccessDescriptor ad) {
+ MemberName mn = handle.vform.memberName_table[ad.mode];
if (mn == null) {
- throw vh.unsupported();
+ throw handle.unsupported();
}
return mn;
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java Thu May 05 19:11:09 2016 +0000
@@ -430,14 +430,14 @@
// If not polymorphic in the return type, such as the compareAndSet
// methods that return boolean
- if (ak.isPolyMorphicInReturnType) {
- if (ak.returnType != mtype.returnType()) {
+ if (ak.at.isMonomorphicInReturnType) {
+ if (ak.at.returnType != mtype.returnType()) {
// The caller contains a different return type than that
// defined by the method
throw newNoSuchMethodErrorOnVarHandle(name, mtype);
}
// Adjust the return type of the signature method type
- sigType = sigType.changeReturnType(ak.returnType);
+ sigType = sigType.changeReturnType(ak.at.returnType);
}
// Get the guard method type for linking
@@ -455,26 +455,25 @@
MemberName linker = new MemberName(
VarHandleGuards.class, "guard_" + getVarHandleMethodSignature(sigType),
guardType, REF_invokeStatic);
- try {
- return MemberName.getFactory().resolveOrFail(
- REF_invokeStatic, linker, VarHandleGuards.class, ReflectiveOperationException.class);
- } catch (ReflectiveOperationException ex) {
- // Fall back to lambda form linkage if guard method is not available
- // TODO Optionally log fallback ?
+
+ linker = MemberName.getFactory().resolveOrNull(REF_invokeStatic, linker,
+ VarHandleGuards.class);
+ if (linker != null) {
+ return linker;
}
+ // Fall back to lambda form linkage if guard method is not available
+ // TODO Optionally log fallback ?
}
return Invokers.varHandleInvokeLinkerMethod(name, mtype);
}
static String getVarHandleMethodSignature(MethodType mt) {
- StringBuilder sb = new StringBuilder(mt.parameterCount() + 1);
+ StringBuilder sb = new StringBuilder(mt.parameterCount() + 2);
for (int i = 0; i < mt.parameterCount(); i++) {
Class> pt = mt.parameterType(i);
sb.append(getCharType(pt));
}
-
sb.append('_').append(getCharType(mt.returnType()));
-
return sb.toString();
}
static char getCharType(Class> pt) {
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleStatics.java
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleStatics.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleStatics.java Thu May 05 19:11:09 2016 +0000
@@ -53,7 +53,7 @@
static final boolean VAR_HANDLE_GUARDS;
static {
- Properties props = GetPropertyAction.getProperties();
+ Properties props = GetPropertyAction.privilegedGetProperties();
DEBUG_METHOD_HANDLE_NAMES = Boolean.parseBoolean(
props.getProperty("java.lang.invoke.MethodHandle.DEBUG_NAMES"));
DUMP_CLASS_FILES = Boolean.parseBoolean(
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java
--- a/jdk/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java Thu May 05 19:11:09 2016 +0000
@@ -197,7 +197,7 @@
// DEBUG = false; // implied
// DUMPER = null; // implied
- Properties props = GetPropertyAction.getProperties();
+ Properties props = GetPropertyAction.privilegedGetProperties();
final String strategy =
props.getProperty("java.lang.invoke.stringConcat");
CACHE_ENABLE = Boolean.parseBoolean(
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/invoke/VarForm.java
--- a/jdk/src/java.base/share/classes/java/lang/invoke/VarForm.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/VarForm.java Thu May 05 19:11:09 2016 +0000
@@ -24,42 +24,102 @@
*/
package java.lang.invoke;
+import jdk.internal.vm.annotation.ForceInline;
import jdk.internal.vm.annotation.Stable;
import java.lang.invoke.VarHandle.AccessMode;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
/**
* A var handle form containing a set of member name, one for each operation.
* Each member characterizes a static method.
*/
-class VarForm {
+final class VarForm {
+
+ final @Stable MethodType[] methodType_table;
+
+ final @Stable MemberName[] memberName_table;
+
+ VarForm(Class> implClass, Class> receiver, Class> value, Class>... intermediate) {
+ this.methodType_table = new MethodType[VarHandle.AccessType.values().length];
+
+ // TODO lazily calculate
+ this.memberName_table = linkFromStatic(implClass);
+
+ // (Receiver, )
+ List> l = new ArrayList<>();
+ if (receiver != null)
+ l.add(receiver);
+ l.addAll(Arrays.asList(intermediate));
- // Holds VarForm for VarHandle implementation classes
- private static final ClassValue VFORMS
- = new ClassValue<>() {
- @Override
- protected VarForm computeValue(Class> impl) {
- return new VarForm(linkFromStatic(impl));
- }
- };
+ // (Receiver, )Value
+ methodType_table[VarHandle.AccessType.GET.ordinal()] =
+ MethodType.methodType(value, l).erase();
+
+ // (Receiver, , Value)void
+ l.add(value);
+ methodType_table[VarHandle.AccessType.SET.ordinal()] =
+ MethodType.methodType(void.class, l).erase();
- final @Stable MemberName[] table;
+ // (Receiver, , Value)Value
+ methodType_table[VarHandle.AccessType.GET_AND_UPDATE.ordinal()] =
+ MethodType.methodType(value, l).erase();
- VarForm(MemberName[] table) {
- this.table = table;
+ // (Receiver, , Value, Value)boolean
+ l.add(value);
+ methodType_table[VarHandle.AccessType.COMPARE_AND_SWAP.ordinal()] =
+ MethodType.methodType(boolean.class, l).erase();
+
+ // (Receiver, , Value, Value)Value
+ methodType_table[VarHandle.AccessType.COMPARE_AND_EXCHANGE.ordinal()] =
+ MethodType.methodType(value, l).erase();
}
- /**
- * Creates a var form given an VarHandle implementation class.
- * Each signature polymorphic method is linked to a static method of the
- * same name on the implementation class or a super class.
- */
- static VarForm createFromStatic(Class extends VarHandle> impl) {
- return VFORMS.get(impl);
+ @ForceInline
+ final MethodType getMethodType(int type) {
+ return methodType_table[type];
+ }
+
+ @ForceInline
+ final MemberName getMemberName(int mode) {
+ // TODO calculate lazily
+ MemberName mn = memberName_table[mode];
+ if (mn == null) {
+ throw new UnsupportedOperationException();
+ }
+ return mn;
}
+
+ @Stable
+ MethodType[] methodType_V_table;
+
+ @ForceInline
+ final MethodType[] getMethodType_V_init() {
+ MethodType[] table = new MethodType[VarHandle.AccessType.values().length];
+ for (int i = 0; i < methodType_table.length; i++) {
+ MethodType mt = methodType_table[i];
+ // TODO only adjust for sig-poly methods returning Object
+ table[i] = mt.changeReturnType(void.class);
+ }
+ methodType_V_table = table;
+ return table;
+ }
+
+ @ForceInline
+ final MethodType getMethodType_V(int type) {
+ MethodType[] table = methodType_V_table;
+ if (table == null) {
+ table = getMethodType_V_init();
+ }
+ return table[type];
+ }
+
+
/**
* Link all signature polymorphic methods.
*/
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/invoke/VarHandle.java
--- a/jdk/src/java.base/share/classes/java/lang/invoke/VarHandle.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/VarHandle.java Thu May 05 19:11:09 2016 +0000
@@ -27,10 +27,9 @@
import jdk.internal.HotSpotIntrinsicCandidate;
import jdk.internal.vm.annotation.ForceInline;
+import jdk.internal.vm.annotation.Stable;
import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -406,42 +405,10 @@
* @since 9
*/
public abstract class VarHandle {
- // Use explicit final fields rather than an @Stable array as
- // this can reduce the memory per handle
- // e.g. by 24 bytes on 64 bit architectures
- final MethodType typeGet;
- final MethodType typeSet;
- final MethodType typeCompareSwap;
- final MethodType typeCompareExchange;
- final MethodType typeGetAndUpdate;
-
final VarForm vform;
- VarHandle(VarForm vform, Class> receiver, Class> value, Class>... intermediate) {
+ VarHandle(VarForm vform) {
this.vform = vform;
-
- // (Receiver, )
- List> l = new ArrayList<>();
- if (receiver != null)
- l.add(receiver);
- l.addAll(Arrays.asList(intermediate));
-
- // (Receiver, )Value
- this.typeGet = MethodType.methodType(value, l);
-
- // (Receiver, , Value)void
- l.add(value);
- this.typeSet = MethodType.methodType(void.class, l);
-
- // (Receiver, , Value)Value
- this.typeGetAndUpdate = MethodType.methodType(value, l);
-
- // (Receiver, , Value, Value)boolean
- l.add(value);
- this.typeCompareSwap = MethodType.methodType(boolean.class, l);
-
- // (Receiver, , Value, Value)Value
- this.typeCompareExchange = MethodType.methodType(value, l);
}
RuntimeException unsupported() {
@@ -1090,36 +1057,83 @@
Object addAndGet(Object... args);
enum AccessType {
- GET, // 0
- SET, // 1
- COMPARE_AND_SWAP, // 2
- COMPARE_AND_EXCHANGE, // 3
- GET_AND_UPDATE; // 4
+ GET(Object.class) {
+ @Override
+ MethodType accessModeType(Class> receiver, Class> value,
+ Class>... intermediate) {
+ Class>[] ps = allocateParameters(0, receiver, intermediate);
+ fillParameters(ps, receiver, intermediate);
+ return MethodType.methodType(value, ps);
+ }
+ },
+ SET(void.class) {
+ @Override
+ MethodType accessModeType(Class> receiver, Class> value,
+ Class>... intermediate) {
+ Class>[] ps = allocateParameters(1, receiver, intermediate);
+ int i = fillParameters(ps, receiver, intermediate);
+ ps[i] = value;
+ return MethodType.methodType(void.class, ps);
+ }
+ },
+ COMPARE_AND_SWAP(boolean.class) {
+ @Override
+ MethodType accessModeType(Class> receiver, Class> value,
+ Class>... intermediate) {
+ Class>[] ps = allocateParameters(2, receiver, intermediate);
+ int i = fillParameters(ps, receiver, intermediate);
+ ps[i++] = value;
+ ps[i] = value;
+ return MethodType.methodType(boolean.class, ps);
+ }
+ },
+ COMPARE_AND_EXCHANGE(Object.class) {
+ @Override
+ MethodType accessModeType(Class> receiver, Class> value,
+ Class>... intermediate) {
+ Class>[] ps = allocateParameters(2, receiver, intermediate);
+ int i = fillParameters(ps, receiver, intermediate);
+ ps[i++] = value;
+ ps[i] = value;
+ return MethodType.methodType(value, ps);
+ }
+ },
+ GET_AND_UPDATE(Object.class) {
+ @Override
+ MethodType accessModeType(Class> receiver, Class> value,
+ Class>... intermediate) {
+ Class>[] ps = allocateParameters(1, receiver, intermediate);
+ int i = fillParameters(ps, receiver, intermediate);
+ ps[i] = value;
+ return MethodType.methodType(value, ps);
+ }
+ };
- MethodType getMethodType(VarHandle vh) {
- return getMethodType(this.ordinal(), vh);
+ final Class> returnType;
+ final boolean isMonomorphicInReturnType;
+
+ AccessType(Class> returnType) {
+ this.returnType = returnType;
+ isMonomorphicInReturnType = returnType != Object.class;
}
- @ForceInline
- static MethodType getMethodType(int ordinal, VarHandle vh) {
- if (ordinal == 0) {
- return vh.typeGet;
- }
- else if (ordinal == 1) {
- return vh.typeSet;
- }
- else if (ordinal == 2) {
- return vh.typeCompareSwap;
- }
- else if (ordinal == 3) {
- return vh.typeCompareExchange;
- }
- else if (ordinal == 4) {
- return vh.typeGetAndUpdate;
- }
- else {
- throw new IllegalStateException("Illegal access type: " + ordinal);
- }
+ abstract MethodType accessModeType(Class> receiver, Class> value,
+ Class>... intermediate);
+
+ private static Class>[] allocateParameters(int values,
+ Class> receiver, Class>... intermediate) {
+ int size = ((receiver != null) ? 1 : 0) + intermediate.length + values;
+ return new Class>[size];
+ }
+
+ private static int fillParameters(Class>[] ps,
+ Class> receiver, Class>... intermediate) {
+ int i = 0;
+ if (receiver != null)
+ ps[i++] = receiver;
+ for (int j = 0; j < intermediate.length; j++)
+ ps[i++] = intermediate[j];
+ return i;
}
}
@@ -1133,115 +1147,115 @@
* method
* {@link VarHandle#get VarHandle.get}
*/
- GET("get", AccessType.GET, Object.class),
+ GET("get", AccessType.GET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#set VarHandle.set}
*/
- SET("set", AccessType.SET, void.class),
+ SET("set", AccessType.SET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#getVolatile VarHandle.getVolatile}
*/
- GET_VOLATILE("getVolatile", AccessType.GET, Object.class),
+ GET_VOLATILE("getVolatile", AccessType.GET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#setVolatile VarHandle.setVolatile}
*/
- SET_VOLATILE("setVolatile", AccessType.SET, void.class),
+ SET_VOLATILE("setVolatile", AccessType.SET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#getAcquire VarHandle.getAcquire}
*/
- GET_ACQUIRE("getAcquire", AccessType.GET, Object.class),
+ GET_ACQUIRE("getAcquire", AccessType.GET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#setRelease VarHandle.setRelease}
*/
- SET_RELEASE("setRelease", AccessType.SET, void.class),
+ SET_RELEASE("setRelease", AccessType.SET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#getOpaque VarHandle.getOpaque}
*/
- GET_OPAQUE("getOpaque", AccessType.GET, Object.class),
+ GET_OPAQUE("getOpaque", AccessType.GET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#setOpaque VarHandle.setOpaque}
*/
- SET_OPAQUE("setOpaque", AccessType.SET, void.class),
+ SET_OPAQUE("setOpaque", AccessType.SET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#compareAndSet VarHandle.compareAndSet}
*/
- COMPARE_AND_SET("compareAndSet", AccessType.COMPARE_AND_SWAP, boolean.class),
+ COMPARE_AND_SET("compareAndSet", AccessType.COMPARE_AND_SWAP),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#compareAndExchangeVolatile VarHandle.compareAndExchangeVolatile}
*/
- COMPARE_AND_EXCHANGE_VOLATILE("compareAndExchangeVolatile", AccessType.COMPARE_AND_EXCHANGE, Object.class),
+ COMPARE_AND_EXCHANGE_VOLATILE("compareAndExchangeVolatile", AccessType.COMPARE_AND_EXCHANGE),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#compareAndExchangeAcquire VarHandle.compareAndExchangeAcquire}
*/
- COMPARE_AND_EXCHANGE_ACQUIRE("compareAndExchangeAcquire", AccessType.COMPARE_AND_EXCHANGE, Object.class),
+ COMPARE_AND_EXCHANGE_ACQUIRE("compareAndExchangeAcquire", AccessType.COMPARE_AND_EXCHANGE),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#compareAndExchangeRelease VarHandle.compareAndExchangeRelease}
*/
- COMPARE_AND_EXCHANGE_RELEASE("compareAndExchangeRelease", AccessType.COMPARE_AND_EXCHANGE, Object.class),
+ COMPARE_AND_EXCHANGE_RELEASE("compareAndExchangeRelease", AccessType.COMPARE_AND_EXCHANGE),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#weakCompareAndSet VarHandle.weakCompareAndSet}
*/
- WEAK_COMPARE_AND_SET("weakCompareAndSet", AccessType.COMPARE_AND_SWAP, boolean.class),
+ WEAK_COMPARE_AND_SET("weakCompareAndSet", AccessType.COMPARE_AND_SWAP),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#weakCompareAndSetVolatile VarHandle.weakCompareAndSetVolatile}
*/
- WEAK_COMPARE_AND_SET_VOLATILE("weakCompareAndSetVolatile", AccessType.COMPARE_AND_SWAP, boolean.class),
+ WEAK_COMPARE_AND_SET_VOLATILE("weakCompareAndSetVolatile", AccessType.COMPARE_AND_SWAP),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#weakCompareAndSetAcquire VarHandle.weakCompareAndSetAcquire}
*/
- WEAK_COMPARE_AND_SET_ACQUIRE("weakCompareAndSetAcquire", AccessType.COMPARE_AND_SWAP, boolean.class),
+ WEAK_COMPARE_AND_SET_ACQUIRE("weakCompareAndSetAcquire", AccessType.COMPARE_AND_SWAP),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#weakCompareAndSetRelease VarHandle.weakCompareAndSetRelease}
*/
- WEAK_COMPARE_AND_SET_RELEASE("weakCompareAndSetRelease", AccessType.COMPARE_AND_SWAP, boolean.class),
+ WEAK_COMPARE_AND_SET_RELEASE("weakCompareAndSetRelease", AccessType.COMPARE_AND_SWAP),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#getAndSet VarHandle.getAndSet}
*/
- GET_AND_SET("getAndSet", AccessType.GET_AND_UPDATE, Object.class),
+ GET_AND_SET("getAndSet", AccessType.GET_AND_UPDATE),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#getAndAdd VarHandle.getAndAdd}
*/
- GET_AND_ADD("getAndAdd", AccessType.GET_AND_UPDATE, Object.class),
+ GET_AND_ADD("getAndAdd", AccessType.GET_AND_UPDATE),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#addAndGet VarHandle.addAndGet}
*/
- ADD_AND_GET("addAndGet", AccessType.GET_AND_UPDATE, Object.class),
+ ADD_AND_GET("addAndGet", AccessType.GET_AND_UPDATE),
;
static final Map methodNameToAccessMode;
@@ -1256,10 +1270,8 @@
final String methodName;
final AccessType at;
- final boolean isPolyMorphicInReturnType;
- final Class> returnType;
- AccessMode(final String methodName, AccessType at, Class> returnType) {
+ AccessMode(final String methodName, AccessType at) {
this.methodName = methodName;
this.at = at;
@@ -1267,10 +1279,7 @@
assert methodName.equals(toMethodName(name()));
// Assert that return type is correct
// Otherwise, when disabled avoid using reflection
- assert returnType == getReturnType(methodName);
-
- this.returnType = returnType;
- isPolyMorphicInReturnType = returnType != Object.class;
+ assert at.returnType == getReturnType(methodName);
}
/**
@@ -1324,17 +1333,21 @@
@ForceInline
static MemberName getMemberName(int ordinal, VarForm vform) {
- return vform.table[ordinal];
+ return vform.memberName_table[ordinal];
}
}
static final class AccessDescriptor {
- final MethodType symbolicMethodType;
+ final MethodType symbolicMethodTypeErased;
+ final MethodType symbolicMethodTypeInvoker;
+ final Class> returnType;
final int type;
final int mode;
public AccessDescriptor(MethodType symbolicMethodType, int type, int mode) {
- this.symbolicMethodType = symbolicMethodType;
+ this.symbolicMethodTypeErased = symbolicMethodType.erase();
+ this.symbolicMethodTypeInvoker = symbolicMethodType.insertParameterTypes(0, VarHandle.class);
+ this.returnType = symbolicMethodType.returnType();
this.type = type;
this.mode = mode;
}
@@ -1346,6 +1359,7 @@
* @return the variable type of variables referenced by this VarHandle
*/
public final Class> varType() {
+ MethodType typeSet = accessModeType(AccessMode.SET);
return typeSet.parameterType(typeSet.parameterCount() - 1);
}
@@ -1356,6 +1370,7 @@
* list is unmodifiable
*/
public final List> coordinateTypes() {
+ MethodType typeGet = accessModeType(AccessMode.GET);
return typeGet.parameterList();
}
@@ -1374,9 +1389,15 @@
* @return the access mode type for the given access mode
*/
public final MethodType accessModeType(AccessMode accessMode) {
- return accessMode.at.getMethodType(this);
+ TypesAndInvokers tis = getTypesAndInvokers();
+ MethodType mt = tis.methodType_table[accessMode.at.ordinal()];
+ if (mt == null) {
+ mt = tis.methodType_table[accessMode.at.ordinal()] =
+ accessModeTypeUncached(accessMode);
+ }
+ return mt;
}
-
+ abstract MethodType accessModeTypeUncached(AccessMode accessMode);
/**
* Returns {@code true} if the given access mode is supported, otherwise
@@ -1417,9 +1438,8 @@
public final MethodHandle toMethodHandle(AccessMode accessMode) {
MemberName mn = AccessMode.getMemberName(accessMode.ordinal(), vform);
if (mn != null) {
- return DirectMethodHandle.make(mn).
- bindTo(this).
- asType(accessMode.at.getMethodType(this));
+ MethodHandle mh = getMethodHandle(accessMode.ordinal());
+ return mh.bindTo(this);
}
else {
// Ensure an UnsupportedOperationException is thrown
@@ -1428,6 +1448,51 @@
}
}
+ @Stable
+ TypesAndInvokers typesAndInvokers;
+
+ static class TypesAndInvokers {
+ final @Stable
+ MethodType[] methodType_table =
+ new MethodType[VarHandle.AccessType.values().length];
+
+ final @Stable
+ MethodHandle[] methodHandle_table =
+ new MethodHandle[AccessMode.values().length];
+ }
+
+ @ForceInline
+ private final TypesAndInvokers getTypesAndInvokers() {
+ TypesAndInvokers tis = typesAndInvokers;
+ if (tis == null) {
+ tis = typesAndInvokers = new TypesAndInvokers();
+ }
+ return tis;
+ }
+
+ @ForceInline
+ final MethodHandle getMethodHandle(int mode) {
+ TypesAndInvokers tis = getTypesAndInvokers();
+ MethodHandle mh = tis.methodHandle_table[mode];
+ if (mh == null) {
+ mh = tis.methodHandle_table[mode] = getMethodHandleUncached(tis, mode);
+ }
+ return mh;
+ }
+ private final MethodHandle getMethodHandleUncached(TypesAndInvokers tis, int mode) {
+ MethodType mt = accessModeType(AccessMode.values()[mode]).
+ insertParameterTypes(0, VarHandle.class);
+ MemberName mn = vform.getMemberName(mode);
+ DirectMethodHandle dmh = DirectMethodHandle.make(mn);
+ // Such a method handle must not be publically exposed directly
+ // otherwise it can be cracked, it must be transformed or rebound
+ // before exposure
+ MethodHandle mh = dmh.copyWith(mt, dmh.form);
+ assert mh.type().erase() == mn.getMethodType().erase();
+ return mh;
+ }
+
+
/*non-public*/
final void updateVarForm(VarForm newVForm) {
if (vform == newVForm) return;
@@ -1453,6 +1518,10 @@
catch (ReflectiveOperationException e) {
throw newInternalError(e);
}
+
+ // The VarHandleGuards must be initialized to ensure correct
+ // compilation of the guard methods
+ UNSAFE.ensureClassInitialized(VarHandleGuards.class);
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/invoke/VarHandleGuards.java
--- a/jdk/src/java.base/share/classes/java/lang/invoke/VarHandleGuards.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/VarHandleGuards.java Thu May 05 19:11:09 2016 +0000
@@ -30,1361 +30,1008 @@
final class VarHandleGuards {
@ForceInline
- final static MemberName getMemberName(VarHandle handle, VarHandle.AccessDescriptor ad) {
- MemberName mn = VarHandle.AccessMode.getMemberName(ad.mode, handle.vform);
- if (mn == null) {
- throw handle.unsupported();
- }
- return mn;
- }
-
- @ForceInline
@LambdaForm.Compiled
final static Object guard_L_L(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LL_V(VarHandle handle, Object arg0, Object arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static Object guard_LL_L(VarHandle handle, Object arg0, Object arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LLL_Z(VarHandle handle, Object arg0, Object arg1, Object arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static Object guard_LLL_L(VarHandle handle, Object arg0, Object arg1, Object arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_L_I(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LI_V(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_LI_I(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LII_Z(VarHandle handle, Object arg0, int arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_LII_I(VarHandle handle, Object arg0, int arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_L_J(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LJ_V(VarHandle handle, Object arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_LJ_J(VarHandle handle, Object arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LJJ_Z(VarHandle handle, Object arg0, long arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_LJJ_J(VarHandle handle, Object arg0, long arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_L_F(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LF_V(VarHandle handle, Object arg0, float arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_LF_F(VarHandle handle, Object arg0, float arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LFF_Z(VarHandle handle, Object arg0, float arg1, float arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_LFF_F(VarHandle handle, Object arg0, float arg1, float arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_L_D(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LD_V(VarHandle handle, Object arg0, double arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_LD_D(VarHandle handle, Object arg0, double arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LDD_Z(VarHandle handle, Object arg0, double arg1, double arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_LDD_D(VarHandle handle, Object arg0, double arg1, double arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static Object guard__L(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_L_V(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LL_Z(VarHandle handle, Object arg0, Object arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard__I(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_I_V(VarHandle handle, int arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_I_I(VarHandle handle, int arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_II_Z(VarHandle handle, int arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_II_I(VarHandle handle, int arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard__J(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_J_V(VarHandle handle, long arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_J_J(VarHandle handle, long arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_JJ_Z(VarHandle handle, long arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_JJ_J(VarHandle handle, long arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard__F(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_F_V(VarHandle handle, float arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_F_F(VarHandle handle, float arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_FF_Z(VarHandle handle, float arg0, float arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_FF_F(VarHandle handle, float arg0, float arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard__D(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_D_V(VarHandle handle, double arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_D_D(VarHandle handle, double arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_DD_Z(VarHandle handle, double arg0, double arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_DD_D(VarHandle handle, double arg0, double arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static Object guard_LI_L(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LIL_V(VarHandle handle, Object arg0, int arg1, Object arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static Object guard_LIL_L(VarHandle handle, Object arg0, int arg1, Object arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LILL_Z(VarHandle handle, Object arg0, int arg1, Object arg2, Object arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static Object guard_LILL_L(VarHandle handle, Object arg0, int arg1, Object arg2, Object arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LII_V(VarHandle handle, Object arg0, int arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LIII_Z(VarHandle handle, Object arg0, int arg1, int arg2, int arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_LIII_I(VarHandle handle, Object arg0, int arg1, int arg2, int arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_LI_J(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LIJ_V(VarHandle handle, Object arg0, int arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_LIJ_J(VarHandle handle, Object arg0, int arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LIJJ_Z(VarHandle handle, Object arg0, int arg1, long arg2, long arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_LIJJ_J(VarHandle handle, Object arg0, int arg1, long arg2, long arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_LI_F(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LIF_V(VarHandle handle, Object arg0, int arg1, float arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_LIF_F(VarHandle handle, Object arg0, int arg1, float arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LIFF_Z(VarHandle handle, Object arg0, int arg1, float arg2, float arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_LIFF_F(VarHandle handle, Object arg0, int arg1, float arg2, float arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_LI_D(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LID_V(VarHandle handle, Object arg0, int arg1, double arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_LID_D(VarHandle handle, Object arg0, int arg1, double arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LIDD_Z(VarHandle handle, Object arg0, int arg1, double arg2, double arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_LIDD_D(VarHandle handle, Object arg0, int arg1, double arg2, double arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_LJ_I(VarHandle handle, Object arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LJI_V(VarHandle handle, Object arg0, long arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_LJI_I(VarHandle handle, Object arg0, long arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LJII_Z(VarHandle handle, Object arg0, long arg1, int arg2, int arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_LJII_I(VarHandle handle, Object arg0, long arg1, int arg2, int arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LJJ_V(VarHandle handle, Object arg0, long arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LJJJ_Z(VarHandle handle, Object arg0, long arg1, long arg2, long arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_LJJJ_J(VarHandle handle, Object arg0, long arg1, long arg2, long arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/invoke/VarHandles.java
--- a/jdk/src/java.base/share/classes/java/lang/invoke/VarHandles.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/VarHandles.java Thu May 05 19:11:09 2016 +0000
@@ -280,28 +280,29 @@
// "@ForceInline\n" +
// "@LambdaForm.Compiled\n" +
// "final static throws Throwable {\n" +
-// " MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);\n" +
-// " MethodType symbolic = ad.symbolicMethodType;\n" +
-// " if (target == symbolic) {\n" +
-// " MethodHandle.linkToStatic();\n" +
-// " }\n" +
-// " else if (target.erase() == symbolic.erase()) {\n" +
+// " if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodType) {\n" +
// " MethodHandle.linkToStatic();\n" +
// " }\n" +
// " else {\n" +
-// " MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);\n" +
-// " vh_invoker.invokeBasic();\n" +
+// " MethodHandle mh = handle.getMethodHandle(ad.mode);\n" +
+// " mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic();\n" +
// " }\n" +
// "}";
//
-// static final String GET_MEMBER_NAME_METHOD =
+// static final String GUARD_METHOD_TEMPLATE_V =
// "@ForceInline\n" +
-// "final static MemberName getMemberName(VarHandle handle, VarHandle.AccessDescriptor ad) {\n" +
-// " MemberName mn = VarHandle.AccessMode.getMemberName(ad.mode, handle.vform);\n" +
-// " if (mn == null) {\n" +
-// " throw handle.unsupported();\n" +
+// "@LambdaForm.Compiled\n" +
+// "final static throws Throwable {\n" +
+// " if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodType) {\n" +
+// " MethodHandle.linkToStatic();\n" +
// " }\n" +
-// " return mn;\n" +
+// " else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodType) {\n" +
+// " MethodHandle.linkToStatic();\n" +
+// " }\n" +
+// " else {\n" +
+// " MethodHandle mh = handle.getMethodHandle(ad.mode);\n" +
+// " mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic();\n" +
+// " }\n" +
// "}";
//
// // A template for deriving the operations
@@ -345,8 +346,6 @@
// System.out.println("final class VarHandleGuards {");
//
// System.out.println();
-// System.out.println(GET_MEMBER_NAME_METHOD);
-// System.out.println();
//
// // Declare the stream of shapes
// Stream hts = Stream.of(
@@ -445,7 +444,10 @@
//
// List LINK_TO_STATIC_ARGS = params.keySet().stream().
// collect(toList());
-// LINK_TO_STATIC_ARGS.add("getMemberName(handle, ad)");
+// LINK_TO_STATIC_ARGS.add("handle.vform.getMemberName(ad.mode)");
+// List LINK_TO_STATIC_ARGS_V = params.keySet().stream().
+// collect(toList());
+// LINK_TO_STATIC_ARGS_V.add("handle.vform.getMemberName_V(ad.mode)");
//
// List LINK_TO_INVOKER_ARGS = params.keySet().stream().
// collect(toList());
@@ -464,9 +466,12 @@
//
// String RETURN_ERASED = returnType != Object.class
// ? ""
-// : " return symbolic.returnType().cast(r);";
+// : " return ad.returnType.cast(r);";
//
-// return GUARD_METHOD_TEMPLATE.
+// String template = returnType == void.class
+// ? GUARD_METHOD_TEMPLATE_V
+// : GUARD_METHOD_TEMPLATE;
+// return template.
// replace("", METHOD).
// replace("", NAME).
// replaceAll("", RETURN).
@@ -474,6 +479,8 @@
// replace("", RETURN_ERASED).
// replaceAll("", LINK_TO_STATIC_ARGS.stream().
// collect(joining(", "))).
+// replaceAll("", LINK_TO_STATIC_ARGS_V.stream().
+// collect(joining(", "))).
// replace("", LINK_TO_INVOKER_ARGS.stream().
// collect(joining(", ")))
// ;
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandle.java.template
--- a/jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandle.java.template Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandle.java.template Thu May 05 19:11:09 2016 +0000
@@ -41,12 +41,12 @@
#end[Object]
FieldInstanceReadOnly(Class> receiverType, long fieldOffset{#if[Object]?, Class> fieldType}) {
- this(receiverType, fieldOffset{#if[Object]?, fieldType}, FieldInstanceReadOnly.class);
+ this(receiverType, fieldOffset{#if[Object]?, fieldType}, FieldInstanceReadOnly.FORM);
}
protected FieldInstanceReadOnly(Class> receiverType, long fieldOffset{#if[Object]?, Class> fieldType},
- Class extends FieldInstanceReadOnly> handle) {
- super(VarForm.createFromStatic(handle), receiverType, {#if[Object]?fieldType:$type$.class});
+ VarForm form) {
+ super(form);
this.fieldOffset = fieldOffset;
this.receiverType = receiverType;
#if[Object]
@@ -54,6 +54,11 @@
#end[Object]
}
+ @Override
+ final MethodType accessModeTypeUncached(AccessMode accessMode) {
+ return accessMode.at.accessModeType(receiverType, {#if[Object]?fieldType:$type$.class});
+ }
+
@ForceInline
static $type$ get(FieldInstanceReadOnly handle, Object holder) {
return UNSAFE.get$Type$(Objects.requireNonNull(handle.receiverType.cast(holder)),
@@ -77,12 +82,14 @@
return UNSAFE.get$Type$Acquire(Objects.requireNonNull(handle.receiverType.cast(holder)),
handle.fieldOffset);
}
+
+ static final VarForm FORM = new VarForm(FieldInstanceReadOnly.class, Object.class, $type$.class);
}
- static class FieldInstanceReadWrite extends FieldInstanceReadOnly {
+ static final class FieldInstanceReadWrite extends FieldInstanceReadOnly {
FieldInstanceReadWrite(Class> receiverType, long fieldOffset{#if[Object]?, Class> fieldType}) {
- super(receiverType, fieldOffset{#if[Object]?, fieldType}, FieldInstanceReadWrite.class);
+ super(receiverType, fieldOffset{#if[Object]?, fieldType}, FieldInstanceReadWrite.FORM);
}
@ForceInline
@@ -202,6 +209,8 @@
value) + value;
}
#end[AtomicAdd]
+
+ static final VarForm FORM = new VarForm(FieldInstanceReadWrite.class, Object.class, $type$.class);
}
@@ -213,12 +222,12 @@
#end[Object]
FieldStaticReadOnly(Object base, long fieldOffset{#if[Object]?, Class> fieldType}) {
- this(base, fieldOffset{#if[Object]?, fieldType}, FieldStaticReadOnly.class);
+ this(base, fieldOffset{#if[Object]?, fieldType}, FieldStaticReadOnly.FORM);
}
protected FieldStaticReadOnly(Object base, long fieldOffset{#if[Object]?, Class> fieldType},
- Class extends FieldStaticReadOnly> handle) {
- super(VarForm.createFromStatic(handle), null, {#if[Object]?fieldType:$type$.class});
+ VarForm form) {
+ super(form);
this.base = base;
this.fieldOffset = fieldOffset;
#if[Object]
@@ -226,6 +235,11 @@
#end[Object]
}
+ @Override
+ final MethodType accessModeTypeUncached(AccessMode accessMode) {
+ return accessMode.at.accessModeType(null, {#if[Object]?fieldType:$type$.class});
+ }
+
@ForceInline
static $type$ get(FieldStaticReadOnly handle) {
return UNSAFE.get$Type$(handle.base,
@@ -249,12 +263,14 @@
return UNSAFE.get$Type$Acquire(handle.base,
handle.fieldOffset);
}
+
+ static final VarForm FORM = new VarForm(FieldStaticReadOnly.class, null, $type$.class);
}
- static class FieldStaticReadWrite extends FieldStaticReadOnly {
+ static final class FieldStaticReadWrite extends FieldStaticReadOnly {
FieldStaticReadWrite(Object base, long fieldOffset{#if[Object]?, Class> fieldType}) {
- super(base, fieldOffset{#if[Object]?, fieldType}, FieldStaticReadWrite.class);
+ super(base, fieldOffset{#if[Object]?, fieldType}, FieldStaticReadWrite.FORM);
}
@ForceInline
@@ -375,6 +391,8 @@
value) + value;
}
#end[AtomicAdd]
+
+ static final VarForm FORM = new VarForm(FieldStaticReadWrite.class, null, $type$.class);
}
@@ -387,8 +405,7 @@
#end[Object]
Array(int abase, int ashift{#if[Object]?, Class> arrayType}) {
- super(VarForm.createFromStatic(Array.class),
- {#if[Object]?arrayType:$type$[].class}, {#if[Object]?arrayType.getComponentType():$type$.class}, int.class);
+ super(Array.FORM);
this.abase = abase;
this.ashift = ashift;
#if[Object]
@@ -397,6 +414,11 @@
#end[Object]
}
+ @Override
+ final MethodType accessModeTypeUncached(AccessMode accessMode) {
+ return accessMode.at.accessModeType({#if[Object]?arrayType:$type$[].class}, {#if[Object]?arrayType.getComponentType():$type$.class}, int.class);
+ }
+
@ForceInline
static $type$ get(Array handle, Object oarray, int index) {
#if[Object]
@@ -630,5 +652,7 @@
value) + value;
}
#end[AtomicAdd]
+
+ static final VarForm FORM = new VarForm(Array.class, {#if[Object]?Object[].class:$type$[].class}, {#if[Object]?Object.class:$type$.class}, int.class);
}
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template
--- a/jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template Thu May 05 19:11:09 2016 +0000
@@ -59,13 +59,11 @@
#end[floatingPoint]
- private static class ByteArrayViewVarHandle extends VarHandle {
+ private static abstract class ByteArrayViewVarHandle extends VarHandle {
final boolean be;
- ByteArrayViewVarHandle(Class extends ByteArrayViewVarHandle> implSubType,
- Class> arrayType, Class> component, boolean be) {
- super(VarForm.createFromStatic(implSubType),
- arrayType, component, int.class);
+ ByteArrayViewVarHandle(VarForm form, boolean be) {
+ super(form);
this.be = be;
}
}
@@ -73,7 +71,12 @@
static final class ArrayHandle extends ByteArrayViewVarHandle {
ArrayHandle(boolean be) {
- super(ArrayHandle.class, byte[].class, $type$.class, be);
+ super(ArrayHandle.FORM, be);
+ }
+
+ @Override
+ final MethodType accessModeTypeUncached(AccessMode accessMode) {
+ return accessMode.at.accessModeType(byte[].class, $type$.class, int.class);
}
@ForceInline
@@ -286,13 +289,20 @@
convEndian(handle.be, value))) + value;
}
#end[AtomicAdd]
+
+ static final VarForm FORM = new VarForm(ArrayHandle.class, byte[].class, $type$.class, int.class);
}
static final class ByteBufferHandle extends ByteArrayViewVarHandle {
ByteBufferHandle(boolean be) {
- super(ByteBufferHandle.class, ByteBuffer.class, $type$.class, be);
+ super(ByteBufferHandle.FORM, be);
+ }
+
+ @Override
+ final MethodType accessModeTypeUncached(AccessMode accessMode) {
+ return accessMode.at.accessModeType(ByteBuffer.class, $type$.class, int.class);
}
@ForceInline
@@ -513,5 +523,7 @@
convEndian(handle.be, value))) + value;
}
#end[AtomicAdd]
+
+ static final VarForm FORM = new VarForm(ByteBufferHandle.class, ByteBuffer.class, $type$.class, int.class);
}
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/module/Configuration.java
--- a/jdk/src/java.base/share/classes/java/lang/module/Configuration.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/module/Configuration.java Thu May 05 19:11:09 2016 +0000
@@ -25,6 +25,7 @@
package java.lang.module;
+import java.io.PrintStream;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -183,17 +184,20 @@
this.nameToModule = Collections.emptyMap();
}
- private Configuration(Configuration parent, Resolver resolver) {
- Map> graph = resolver.finish(this);
+ private Configuration(Configuration parent,
+ Resolver resolver,
+ boolean check)
+ {
+ Map> g = resolver.finish(this, check);
Map nameToModule = new HashMap<>();
- for (ResolvedModule resolvedModule : graph.keySet()) {
+ for (ResolvedModule resolvedModule : g.keySet()) {
nameToModule.put(resolvedModule.name(), resolvedModule);
}
this.parent = parent;
- this.graph = graph;
- this.modules = Collections.unmodifiableSet(graph.keySet());
+ this.graph = g;
+ this.modules = Collections.unmodifiableSet(g.keySet());
this.nameToModule = Collections.unmodifiableMap(nameToModule);
}
@@ -283,10 +287,10 @@
Objects.requireNonNull(after);
Objects.requireNonNull(roots);
- Resolver resolver = new Resolver(before, this, after);
+ Resolver resolver = new Resolver(before, this, after, null);
resolver.resolveRequires(roots);
- return new Configuration(this, resolver);
+ return new Configuration(this, resolver, true);
}
@@ -340,10 +344,32 @@
Objects.requireNonNull(after);
Objects.requireNonNull(roots);
- Resolver resolver = new Resolver(before, this, after);
+ Resolver resolver = new Resolver(before, this, after, null);
resolver.resolveRequires(roots).resolveUses();
- return new Configuration(this, resolver);
+ return new Configuration(this, resolver, true);
+ }
+
+
+ /**
+ * Resolves a collection of root modules, with service binding, and with
+ * the empty configuration as its parent. The post resolution checks
+ * are optionally run.
+ *
+ * This method is used to create the configuration for the boot layer.
+ */
+ static Configuration resolveRequiresAndUses(ModuleFinder finder,
+ Collection roots,
+ boolean check,
+ PrintStream traceOutput)
+ {
+ Configuration parent = empty();
+
+ Resolver resolver
+ = new Resolver(finder, parent, ModuleFinder.empty(), traceOutput);
+ resolver.resolveRequires(roots).resolveUses();
+
+ return new Configuration(parent, resolver, check);
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java
--- a/jdk/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java Thu May 05 19:11:09 2016 +0000
@@ -27,13 +27,17 @@
import java.io.InputStream;
import java.io.IOException;
+import java.io.PrintStream;
import java.io.UncheckedIOException;
+import java.net.URI;
import java.nio.ByteBuffer;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -45,7 +49,7 @@
import static java.util.Objects.*;
import jdk.internal.module.Checks;
-import jdk.internal.module.Hasher.DependencyHashes;
+import jdk.internal.module.ModuleHashes;
/**
@@ -372,8 +376,9 @@
private Provides(String service, Set providers, boolean check) {
this.service = check ? requireServiceTypeName(service) : service;
- providers = check ? Collections.unmodifiableSet(new HashSet<>(providers))
- : Collections.unmodifiableSet(providers);
+ providers = check
+ ? Collections.unmodifiableSet(new LinkedHashSet<>(providers))
+ : Collections.unmodifiableSet(providers);
if (providers.isEmpty())
throw new IllegalArgumentException("Empty providers set");
if (check)
@@ -787,7 +792,7 @@
private final String osVersion;
private final Set conceals;
private final Set packages;
- private final DependencyHashes hashes;
+ private final ModuleHashes hashes;
private ModuleDescriptor(String name,
boolean automatic,
@@ -802,7 +807,7 @@
String osArch,
String osVersion,
Set conceals,
- DependencyHashes hashes)
+ ModuleHashes hashes)
{
this.name = name;
@@ -878,7 +883,8 @@
String osArch,
String osVersion,
Set conceals,
- Set packages) {
+ Set packages,
+ ModuleHashes hashes) {
this.name = name;
this.automatic = automatic;
this.synthetic = synthetic;
@@ -894,7 +900,7 @@
this.osName = osName;
this.osArch = osArch;
this.osVersion = osVersion;
- this.hashes = null;
+ this.hashes = hashes;
}
/**
@@ -1063,9 +1069,9 @@
}
/**
- * Returns the object with the hashes of the dependences.
+ * Returns the object with the hashes of other modules
*/
- Optional hashes() {
+ Optional hashes() {
return Optional.ofNullable(hashes);
}
@@ -1103,7 +1109,7 @@
String osArch;
String osVersion;
String mainClass;
- DependencyHashes hashes;
+ ModuleHashes hashes;
/**
* Initializes a new builder with the given module name.
@@ -1580,7 +1586,7 @@
return this;
}
- /* package */ Builder hashes(DependencyHashes hashes) {
+ /* package */ Builder hashes(ModuleHashes hashes) {
this.hashes = hashes;
return this;
}
@@ -1719,7 +1725,9 @@
hc = hc * 43 + Objects.hashCode(osVersion);
hc = hc * 43 + Objects.hashCode(conceals);
hc = hc * 43 + Objects.hashCode(hashes);
- if (hc != 0) hash = hc;
+ if (hc == 0)
+ hc = -1;
+ hash = hc;
}
return hc;
}
@@ -1925,11 +1933,12 @@
static {
/**
- * Setup the shared secret to allow code in other packages create
- * ModuleDescriptor and associated objects directly.
+ * Setup the shared secret to allow code in other packages access
+ * private package methods in java.lang.module.
*/
jdk.internal.misc.SharedSecrets
.setJavaLangModuleAccess(new jdk.internal.misc.JavaLangModuleAccess() {
+
@Override
public Requires newRequires(Set ms, String mn) {
return new Requires(ms, mn, false);
@@ -1974,7 +1983,8 @@
String osArch,
String osVersion,
Set conceals,
- Set packages) {
+ Set packages,
+ ModuleHashes hashes) {
return new ModuleDescriptor(name,
automatic,
synthetic,
@@ -1988,7 +1998,29 @@
osArch,
osVersion,
conceals,
- packages);
+ packages,
+ hashes);
+ }
+
+ @Override
+ public Configuration resolveRequiresAndUses(ModuleFinder finder,
+ Collection roots,
+ boolean check,
+ PrintStream traceOutput)
+ {
+ return Configuration.resolveRequiresAndUses(finder, roots, check, traceOutput);
+ }
+
+ @Override
+ public ModuleReference newPatchedModule(ModuleDescriptor descriptor,
+ URI location,
+ Supplier s) {
+ return new ModuleReference(descriptor, location, s, true, null);
+ }
+
+ @Override
+ public Optional hashes(ModuleDescriptor descriptor) {
+ return descriptor.hashes();
}
});
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/module/ModuleFinder.java
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/module/ModuleInfo.java
--- a/jdk/src/java.base/share/classes/java/lang/module/ModuleInfo.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/module/ModuleInfo.java Thu May 05 19:11:09 2016 +0000
@@ -37,11 +37,12 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.function.Supplier;
-import jdk.internal.module.Hasher.DependencyHashes;
+import jdk.internal.module.ModuleHashes;
import static jdk.internal.module.ClassFileConstants.*;
@@ -337,7 +338,7 @@
// computeIfAbsent
Set providers = pm.get(sn);
if (providers == null) {
- providers = new HashSet<>();
+ providers = new LinkedHashSet<>(); // preserve order
pm.put(sn, providers);
}
providers.add(cn);
@@ -425,7 +426,7 @@
map.put(dn, hash);
}
- builder.hashes(new DependencyHashes(algorithm, map));
+ builder.hashes(new ModuleHashes(algorithm, map));
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/module/ModulePath.java
--- a/jdk/src/java.base/share/classes/java/lang/module/ModulePath.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/module/ModulePath.java Thu May 05 19:11:09 2016 +0000
@@ -40,7 +40,7 @@
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -52,7 +52,6 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@@ -190,18 +189,16 @@
}
}
- if (attrs.isRegularFile() || attrs.isDirectory()) {
- // packaged or exploded module
- ModuleReference mref = readModule(entry, attrs);
- if (mref != null) {
- String name = mref.descriptor().name();
- return Collections.singletonMap(name, mref);
- }
+ // packaged or exploded module
+ ModuleReference mref = readModule(entry, attrs);
+ if (mref != null) {
+ String name = mref.descriptor().name();
+ return Collections.singletonMap(name, mref);
+ } else {
+ // skipped
+ return Collections.emptyMap();
}
- // not recognized
- throw new FindException("Unrecognized module: " + entry);
-
} catch (IOException ioe) {
throw new FindException(ioe);
}
@@ -238,16 +235,13 @@
// module found
if (mref != null) {
-
// can have at most one version of a module in the directory
String name = mref.descriptor().name();
if (nameToReference.put(name, mref) != null) {
throw new FindException("Two versions of module "
- + name + " found in " + dir);
+ + name + " found in " + dir);
}
-
}
-
}
}
@@ -257,28 +251,40 @@
/**
* Locates a packaged or exploded module, returning a {@code ModuleReference}
- * to the module. Returns {@code null} if the module is not recognized
- * as a packaged or exploded module.
+ * to the module. Returns {@code null} if the entry is skipped because it is
+ * to a directory that does not contain a module-info.class or it's a hidden
+ * file.
*
* @throws IOException if an I/O error occurs
- * @throws FindException if an error occurs parsing the module descriptor
+ * @throws FindException if the file is not recognized as a module or an
+ * error occurs parsing its module descriptor
*/
private ModuleReference readModule(Path entry, BasicFileAttributes attrs)
throws IOException
{
try {
- ModuleReference mref = null;
if (attrs.isDirectory()) {
- mref = readExplodedModule(entry);
- } if (attrs.isRegularFile()) {
- if (entry.toString().endsWith(".jar")) {
- mref = readJar(entry);
- } else if (isLinkPhase && entry.toString().endsWith(".jmod")) {
- mref = readJMod(entry);
+ return readExplodedModule(entry); // may return null
+ }
+
+ String fn = entry.getFileName().toString();
+ if (attrs.isRegularFile()) {
+ if (fn.endsWith(".jar")) {
+ return readJar(entry);
+ } else if (fn.endsWith(".jmod")) {
+ if (isLinkPhase)
+ return readJMod(entry);
+ throw new FindException("JMOD files not supported: " + entry);
}
}
- return mref;
+
+ // skip hidden files
+ if (fn.startsWith(".") || Files.isHidden(entry)) {
+ return null;
+ } else {
+ throw new FindException("Unrecognized module: " + entry);
+ }
} catch (InvalidModuleDescriptorException e) {
throw new FindException("Error reading module: " + entry, e);
@@ -292,15 +298,17 @@
return zf.stream()
.filter(e -> e.getName().startsWith("classes/") &&
e.getName().endsWith(".class"))
- .map(e -> toPackageName(e))
+ .map(e -> toPackageName(e.getName().substring(8)))
.filter(pkg -> pkg.length() > 0) // module-info
- .distinct()
.collect(Collectors.toSet());
}
/**
* Returns a {@code ModuleReference} to a module in jmod file on the
* file system.
+ *
+ * @throws IOException
+ * @throws InvalidModuleDescriptorException
*/
private ModuleReference readJMod(Path file) throws IOException {
try (ZipFile zf = new ZipFile(file.toString())) {
@@ -419,13 +427,12 @@
// scan the entries in the JAR file to locate the .class and service
// configuration file
- Stream stream = jf.stream()
- .map(e -> e.getName())
- .filter(e -> (e.endsWith(".class") || e.startsWith(SERVICES_PREFIX)))
- .distinct();
- Map> map
- = stream.collect(Collectors.partitioningBy(s -> s.endsWith(".class"),
- Collectors.toSet()));
+ Map> map =
+ jf.stream()
+ .map(JarEntry::getName)
+ .filter(s -> (s.endsWith(".class") ^ s.startsWith(SERVICES_PREFIX)))
+ .collect(Collectors.partitioningBy(s -> s.endsWith(".class"),
+ Collectors.toSet()));
Set classFiles = map.get(Boolean.TRUE);
Set configFiles = map.get(Boolean.FALSE);
@@ -433,19 +440,18 @@
classFiles.stream()
.map(c -> toPackageName(c))
.distinct()
- .forEach(p -> builder.exports(p));
+ .forEach(builder::exports);
// map names of service configuration files to service names
Set serviceNames = configFiles.stream()
.map(this::toServiceName)
- .filter(Optional::isPresent)
- .map(Optional::get)
+ .flatMap(Optional::stream)
.collect(Collectors.toSet());
// parse each service configuration file
for (String sn : serviceNames) {
JarEntry entry = jf.getJarEntry(SERVICES_PREFIX + sn);
- Set providerClasses = new HashSet<>();
+ Set providerClasses = new LinkedHashSet<>();
try (InputStream in = jf.getInputStream(entry)) {
BufferedReader reader
= new BufferedReader(new InputStreamReader(in, "UTF-8"));
@@ -475,19 +481,25 @@
private Set jarPackages(JarFile jf) {
return jf.stream()
.filter(e -> e.getName().endsWith(".class"))
- .map(e -> toPackageName(e))
+ .map(e -> toPackageName(e.getName()))
.filter(pkg -> pkg.length() > 0) // module-info
- .distinct()
.collect(Collectors.toSet());
}
/**
* Returns a {@code ModuleReference} to a module in modular JAR file on
* the file system.
+ *
+ * @throws IOException
+ * @throws FindException
+ * @throws InvalidModuleDescriptorException
*/
private ModuleReference readJar(Path file) throws IOException {
- try (JarFile jf = new JarFile(file.toString())) {
-
+ try (JarFile jf = new JarFile(file.toFile(),
+ true, // verify
+ ZipFile.OPEN_READ,
+ JarFile.Release.RUNTIME))
+ {
ModuleDescriptor md;
JarEntry entry = jf.getJarEntry(MODULE_INFO);
if (entry == null) {
@@ -520,7 +532,6 @@
path.toString().endsWith(".class")))
.map(path -> toPackageName(dir.relativize(path)))
.filter(pkg -> pkg.length() > 0) // module-info
- .distinct()
.collect(Collectors.toSet());
} catch (IOException x) {
throw new UncheckedIOException(x);
@@ -530,6 +541,9 @@
/**
* Returns a {@code ModuleReference} to an exploded module on the file
* system or {@code null} if {@code module-info.class} not found.
+ *
+ * @throws IOException
+ * @throws InvalidModuleDescriptorException
*/
private ModuleReference readExplodedModule(Path dir) throws IOException {
Path mi = dir.resolve(MODULE_INFO);
@@ -559,19 +573,6 @@
}
}
- private String toPackageName(ZipEntry entry) {
- String name = entry.getName();
- assert name.endsWith(".class");
- // jmod classes in classes/, jar in /
- int start = name.startsWith("classes/") ? 8 : 0;
- int index = name.lastIndexOf("/");
- if (index > start) {
- return name.substring(start, index).replace('/', '.');
- } else {
- return "";
- }
- }
-
private String toPackageName(Path path) {
String name = path.toString();
assert name.endsWith(".class");
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/module/ModuleReader.java
--- a/jdk/src/java.base/share/classes/java/lang/module/ModuleReader.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/module/ModuleReader.java Thu May 05 19:11:09 2016 +0000
@@ -142,10 +142,11 @@
* @see ClassLoader#defineClass(String, ByteBuffer, java.security.ProtectionDomain)
*/
default Optional read(String name) throws IOException {
- Optional in = open(name);
- if (in.isPresent()) {
- byte[] bytes = in.get().readAllBytes();
- return Optional.of(ByteBuffer.wrap(bytes));
+ Optional oin = open(name);
+ if (oin.isPresent()) {
+ try (InputStream in = oin.get()) {
+ return Optional.of(ByteBuffer.wrap(in.readAllBytes()));
+ }
} else {
return Optional.empty();
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/module/ModuleReference.java
--- a/jdk/src/java.base/share/classes/java/lang/module/ModuleReference.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/module/ModuleReference.java Thu May 05 19:11:09 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2016, 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
@@ -32,7 +32,7 @@
import java.util.Optional;
import java.util.function.Supplier;
-import jdk.internal.module.Hasher.HashSupplier;
+import jdk.internal.module.ModuleHashes.HashSupplier;
/**
@@ -54,12 +54,33 @@
private final URI location;
private final Supplier readerSupplier;
+ // true if this is a reference to a patched module
+ private boolean patched;
+
// the function that computes the hash of this module reference
private final HashSupplier hasher;
// cached hash string to avoid needing to compute it many times
private String cachedHash;
+
+ /**
+ * Constructs a new instance of this class.
+ */
+ ModuleReference(ModuleDescriptor descriptor,
+ URI location,
+ Supplier readerSupplier,
+ boolean patched,
+ HashSupplier hasher)
+
+ {
+ this.descriptor = Objects.requireNonNull(descriptor);
+ this.location = location;
+ this.readerSupplier = Objects.requireNonNull(readerSupplier);
+ this.patched = patched;
+ this.hasher = hasher;
+ }
+
/**
* Constructs a new instance of this class.
*/
@@ -67,11 +88,9 @@
URI location,
Supplier readerSupplier,
HashSupplier hasher)
+
{
- this.descriptor = Objects.requireNonNull(descriptor);
- this.location = location;
- this.readerSupplier = Objects.requireNonNull(readerSupplier);
- this.hasher = hasher;
+ this(descriptor, location, readerSupplier, false, hasher);
}
@@ -96,10 +115,9 @@
URI location,
Supplier readerSupplier)
{
- this(descriptor, location, readerSupplier, null);
+ this(descriptor, location, readerSupplier, false, null);
}
-
/**
* Returns the module descriptor.
*
@@ -151,6 +169,20 @@
/**
+ * Returns {@code true} if this module has been patched via -Xpatch.
+ */
+ boolean isPatched() {
+ return patched;
+ }
+
+ /**
+ * Returns the hash supplier for this module.
+ */
+ HashSupplier hasher() {
+ return hasher;
+ }
+
+ /**
* Computes the hash of this module, returning it as a hex string.
* Returns {@code null} if the hash cannot be computed.
*
@@ -166,8 +198,6 @@
return result;
}
- private int hash;
-
/**
* Computes a hash code for this module reference.
*
@@ -181,12 +211,17 @@
public int hashCode() {
int hc = hash;
if (hc == 0) {
- hc = Objects.hash(descriptor, location, readerSupplier, hasher);
- if (hc != 0) hash = hc;
+ hc = Objects.hash(descriptor, location, readerSupplier, hasher,
+ Boolean.valueOf(patched));
+ if (hc == 0)
+ hc = -1;
+ hash = hc;
}
return hc;
}
+ private int hash;
+
/**
* Tests this module reference for equality with the given object.
*
@@ -214,7 +249,8 @@
return Objects.equals(this.descriptor, that.descriptor)
&& Objects.equals(this.location, that.location)
&& Objects.equals(this.readerSupplier, that.readerSupplier)
- && Objects.equals(this.hasher, that.hasher);
+ && Objects.equals(this.hasher, that.hasher)
+ && this.patched == that.patched;
}
/**
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/module/ModuleReferences.java
--- a/jdk/src/java.base/share/classes/java/lang/module/ModuleReferences.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/module/ModuleReferences.java Thu May 05 19:11:09 2016 +0000
@@ -48,8 +48,8 @@
import jdk.internal.misc.JavaLangAccess;
import jdk.internal.misc.SharedSecrets;
-import jdk.internal.module.Hasher;
-import jdk.internal.module.Hasher.HashSupplier;
+import jdk.internal.module.ModuleHashes;
+import jdk.internal.module.ModuleHashes.HashSupplier;
import jdk.internal.module.ModulePatcher;
import sun.net.www.ParseUtil;
@@ -89,7 +89,7 @@
static ModuleReference newJarModule(ModuleDescriptor md, Path file) {
URI uri = file.toUri();
Supplier supplier = () -> new JarModuleReader(file, uri);
- HashSupplier hasher = (algorithm) -> Hasher.generate(file, algorithm);
+ HashSupplier hasher = (a) -> ModuleHashes.computeHashAsString(file, a);
return newModule(md, uri, supplier, hasher);
}
@@ -99,7 +99,7 @@
static ModuleReference newJModModule(ModuleDescriptor md, Path file) {
URI uri = file.toUri();
Supplier supplier = () -> new JModModuleReader(file, uri);
- HashSupplier hasher = (algorithm) -> Hasher.generate(file, algorithm);
+ HashSupplier hasher = (a) -> ModuleHashes.computeHashAsString(file, a);
return newModule(md, file.toUri(), supplier, hasher);
}
@@ -122,7 +122,7 @@
private final ReadWriteLock lock = new ReentrantReadWriteLock();
private final Lock readLock = lock.readLock();
private final Lock writeLock = lock.writeLock();
- private volatile boolean closed;
+ private boolean closed;
SafeCloseModuleReader() { }
@@ -198,7 +198,10 @@
static JarFile newJarFile(Path path) {
try {
- return new JarFile(path.toFile());
+ return new JarFile(path.toFile(),
+ true, // verify
+ ZipFile.OPEN_READ,
+ JarFile.Release.RUNTIME);
} catch (IOException ioe) {
throw new UncheckedIOException(ioe);
}
@@ -219,6 +222,8 @@
if (je != null) {
String encodedPath = ParseUtil.encodePath(name, false);
String uris = "jar:" + uri + "!/" + encodedPath;
+ if (jf.isMultiRelease())
+ uris += "#runtime";
return Optional.of(URI.create(uris));
} else {
return Optional.empty();
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/module/Resolver.java
--- a/jdk/src/java.base/share/classes/java/lang/module/Resolver.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/module/Resolver.java Thu May 05 19:11:09 2016 +0000
@@ -25,8 +25,8 @@
package java.lang.module;
+import java.io.PrintStream;
import java.lang.module.ModuleDescriptor.Requires.Modifier;
-import java.lang.reflect.Layer;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collection;
@@ -43,7 +43,7 @@
import java.util.StringJoiner;
import java.util.stream.Collectors;
-import jdk.internal.module.Hasher;
+import jdk.internal.module.ModuleHashes;
/**
* The resolver used by {@link Configuration#resolveRequires} and
@@ -55,6 +55,7 @@
private final ModuleFinder beforeFinder;
private final Configuration parent;
private final ModuleFinder afterFinder;
+ private final PrintStream traceOutput;
// maps module name to module reference
private final Map nameToReference = new HashMap<>();
@@ -62,10 +63,12 @@
Resolver(ModuleFinder beforeFinder,
Configuration parent,
- ModuleFinder afterFinder) {
+ ModuleFinder afterFinder,
+ PrintStream traceOutput) {
this.beforeFinder = beforeFinder;
this.parent = parent;
this.afterFinder = afterFinder;
+ this.traceOutput = traceOutput;
}
@@ -76,8 +79,6 @@
*/
Resolver resolveRequires(Collection roots) {
- long start = trace_start("Resolve");
-
// create the visit stack to get us started
Deque q = new ArrayDeque<>();
for (String root : roots) {
@@ -95,10 +96,9 @@
}
}
- if (TRACE) {
+ if (isTracing()) {
trace("Root module %s located", root);
- if (mref.location().isPresent())
- trace(" (%s)", mref.location().get());
+ mref.location().ifPresent(uri -> trace(" (%s)", uri));
}
assert mref.descriptor().name().equals(root);
@@ -108,13 +108,6 @@
resolve(q);
- if (TRACE) {
- long duration = System.currentTimeMillis() - start;
- Set names = nameToReference.keySet();
- trace("Resolver completed in %s ms", duration);
- names.stream().sorted().forEach(name -> trace(" %s", name));
- }
-
return this;
}
@@ -153,11 +146,10 @@
q.offer(mref.descriptor());
resolved.add(mref.descriptor());
- if (TRACE) {
+ if (isTracing()) {
trace("Module %s located, required by %s",
dn, descriptor.name());
- if (mref.location().isPresent())
- trace(" (%s)", mref.location().get());
+ mref.location().ifPresent(uri -> trace(" (%s)", uri));
}
}
@@ -175,8 +167,6 @@
*/
Resolver resolveUses() {
- long start = trace_start("Bind");
-
// Scan the finders for all available service provider modules. As
// java.base uses services then then module finders will be scanned
// anyway.
@@ -230,10 +220,10 @@
String pn = provider.name();
if (!nameToReference.containsKey(pn)) {
-
- if (TRACE && mref.location().isPresent())
- trace(" (%s)", mref.location().get());
-
+ if (isTracing()) {
+ mref.location()
+ .ifPresent(uri -> trace(" (%s)", uri));
+ }
nameToReference.put(pn, mref);
q.push(provider);
}
@@ -248,14 +238,6 @@
} while (!candidateConsumers.isEmpty());
-
- if (TRACE) {
- long duration = System.currentTimeMillis() - start;
- Set names = nameToReference.keySet();
- trace("Bind completed in %s ms", duration);
- names.stream().sorted().forEach(name -> trace(" %s", name));
- }
-
return this;
}
@@ -264,23 +246,33 @@
* Execute post-resolution checks and returns the module graph of resolved
* modules as {@code Map}. The resolved modules will be in the given
* configuration.
+ *
+ * @param check {@true} to execute the post resolution checks
*/
- Map> finish(Configuration cf) {
+ Map> finish(Configuration cf,
+ boolean check)
+ {
+ if (isTracing()) {
+ trace("Result:");
+ Set names = nameToReference.keySet();
+ names.stream().sorted().forEach(name -> trace(" %s", name));
+ }
- detectCycles();
-
- checkPlatformConstraints();
-
- checkHashes();
+ if (check) {
+ detectCycles();
+ checkPlatformConstraints();
+ checkHashes();
+ }
Map> graph = makeGraph(cf);
- checkExportSuppliers(graph);
+ if (check) {
+ checkExportSuppliers(graph);
+ }
return graph;
}
-
/**
* Checks the given module graph for cycles.
*
@@ -420,52 +412,44 @@
}
-
/**
* Checks the hashes in the module descriptor to ensure that they match
- * the hash of the dependency's module reference.
+ * any recorded hashes.
*/
private void checkHashes() {
-
for (ModuleReference mref : nameToReference.values()) {
ModuleDescriptor descriptor = mref.descriptor();
- // get map of module names to hash
- Optional ohashes = descriptor.hashes();
+ // get map of module hashes
+ Optional ohashes = descriptor.hashes();
if (!ohashes.isPresent())
continue;
- Hasher.DependencyHashes hashes = ohashes.get();
-
- // check dependences
- for (ModuleDescriptor.Requires d : descriptor.requires()) {
- String dn = d.name();
- String recordedHash = hashes.hashFor(dn);
-
- if (recordedHash != null) {
+ ModuleHashes hashes = ohashes.get();
- ModuleReference other = nameToReference.get(dn);
- if (other == null) {
- other = parent.findModule(dn)
- .map(ResolvedModule::reference)
- .orElse(null);
- }
- if (other == null)
- throw new InternalError(dn + " not found");
+ String algorithm = hashes.algorithm();
+ for (String dn : hashes.names()) {
+ ModuleReference other = nameToReference.get(dn);
+ if (other == null) {
+ other = parent.findModule(dn)
+ .map(ResolvedModule::reference)
+ .orElse(null);
+ }
- String actualHash = other.computeHash(hashes.algorithm());
+ // skip checking the hash if the module has been patched
+ if (other != null && !other.isPatched()) {
+ String recordedHash = hashes.hashFor(dn);
+ String actualHash = other.computeHash(algorithm);
if (actualHash == null)
fail("Unable to compute the hash of module %s", dn);
-
if (!recordedHash.equals(actualHash)) {
- fail("Hash of %s (%s) differs to expected hash (%s)",
- dn, actualHash, recordedHash);
+ fail("Hash of %s (%s) differs to expected hash (%s)" +
+ " recorded in %s", dn, actualHash, recordedHash,
+ descriptor.name());
}
+ }
+ }
- }
-
- }
}
-
}
@@ -666,7 +650,7 @@
// source is exported to descriptor2
String source = export.source();
ModuleDescriptor other
- = packageToExporter.put(source, descriptor2);
+ = packageToExporter.put(source, descriptor2);
if (other != null && other != descriptor2) {
// package might be local to descriptor1
@@ -690,33 +674,38 @@
}
}
- // uses S
- for (String service : descriptor1.uses()) {
- String pn = packageName(service);
- if (!packageToExporter.containsKey(pn)) {
- fail("Module %s does not read a module that exports %s",
- descriptor1.name(), pn);
- }
- }
+ // uses/provides checks not applicable to automatic modules
+ if (!descriptor1.isAutomatic()) {
- // provides S
- for (Map.Entry entry :
- descriptor1.provides().entrySet()) {
- String service = entry.getKey();
- ModuleDescriptor.Provides provides = entry.getValue();
-
- String pn = packageName(service);
- if (!packageToExporter.containsKey(pn)) {
- fail("Module %s does not read a module that exports %s",
- descriptor1.name(), pn);
+ // uses S
+ for (String service : descriptor1.uses()) {
+ String pn = packageName(service);
+ if (!packageToExporter.containsKey(pn)) {
+ fail("Module %s does not read a module that exports %s",
+ descriptor1.name(), pn);
+ }
}
- for (String provider : provides.providers()) {
- if (!packages.contains(packageName(provider))) {
- fail("Provider %s not in module %s",
- provider, descriptor1.name());
+ // provides S
+ for (Map.Entry entry :
+ descriptor1.provides().entrySet()) {
+ String service = entry.getKey();
+ ModuleDescriptor.Provides provides = entry.getValue();
+
+ String pn = packageName(service);
+ if (!packageToExporter.containsKey(pn)) {
+ fail("Module %s does not read a module that exports %s",
+ descriptor1.name(), pn);
+ }
+
+ for (String provider : provides.providers()) {
+ if (!packages.contains(packageName(provider))) {
+ fail("Provider %s not in module %s",
+ provider, descriptor1.name());
+ }
}
}
+
}
}
@@ -796,27 +785,18 @@
throw new ResolutionException(msg);
}
-
/**
- * Tracing support, limited to boot layer for now.
+ * Tracing support
*/
- private final static boolean TRACE
- = Boolean.getBoolean("jdk.launcher.traceResolver")
- && (Layer.boot() == null);
-
- private String op;
-
- private long trace_start(String op) {
- this.op = op;
- return System.currentTimeMillis();
+ private boolean isTracing() {
+ return traceOutput != null;
}
private void trace(String fmt, Object ... args) {
- if (TRACE) {
- System.out.print("[" + op + "] ");
- System.out.format(fmt, args);
- System.out.println();
+ if (traceOutput != null) {
+ traceOutput.format("[Resolver] " + fmt, args);
+ traceOutput.println();
}
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/module/SystemModuleFinder.java
--- a/jdk/src/java.base/share/classes/java/lang/module/SystemModuleFinder.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/module/SystemModuleFinder.java Thu May 05 19:11:09 2016 +0000
@@ -44,6 +44,7 @@
import jdk.internal.jimage.ImageLocation;
import jdk.internal.jimage.ImageReader;
import jdk.internal.jimage.ImageReaderFactory;
+import jdk.internal.module.ModuleHashes;
import jdk.internal.module.SystemModules;
import jdk.internal.module.ModulePatcher;
import jdk.internal.perf.PerfCounter;
@@ -101,13 +102,16 @@
for (int i = 0; i < n; i++) {
String mn = moduleNames[i];
ModuleDescriptor md;
+ String hash;
if (fastLoad) {
md = descriptors[i];
+ hash = SystemModules.MODULES_TO_HASH[i];
} else {
// fallback to read module-info.class
// if fast loading of ModuleDescriptors is disabled
ImageLocation location = imageReader.findLocation(mn, "module-info.class");
md = ModuleDescriptor.read(imageReader.getResourceBuffer(location));
+ hash = null;
}
if (!md.name().equals(mn))
throw new InternalError();
@@ -123,7 +127,8 @@
}
};
- ModuleReference mref = new ModuleReference(md, uri, readerSupplier);
+ ModuleReference mref =
+ new ModuleReference(md, uri, readerSupplier, hashSupplier(hash));
// may need a reference to a patched module if -Xpatch specified
mref = ModulePatcher.interposeIfNeeded(mref);
@@ -142,6 +147,18 @@
initTime.addElapsedTimeFrom(t0);
}
+ private static ModuleHashes.HashSupplier hashSupplier(String hash) {
+ if (hash == null)
+ return null;
+
+ return new ModuleHashes.HashSupplier() {
+ @Override
+ public String generate(String algorithm) {
+ return hash;
+ }
+ };
+ }
+
SystemModuleFinder() { }
@Override
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/reflect/Layer.java
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Layer.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Layer.java Thu May 05 19:11:09 2016 +0000
@@ -27,6 +27,7 @@
import java.lang.module.Configuration;
import java.lang.module.ModuleDescriptor;
+import java.lang.module.ModuleDescriptor.Provides;
import java.lang.module.ResolvedModule;
import java.util.Collections;
import java.util.HashMap;
@@ -41,6 +42,8 @@
import jdk.internal.loader.Loader;
import jdk.internal.loader.LoaderPool;
import jdk.internal.misc.SharedSecrets;
+import jdk.internal.module.ServicesCatalog;
+import jdk.internal.module.ServicesCatalog.ServiceProvider;
import sun.security.util.SecurityConstants;
@@ -549,4 +552,55 @@
public static Layer boot() {
return SharedSecrets.getJavaLangAccess().getBootLayer();
}
+
+
+ /**
+ * Returns the ServicesCatalog for this Layer, creating it if not
+ * already created.
+ */
+ ServicesCatalog getServicesCatalog() {
+ ServicesCatalog servicesCatalog = this.servicesCatalog;
+ if (servicesCatalog != null)
+ return servicesCatalog;
+
+ Map> map = new HashMap<>();
+ for (Module m : nameToModule.values()) {
+ ModuleDescriptor descriptor = m.getDescriptor();
+ for (Provides provides : descriptor.provides().values()) {
+ String service = provides.service();
+ Set providers
+ = map.computeIfAbsent(service, k -> new HashSet<>());
+ for (String pn : provides.providers()) {
+ providers.add(new ServiceProvider(m, pn));
+ }
+ }
+ }
+
+ ServicesCatalog catalog = new ServicesCatalog() {
+ @Override
+ public void register(Module module) {
+ throw new UnsupportedOperationException();
+ }
+ @Override
+ public Set findServices(String service) {
+ Set providers = map.get(service);
+ if (providers == null) {
+ return Collections.emptySet();
+ } else {
+ return Collections.unmodifiableSet(providers);
+ }
+ }
+ };
+
+ synchronized (this) {
+ servicesCatalog = this.servicesCatalog;
+ if (servicesCatalog == null) {
+ this.servicesCatalog = servicesCatalog = catalog;
+ }
+ }
+
+ return servicesCatalog;
+ }
+
+ private volatile ServicesCatalog servicesCatalog;
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/reflect/Module.java
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Module.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Module.java Thu May 05 19:11:09 2016 +0000
@@ -43,11 +43,7 @@
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
-import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.function.Function;
import java.util.stream.Stream;
@@ -142,9 +138,6 @@
this.name = null;
this.loader = loader;
this.descriptor = null;
-
- // unnamed modules are loose
- this.loose = true;
}
@@ -245,17 +238,27 @@
}
- // -- readability --
+ // --
+
+ // the special Module to mean reads or exported to "all unnamed modules"
+ private static final Module ALL_UNNAMED_MODULE = new Module(null);
- // true if this module reads all unnamed modules (a.k.a. loose module)
- private volatile boolean loose;
+ // special Module to mean exported to "everyone"
+ private static final Module EVERYONE_MODULE = new Module(null);
+
+ // exported to all modules
+ private static final Set EVERYONE = Collections.singleton(EVERYONE_MODULE);
+
+
+ // -- readability --
// the modules that this module permanently reads
// (will be final when the modules are defined in reverse topology order)
private volatile Set reads;
- // created lazily, additional modules that this module reflectively reads
- private volatile WeakSet transientReads;
+ // additional module (2nd key) that some module (1st key) reflectively reads
+ private static final WeakPairMap transientReads
+ = new WeakPairMap<>();
/**
@@ -284,22 +287,19 @@
// check if this module reads other
if (other.isNamed()) {
-
Set reads = this.reads; // volatile read
if (reads != null && reads.contains(other))
return true;
-
- } else {
-
- // loose modules read all unnamed modules
- if (this.loose)
- return true;
-
}
// check if this module reads the other module reflectively
- WeakSet tr = this.transientReads; // volatile read
- if (tr != null && tr.contains(other))
+ if (transientReads.containsKeyPair(this, other))
+ return true;
+
+ // if other is an unnamed module then check if this module reads
+ // all unnamed modules
+ if (!other.isNamed()
+ && transientReads.containsKeyPair(this, ALL_UNNAMED_MODULE))
return true;
return false;
@@ -346,8 +346,7 @@
}
/**
- * Makes the given {@code Module} readable to this module without
- * notifying the VM.
+ * Updates this module to read another module without notifying the VM.
*
* @apiNote This method is for VM white-box testing.
*/
@@ -361,40 +360,28 @@
* If {@code syncVM} is {@code true} then the VM is notified.
*/
private void implAddReads(Module other, boolean syncVM) {
+ Objects.requireNonNull(other);
// nothing to do
if (other == this || !this.isNamed())
return;
- // if the other is null then change this module to be loose.
- if (other == null) {
- if (syncVM)
- addReads0(this, null);
- this.loose = true;
- return;
- }
-
// check if we already read this module
Set reads = this.reads;
if (reads != null && reads.contains(other))
return;
// update VM first, just in case it fails
- if (syncVM)
- addReads0(this, other);
+ if (syncVM) {
+ if (other == ALL_UNNAMED_MODULE) {
+ addReads0(this, null);
+ } else {
+ addReads0(this, other);
+ }
+ }
// add reflective read
- WeakSet tr = this.transientReads;
- if (tr == null) {
- synchronized (this) {
- tr = this.transientReads;
- if (tr == null) {
- tr = new WeakSet<>();
- this.transientReads = tr;
- }
- }
- }
- tr.add(other);
+ transientReads.putIfAbsent(this, other, Boolean.TRUE);
}
@@ -404,15 +391,10 @@
// (will be final when the modules are defined in reverse topology order)
private volatile Map> exports;
- // created lazily, additional exports added at run-time
- private volatile Map> transientExports;
-
- // the special Module to mean exported to all modules
- private static final Module EVERYONE_MODULE = new Module(null);
- private static final Set EVERYONE = Collections.singleton(EVERYONE_MODULE);
-
- // the special Module to mean exported to all unnamed modules
- private static final Module ALL_UNNAMED_MODULE = new Module(null);
+ // additional exports added at run-time
+ // this module (1st key), other module (2nd key), exported packages (value)
+ private static final WeakPairMap>
+ transientExports = new WeakPairMap<>();
/**
@@ -489,23 +471,9 @@
if (exports != null) {
Set targets = exports.get(pn);
- if (targets != null) {
-
- // exported to all modules
- if (targets.contains(EVERYONE_MODULE))
- return true;
-
- if (other != EVERYONE_MODULE) {
- // exported to other
- if (targets.contains(other))
- return true;
-
- // other is an unnamed module && exported to all unnamed
- if (!other.isNamed() && targets.contains(ALL_UNNAMED_MODULE))
- return true;
- }
-
- }
+ if ((targets != null)
+ && (targets.contains(other) || targets.contains(EVERYONE_MODULE)))
+ return true;
}
return false;
}
@@ -515,29 +483,27 @@
* package package to the given module.
*/
private boolean isExportedReflectively(String pn, Module other) {
- Map> te = this.transientExports;
- if (te != null) {
- WeakSet targets = te.get(pn);
+ // exported to all modules
+ Map exports = transientExports.get(this, EVERYONE_MODULE);
+ if (exports != null && exports.containsKey(pn))
+ return true;
- if (targets != null) {
-
- // exported to all modules
- if (targets.contains(EVERYONE_MODULE))
- return true;
+ if (other != EVERYONE_MODULE) {
- if (other != EVERYONE_MODULE) {
+ // exported to other
+ exports = transientExports.get(this, other);
+ if (exports != null && exports.containsKey(pn))
+ return true;
- // exported to other
- if (targets.contains(other))
- return true;
-
- // other is an unnamed module && exported to all unnamed
- if (!other.isNamed() && targets.contains(ALL_UNNAMED_MODULE))
- return true;
- }
+ // other is an unnamed module && exported to all unnamed
+ if (!other.isNamed()) {
+ exports = transientExports.get(this, ALL_UNNAMED_MODULE);
+ if (exports != null && exports.containsKey(pn))
+ return true;
}
}
+
return false;
}
@@ -638,34 +604,19 @@
}
}
- // create transientExports if needed
- Map> te = this.transientExports; // read
- if (te == null) {
- synchronized (this) {
- te = this.transientExports;
- if (te == null) {
- te = new ConcurrentHashMap<>();
- this.transientExports = te; // volatile write
- }
- }
- }
-
// add package name to transientExports if absent
- WeakSet s = te.get(pn);
- if (s == null) {
- s = new WeakSet<>();
- WeakSet prev = te.putIfAbsent(pn, s);
- if (prev != null)
- s = prev;
- }
- s.add(other);
+ transientExports
+ .computeIfAbsent(this, other,
+ (_this, _other) -> new ConcurrentHashMap<>())
+ .putIfAbsent(pn, Boolean.TRUE);
}
// -- services --
- // created lazily, additional service types that this module uses
- private volatile WeakSet> transientUses;
+ // additional service type (2nd key) that some module (1st key) uses
+ private static final WeakPairMap, Boolean> transientUses
+ = new WeakPairMap<>();
/**
* If the caller's module is this module then update this module to add a
@@ -702,17 +653,7 @@
}
if (!canUse(st)) {
- WeakSet> uses = this.transientUses;
- if (uses == null) {
- synchronized (this) {
- uses = this.transientUses;
- if (uses == null) {
- uses = new WeakSet<>();
- this.transientUses = uses;
- }
- }
- }
- uses.add(st);
+ transientUses.putIfAbsent(this, st, Boolean.TRUE);
}
}
@@ -746,11 +687,7 @@
return true;
// uses added via addUses
- WeakSet> uses = this.transientUses;
- if (uses != null && uses.contains(st))
- return true;
-
- return false;
+ return transientUses.containsKeyPair(this, st);
}
@@ -885,7 +822,7 @@
// -- creating Module objects --
/**
- * Find the runtime Module corresponding to the given ReadDependence
+ * Find the runtime Module corresponding to the given ResolvedModule
* in the given parent Layer (or its parents).
*/
private static Module find(ResolvedModule resolvedModule, Layer layer) {
@@ -969,7 +906,7 @@
// automatic modules reads all unnamed modules
if (descriptor.isAutomatic()) {
- m.implAddReads(null, true);
+ m.implAddReads(ALL_UNNAMED_MODULE, true);
}
// exports
@@ -1097,7 +1034,7 @@
* the representation is the string {@code "module"}, followed by a space,
* and then the module name. For an unnamed module, the representation is
* the string {@code "unnamed module"}, followed by a space, and then an
- * implementation specific identifier for the unnamed module.
+ * implementation specific string that identifies the unnamed module.
*
* @return The string representation of this module
*/
@@ -1112,46 +1049,6 @@
}
- // -- supporting classes --
-
-
- /**
- * A "not-a-Set" set of weakly referenced objects that supports concurrent
- * access.
- */
- private static class WeakSet {
- private final ReadWriteLock lock = new ReentrantReadWriteLock();
- private final Lock readLock = lock.readLock();
- private final Lock writeLock = lock.writeLock();
-
- private final WeakHashMap map = new WeakHashMap<>();
-
- /**
- * Adds the specified element to the set.
- */
- void add(E e) {
- writeLock.lock();
- try {
- map.put(e, Boolean.TRUE);
- } finally {
- writeLock.unlock();
- }
- }
-
- /**
- * Returns {@code true} if this set contains the specified element.
- */
- boolean contains(E e) {
- readLock.lock();
- try {
- return map.containsKey(e);
- } finally {
- readLock.unlock();
- }
- }
- }
-
-
// -- native methods --
// JVM_DefineModule
@@ -1196,8 +1093,12 @@
m1.implAddReads(m2, true);
}
@Override
+ public void addReadsAllUnnamed(Module m) {
+ m.implAddReads(Module.ALL_UNNAMED_MODULE);
+ }
+ @Override
public void addExports(Module m, String pn, Module other) {
- m.implAddExports(pn, Objects.requireNonNull(other), true);
+ m.implAddExports(pn, other, true);
}
@Override
public void addExportsToAll(Module m, String pn) {
@@ -1211,6 +1112,10 @@
public void addPackage(Module m, String pn) {
m.implAddPackage(pn, true);
}
+ @Override
+ public ServicesCatalog getServicesCatalog(Layer layer) {
+ return layer.getServicesCatalog();
+ }
});
}
}
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/reflect/Proxy.java
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Proxy.java Thu May 05 17:35:48 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Proxy.java Thu May 05 19:11:09 2016 +0000
@@ -582,7 +582,7 @@
}
private static final String DEBUG =
- GetPropertyAction.getProperty("jdk.proxy.debug", "");
+ GetPropertyAction.privilegedGetProperty("jdk.proxy.debug", "");
private static boolean isDebug() {
return !DEBUG.isEmpty();
diff -r 5c95f3324916 -r 41844efbbcce jdk/src/java.base/share/classes/java/lang/reflect/WeakPairMap.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/WeakPairMap.java Thu May 05 19:11:09 2016 +0000
@@ -0,0 +1,354 @@
+/*
+ * Copyright (c) 2016, 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+package java.lang.reflect;
+
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
+import java.util.Collection;
+import java.util.Objects;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.BiFunction;
+
+/**
+ * A WeakHashMap-like data structure that uses a pair of weakly-referenced keys
+ * with identity equality semantics to associate a strongly-referenced value.
+ * Unlike WeakHashMap, this data structure is thread-safe.
+ *
+ * @param the type of 1st key in key pair
+ * @param the type of 2nd key in key pair
+ * @param the type of value
+ * @author Peter Levart
+ */
+final class WeakPairMap {
+
+ private final ConcurrentHashMap, V> map = new ConcurrentHashMap<>();
+ private final ReferenceQueue