Categories:
Audio (13)
Biotech (29)
Bytecode (36)
Database (77)
Framework (7)
Game (7)
General (507)
Graphics (53)
I/O (35)
IDE (2)
JAR Tools (101)
JavaBeans (21)
JDBC (121)
JDK (426)
JSP (20)
Logging (108)
Mail (58)
Messaging (8)
Network (84)
PDF (97)
Report (7)
Scripting (84)
Security (32)
Server (121)
Servlet (26)
SOAP (24)
Testing (54)
Web (15)
XML (309)
Collections:
Other Resources:
JDK 11 jdk.scripting.nashorn.jmod - Scripting Nashorn Module
JDK 11 jdk.scripting.nashorn.jmod is the JMOD file for JDK 11 Scripting Nashorn module.
JDK 11 Scripting Nashorn module compiled class files are stored in \fyicenter\jdk-11.0.1\jmods\jdk.scripting.nashorn.jmod.
JDK 11 Scripting Nashorn module compiled class files are also linked and stored in the \fyicenter\jdk-11.0.1\lib\modules JImage file.
JDK 11 Scripting Nashorn module source code files are stored in \fyicenter\jdk-11.0.1\lib\src.zip\jdk.scripting.nashorn.
You can click and view the content of each source code file in the list below.
✍: FYIcenter
⏎ jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java
/* * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package jdk.nashorn.internal.runtime.linker; import static jdk.nashorn.internal.lookup.Lookup.MH; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.util.function.Supplier; import jdk.dynalink.linker.ConversionComparator; import jdk.dynalink.linker.GuardedInvocation; import jdk.dynalink.linker.GuardingTypeConverterFactory; import jdk.dynalink.linker.LinkRequest; import jdk.dynalink.linker.LinkerServices; import jdk.dynalink.linker.TypeBasedGuardingDynamicLinker; import jdk.dynalink.linker.support.TypeUtilities; import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.ConsString; import jdk.nashorn.internal.runtime.JSType; import jdk.nashorn.internal.runtime.ScriptRuntime; import jdk.nashorn.internal.runtime.Symbol; /** * Internal linker for String, Boolean, and Number objects, only ever used by Nashorn engine and not exposed to other * engines. It is used for treatment of strings, boolean, and numbers as JavaScript primitives. Also provides ECMAScript * primitive type conversions for these types when linking to Java methods. */ final class NashornPrimitiveLinker implements TypeBasedGuardingDynamicLinker, GuardingTypeConverterFactory, ConversionComparator { private static final GuardedInvocation VOID_TO_OBJECT = new GuardedInvocation(MethodHandles.constant(Object.class, ScriptRuntime.UNDEFINED)); @Override public boolean canLinkType(final Class<?> type) { return canLinkTypeStatic(type); } private static boolean canLinkTypeStatic(final Class<?> type) { return type == String.class || type == Boolean.class || type == ConsString.class || type == Integer.class || type == Double.class || type == Float.class || type == Short.class || type == Byte.class || type == Symbol.class; } @Override public GuardedInvocation getGuardedInvocation(final LinkRequest request, final LinkerServices linkerServices) throws Exception { final Object self = request.getReceiver(); return Bootstrap.asTypeSafeReturn(Global.primitiveLookup(request, self), linkerServices, request.getCallSiteDescriptor()); } /** * This implementation of type converter factory will pretty much allow implicit conversions of anything to anything * else that's allowed among JavaScript primitive types (string to number, boolean to string, etc.) * @param sourceType the type to convert from * @param targetType the type to convert to * @return a conditional converter from source to target type */ @Override public GuardedInvocation convertToType(final Class<?> sourceType, final Class<?> targetType, final Supplier<MethodHandles.Lookup> lookupSupplier) { final MethodHandle mh = JavaArgumentConverters.getConverter(targetType); if (mh == null) { if(targetType == Object.class && sourceType == void.class) { return VOID_TO_OBJECT; } return null; } return new GuardedInvocation(mh, canLinkTypeStatic(sourceType) ? null : GUARD_PRIMITIVE).asType(mh.type().changeParameterType(0, sourceType)); } /** * Implements the somewhat involved prioritization of JavaScript primitive types conversions. Instead of explaining * it here in prose, just follow the source code comments. * @param sourceType the source type to convert from * @param targetType1 one candidate target type * @param targetType2 another candidate target type * @return one of {@link jdk.dynalink.linker.ConversionComparator.Comparison} values signifying which * target type should be favored for conversion. */ @Override public Comparison compareConversion(final Class<?> sourceType, final Class<?> targetType1, final Class<?> targetType2) { final Class<?> wrapper1 = getWrapperTypeOrSelf(targetType1); if (sourceType == wrapper1) { // Source type exactly matches target 1 return Comparison.TYPE_1_BETTER; } final Class<?> wrapper2 = getWrapperTypeOrSelf(targetType2); if (sourceType == wrapper2) { // Source type exactly matches target 2 return Comparison.TYPE_2_BETTER; } if (Number.class.isAssignableFrom(sourceType)) { // If exactly one of the targets is a number, pick it. if (Number.class.isAssignableFrom(wrapper1)) { if (!Number.class.isAssignableFrom(wrapper2)) { return Comparison.TYPE_1_BETTER; } } else if (Number.class.isAssignableFrom(wrapper2)) { return Comparison.TYPE_2_BETTER; } // If exactly one of the targets is a character, pick it. Numbers can be reasonably converted to chars using // the UTF-16 values. if (Character.class == wrapper1) { return Comparison.TYPE_1_BETTER; } else if (Character.class == wrapper2) { return Comparison.TYPE_2_BETTER; } // For all other cases, we fall through to the next if statement - not that we repeat the condition in it // too so if we entered this branch, we'll enter the below if statement too. } if (sourceType == String.class || sourceType == Boolean.class || Number.class.isAssignableFrom(sourceType)) { // Treat wrappers as primitives. final Class<?> primitiveType1 = getPrimitiveTypeOrSelf(targetType1); final Class<?> primitiveType2 = getPrimitiveTypeOrSelf(targetType2); // Basically, choose the widest possible primitive type. (First "if" returning TYPE_2_BETTER is correct; // when faced with a choice between double and int, choose double). if (TypeUtilities.isMethodInvocationConvertible(primitiveType1, primitiveType2)) { return Comparison.TYPE_2_BETTER; } else if (TypeUtilities.isMethodInvocationConvertible(primitiveType2, primitiveType1)) { return Comparison.TYPE_1_BETTER; } // Ok, at this point we're out of possible number conversions, so try strings. A String can represent any // value without loss, so if one of the potential targets is string, go for it. if (targetType1 == String.class) { return Comparison.TYPE_1_BETTER; } if (targetType2 == String.class) { return Comparison.TYPE_2_BETTER; } } return Comparison.INDETERMINATE; } private static Class<?> getPrimitiveTypeOrSelf(final Class<?> type) { final Class<?> primitive = TypeUtilities.getPrimitiveType(type); return primitive == null ? type : primitive; } private static Class<?> getWrapperTypeOrSelf(final Class<?> type) { final Class<?> wrapper = TypeUtilities.getWrapperType(type); return wrapper == null ? type : wrapper; } @SuppressWarnings("unused") private static boolean isJavaScriptPrimitive(final Object o) { return JSType.isString(o) || o instanceof Boolean || JSType.isNumber(o) || o == null || o instanceof Symbol; } private static final MethodHandle GUARD_PRIMITIVE = findOwnMH("isJavaScriptPrimitive", boolean.class, Object.class); private static MethodHandle findOwnMH(final String name, final Class<?> rtype, final Class<?>... types) { return MH.findStatic(MethodHandles.lookup(), NashornPrimitiveLinker.class, name, MH.type(rtype, types)); } }
⏎ jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java
Or download all of them as a single archive file:
File name: jdk.scripting.nashorn-11.0.1-src.zip File size: 1390965 bytes Release date: 2018-11-04 Download
⇒ JDK 11 jdk.scripting.nashorn.shell.jmod - Scripting Nashorn Shell Module
2020-04-25, 83530👍, 0💬
Popular Posts:
The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms, it was develo...
A stream buffer is a stream-based representation of an XML infoset in Java. Stream buffers are desig...
JasperReports, the world's most popular open source business intelligence and reporting engine and J...
JDK 11 java.xml.crypto.jmod is the JMOD file for JDK 11 XML (eXtensible Markup Language) Crypto modu...
Jackson is "the Java JSON library" or "the best JSON parser for Java". Or simply as "JSON for Java"....