--- a/.hgtags Thu Feb 11 13:58:43 2016 -0800
+++ b/.hgtags Mon Feb 15 09:44:42 2016 -0800
@@ -347,3 +347,4 @@
2dc4c11fe48831854916d53c3913bdb7d49023ea jdk-9+102
4a652e4ca9523422149958673033e0ac740d5e1e jdk-9+103
086c682bd8c5f195c324f61e2c61fbcd0226d63b jdk-9+104
+db483b34fa7148d257a429acddbde9c13687dcae jdk-9+105
--- a/.hgtags-top-repo Thu Feb 11 13:58:43 2016 -0800
+++ b/.hgtags-top-repo Mon Feb 15 09:44:42 2016 -0800
@@ -347,3 +347,4 @@
6406ecf5d39482623225bb1b3098c2cac6f7d450 jdk-9+102
47d6462e514b2097663305a57d9c844c15d5b609 jdk-9+103
9a38f8b4ba220708db198d08d82fd2144a64777d jdk-9+104
+be58b02c11f90b88c67e4d0e2cb5e4cf2d9b3c57 jdk-9+105
--- a/common/autoconf/basics.m4 Thu Feb 11 13:58:43 2016 -0800
+++ b/common/autoconf/basics.m4 Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -36,11 +36,11 @@
# "ARG_FOO".
#
# The generated function can be called like this:
-# MYFUNC(FOO: [foo-val], BAR:
-# [
+# MYFUNC(FOO: [foo-val],
+# BAR: [
# $ECHO hello world
# ])
-#
+# Note that the argument value must start on the same line as the argument name.
#
# Argument 1: Name of the function to define
# Argument 2: List of legal named arguments, with a * prefix for required arguments
--- a/common/autoconf/build-performance.m4 Thu Feb 11 13:58:43 2016 -0800
+++ b/common/autoconf/build-performance.m4 Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -72,7 +72,7 @@
FOUND_MEM=yes
elif test -x /usr/sbin/prtconf; then
# Looks like a Solaris or AIX system
- MEMORY_SIZE=`/usr/sbin/prtconf | grep "^Memory [[Ss]]ize" | awk '{ print [$]3 }'`
+ MEMORY_SIZE=`/usr/sbin/prtconf 2> /dev/null | grep "^Memory [[Ss]]ize" | awk '{ print [$]3 }'`
FOUND_MEM=yes
elif test -x /usr/sbin/sysctl; then
# Looks like a MacOSX system
@@ -260,8 +260,8 @@
#
AC_DEFUN([BPERF_RUN_ICECC_CREATE_ENV],
[
- cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
- && ${ICECC_CREATE_ENV} $1 > $2 2>&1
+ ( cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
+ && ${ICECC_CREATE_ENV} $1 > $2 2>&1 )
if test "$?" != "0"; then
AC_MSG_NOTICE([icecc-create-env output:])
cat $2
--- a/common/autoconf/compare.sh.in Thu Feb 11 13:58:43 2016 -0800
+++ b/common/autoconf/compare.sh.in Mon Feb 15 09:44:42 2016 -0800
@@ -33,6 +33,7 @@
export OPENJDK_TARGET_OS="@OPENJDK_TARGET_OS@"
export OPENJDK_TARGET_CPU="@OPENJDK_TARGET_CPU@"
+export OPENJDK_TARGET_CPU_LIBDIR="@OPENJDK_TARGET_CPU_LIBDIR@"
export AWK="@AWK@"
export BASH="@BASH@"
--- a/common/autoconf/configure Thu Feb 11 13:58:43 2016 -0800
+++ b/common/autoconf/configure Mon Feb 15 09:44:42 2016 -0800
@@ -1,6 +1,6 @@
#!/bin/bash
#
-# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 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
@@ -283,8 +283,9 @@
EOT
- # Print list of toolchains. This must be done by the autoconf script.
- ( CONFIGURE_PRINT_TOOLCHAIN_LIST=true . $conf_script_to_run PRINTF=printf )
+ # Print additional help, e.g. a list of toolchains.
+ # This must be done by the autoconf script.
+ ( CONFIGURE_PRINT_ADDITIONAL_HELP=true . $conf_script_to_run PRINTF=printf )
cat <<EOT
--- a/common/autoconf/configure.ac Thu Feb 11 13:58:43 2016 -0800
+++ b/common/autoconf/configure.ac Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -189,8 +189,6 @@
FLAGS_SETUP_INIT_FLAGS
-# FIXME: Currently we must test this after toolchain but before flags. Fix!
-
# Now we can test some aspects on the target using configure macros.
PLATFORM_SETUP_OPENJDK_TARGET_BITS
PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS
--- a/common/autoconf/flags.m4 Thu Feb 11 13:58:43 2016 -0800
+++ b/common/autoconf/flags.m4 Mon Feb 15 09:44:42 2016 -0800
@@ -206,7 +206,7 @@
# On Windows, we need to set RC flags.
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
RC_FLAGS="-nologo -l0x409"
- if test "x$VARIANT" = xOPT; then
+ if test "x$DEBUG_LEVEL" = xrelease; then
RC_FLAGS="$RC_FLAGS -DNDEBUG"
fi
@@ -254,7 +254,7 @@
SET_EXECUTABLE_ORIGIN='-Wl,-rpath,@loader_path/.'
SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN"
SET_SHARED_LIBRARY_NAME='-Wl,-install_name,@rpath/[$]1'
- SET_SHARED_LIBRARY_MAPFILE=''
+ SET_SHARED_LIBRARY_MAPFILE='-Wl,-exported_symbols_list,[$]1'
else
# Default works for linux, might work on other platforms as well.
SHARED_LIBRARY_FLAGS='-shared'
@@ -274,7 +274,7 @@
SET_EXECUTABLE_ORIGIN='-Wl,-rpath,@loader_path/.'
SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN"
SET_SHARED_LIBRARY_NAME='-Wl,-install_name,@rpath/[$]1'
- SET_SHARED_LIBRARY_MAPFILE=''
+ SET_SHARED_LIBRARY_MAPFILE='-Wl,-exported_symbols_list,[$]1'
else
# Default works for linux, might work on other platforms as well.
PICFLAG='-fPIC'
@@ -310,7 +310,7 @@
SET_EXECUTABLE_ORIGIN=''
SET_SHARED_LIBRARY_ORIGIN=''
SET_SHARED_LIBRARY_NAME=''
- SET_SHARED_LIBRARY_MAPFILE=''
+ SET_SHARED_LIBRARY_MAPFILE='-def:[$]1'
fi
AC_SUBST(C_FLAG_REORDER)
@@ -423,6 +423,10 @@
# no adjustment
;;
slowdebug )
+ # FIXME: By adding this to C(XX)FLAGS_DEBUG_OPTIONS it
+ # get's added conditionally on whether we produce debug symbols or not.
+ # This is most likely not really correct.
+
# Add runtime stack smashing and undefined behavior checks.
# Not all versions of gcc support -fstack-protector
STACK_PROTECTOR_CFLAG="-fstack-protector-all"
@@ -463,7 +467,7 @@
CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra"
CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
- C_O_FLAG_DEBUG=""
+ CXX_O_FLAG_DEBUG=""
CXX_O_FLAG_NONE=""
fi
else
@@ -646,8 +650,8 @@
# avoid bundling msvcpNNN.dll. Doesn't work with newer versions of visual
# studio.
if test "x$TOOLCHAIN_VERSION" = "x2010"; then
- COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \
- -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB"
+ STATIC_CPPLIB_FLAGS="-D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB"
+ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK $STATIC_CPPLIB_FLAGS"
fi
fi
@@ -715,9 +719,6 @@
# Set some additional per-OS defines.
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
- elif test "x$OPENJDK_TARGET_OS" = xaix; then
- # FIXME: PPC64 should not be here.
- COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DPPC64"
elif test "x$OPENJDK_TARGET_OS" = xbsd; then
COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE"
fi
@@ -775,36 +776,34 @@
# Setup LDFLAGS et al.
#
- # Now this is odd. The JDK native libraries have to link against libjvm.so
- # On 32-bit machines there is normally two distinct libjvm.so:s, client and server.
- # Which should we link to? Are we lucky enough that the binary api to the libjvm.so library
- # is identical for client and server? Yes. Which is picked at runtime (client or server)?
- # Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following
- # libraries will link to whatever is in memory. Yuck.
- #
- # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh.
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
- LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no"
+ LDFLAGS_MICROSOFT="-nologo -opt:ref"
+ LDFLAGS_JDK="$LDFLAGS_JDK $LDFLAGS_MICROSOFT -incremental:no"
if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then
- LDFLAGS_JDK="$LDFLAGS_JDK -safeseh"
+ LDFLAGS_SAFESH="-safeseh"
+ LDFLAGS_JDK="$LDFLAGS_JDK $LDFLAGS_SAFESH"
fi
# TODO: make -debug optional "--disable-full-debug-symbols"
- LDFLAGS_JDK="$LDFLAGS_JDK -debug"
+ LDFLAGS_MICROSOFT_DEBUG="-debug"
+ LDFLAGS_JDK="$LDFLAGS_JDK $LDFLAGS_MICROSOFT_DEBUG"
elif test "x$TOOLCHAIN_TYPE" = xgcc; then
# If this is a --hash-style=gnu system, use --hash-style=both, why?
# We have previously set HAS_GNU_HASH if this is the case
if test -n "$HAS_GNU_HASH"; then
- LDFLAGS_JDK="${LDFLAGS_JDK} -Wl,--hash-style=both"
+ LDFLAGS_HASH_STYLE="-Wl,--hash-style=both"
+ LDFLAGS_JDK="${LDFLAGS_JDK} $LDFLAGS_HASH_STYLE"
fi
if test "x$OPENJDK_TARGET_OS" = xlinux; then
# And since we now know that the linker is gnu, then add -z defs, to forbid
# undefined symbols in object files.
- LDFLAGS_JDK="${LDFLAGS_JDK} -Wl,-z,defs"
+ LDFLAGS_NO_UNDEF_SYM="-Wl,-z,defs"
+ LDFLAGS_JDK="${LDFLAGS_JDK} $LDFLAGS_NO_UNDEF_SYM"
case $DEBUG_LEVEL in
release )
# tell linker to optimize libraries.
# Should this be supplied to the OSS linker as well?
- LDFLAGS_JDK="${LDFLAGS_JDK} -Wl,-O1"
+ LDFLAGS_DEBUGLEVEL_release="-Wl,-O1"
+ LDFLAGS_JDK="${LDFLAGS_JDK} $LDFLAGS_DEBUGLEVEL_release"
;;
slowdebug )
if test "x$HAS_LINKER_NOW" = "xtrue"; then
@@ -831,10 +830,13 @@
esac
fi
elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
- LDFLAGS_JDK="$LDFLAGS_JDK -Wl,-z,defs -xildoff -ztext"
- LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib"
+ LDFLAGS_SOLSTUDIO="-Wl,-z,defs"
+ LDFLAGS_JDK="$LDFLAGS_JDK $LDFLAGS_SOLSTUDIO -xildoff -ztext"
+ LDFLAGS_CXX_SOLSTUDIO="-norunpath"
+ LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK $LDFLAGS_CXX_SOLSTUDIO -xnolib"
elif test "x$TOOLCHAIN_TYPE" = xxlc; then
- LDFLAGS_JDK="${LDFLAGS_JDK} -brtl -bnolibpath -bexpall -bernotok"
+ LDFLAGS_XLC="-brtl -bnolibpath -bexpall -bernotok"
+ LDFLAGS_JDK="${LDFLAGS_JDK} $LDFLAGS_XLC"
fi
# Customize LDFLAGS for executables
@@ -1048,6 +1050,10 @@
DISABLE_WARNING_PREFIX="-Wno-"
CFLAGS_WARNINGS_ARE_ERRORS="-Werror"
;;
+ xlc)
+ DISABLE_WARNING_PREFIX="-qsuppress="
+ CFLAGS_WARNINGS_ARE_ERRORS="-qhalt=w"
+ ;;
esac
AC_SUBST(DISABLE_WARNING_PREFIX)
AC_SUBST(CFLAGS_WARNINGS_ARE_ERRORS)
--- a/common/autoconf/generated-configure.sh Thu Feb 11 13:58:43 2016 -0800
+++ b/common/autoconf/generated-configure.sh Mon Feb 15 09:44:42 2016 -0800
@@ -784,6 +784,8 @@
LD
CXXCPP
CPP
+CXX_VERSION_NUMBER
+CC_VERSION_NUMBER
ac_ct_CXX
CXXFLAGS
CXX
@@ -860,6 +862,7 @@
TEST_IN_BUILD
COPYRIGHT_YEAR
COMPRESS_JARS
+INCLUDE_SA
UNLIMITED_CRYPTO
CACERTS_FILE
BUILD_HEADLESS
@@ -906,7 +909,6 @@
VARIANT
DEBUG_LEVEL
MACOSX_UNIVERSAL
-INCLUDE_SA
JVM_VARIANT_CORE
JVM_VARIANT_ZEROSHARK
JVM_VARIANT_ZERO
@@ -1926,7 +1928,7 @@
--with-jvm-variants JVM variants (separated by commas) to build (server,
client, minimal1, zero, zeroshark, core) [server]
--with-debug-level set the debug level (release, fastdebug, slowdebug,
- optimized (HotSpot build only)) [release]
+ optimized) [release]
--with-devkit use this devkit for compilers, tools and resources
--with-sys-root alias for --with-sysroot for backwards compatability
--with-sysroot use this directory as sysroot
@@ -2008,7 +2010,7 @@
--with-jtreg Regression Test Harness [probed]
--with-native-debug-symbols
set the native debug symbol configuration (none,
- internal, external, zipped) [zipped]
+ internal, external, zipped) [varying]
--with-stdc++lib=<static>,<dynamic>,<default>
force linking of the C++ runtime on Linux to either
static or dynamic, default is static with dynamic as
@@ -3424,7 +3426,7 @@
# Include these first...
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -3461,11 +3463,11 @@
# "ARG_FOO".
#
# The generated function can be called like this:
-# MYFUNC(FOO: [foo-val], BAR:
-# [
+# MYFUNC(FOO: [foo-val],
+# BAR: [
# $ECHO hello world
# ])
-#
+# Note that the argument value must start on the same line as the argument name.
#
# Argument 1: Name of the function to define
# Argument 2: List of legal named arguments, with a * prefix for required arguments
@@ -3774,7 +3776,7 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -3927,7 +3929,7 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -4059,7 +4061,7 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -4117,7 +4119,7 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -4625,7 +4627,7 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -4676,6 +4678,28 @@
TOOLCHAIN_DESCRIPTION_solstudio="Oracle Solaris Studio"
TOOLCHAIN_DESCRIPTION_xlc="IBM XL C/C++"
+# Minimum supported versions, empty means unspecified
+TOOLCHAIN_MINIMUM_VERSION_clang="3.2"
+TOOLCHAIN_MINIMUM_VERSION_gcc="4.3"
+TOOLCHAIN_MINIMUM_VERSION_microsoft=""
+TOOLCHAIN_MINIMUM_VERSION_solstudio="5.12"
+TOOLCHAIN_MINIMUM_VERSION_xlc=""
+
+# Prepare the system so that TOOLCHAIN_CHECK_COMPILER_VERSION can be called.
+# Must have CC_VERSION_NUMBER and CXX_VERSION_NUMBER.
+
+
+# Check if the configured compiler (C and C++) is of a specific version or
+# newer. TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS must have been called before.
+#
+# Arguments:
+# VERSION: The version string to check against the found version
+# IF_AT_LEAST: block to run if the compiler is at least this version (>=)
+# IF_OLDER_THAN: block to run if the compiler is older than this version (<)
+
+
+
+
# Setup a number of variables describing how native output files are
# named on this platform/toolchain.
@@ -4836,7 +4860,7 @@
#CUSTOM_AUTOCONF_INCLUDE
# Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1454926898
+DATE_WHEN_GENERATED=1455271513
###############################################################################
#
@@ -4850,7 +4874,9 @@
# If we are requested to print additional help, do that and then exit.
# This must be the very first call.
- if test "x$CONFIGURE_PRINT_TOOLCHAIN_LIST" != x; then
+ if test "x$CONFIGURE_PRINT_ADDITIONAL_HELP" != x; then
+
+ # Print available toolchains
$PRINTF "The following toolchains are available as arguments to --with-toolchain-type.\n"
$PRINTF "Which are valid to use depends on the build platform.\n"
for toolchain in $VALID_TOOLCHAINS_all; do
@@ -15826,21 +15852,6 @@
- INCLUDE_SA=true
- if test "x$JVM_VARIANT_ZERO" = xtrue ; then
- INCLUDE_SA=false
- fi
- if test "x$JVM_VARIANT_ZEROSHARK" = xtrue ; then
- INCLUDE_SA=false
- fi
- if test "x$OPENJDK_TARGET_OS" = xaix ; then
- INCLUDE_SA=false
- fi
- if test "x$OPENJDK_TARGET_CPU" = xaarch64; then
- INCLUDE_SA=false
- fi
-
-
if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
MACOSX_UNIVERSAL="true"
fi
@@ -15880,7 +15891,7 @@
test "x$DEBUG_LEVEL" != xoptimized && \
test "x$DEBUG_LEVEL" != xfastdebug && \
test "x$DEBUG_LEVEL" != xslowdebug; then
- as_fn_error $? "Allowed debug levels are: release, fastdebug and slowdebug" "$LINENO" 5
+ as_fn_error $? "Allowed debug levels are: release, fastdebug, slowdebug and optimized" "$LINENO" 5
fi
@@ -23244,6 +23255,22 @@
fi
+ # Should we build the serviceability agent (SA)?
+ INCLUDE_SA=true
+ if test "x$JVM_VARIANT_ZERO" = xtrue ; then
+ INCLUDE_SA=false
+ fi
+ if test "x$JVM_VARIANT_ZEROSHARK" = xtrue ; then
+ INCLUDE_SA=false
+ fi
+ if test "x$OPENJDK_TARGET_OS" = xaix ; then
+ INCLUDE_SA=false
+ fi
+ if test "x$OPENJDK_TARGET_CPU" = xaarch64; then
+ INCLUDE_SA=false
+ fi
+
+
# Compress jars
COMPRESS_JARS=false
@@ -29850,6 +29877,8 @@
# Use indirect variable referencing
toolchain_var_name=TOOLCHAIN_DESCRIPTION_$TOOLCHAIN_TYPE
TOOLCHAIN_DESCRIPTION=${!toolchain_var_name}
+ toolchain_var_name=TOOLCHAIN_MINIMUM_VERSION_$TOOLCHAIN_TYPE
+ TOOLCHAIN_MINIMUM_VERSION=${!toolchain_var_name}
toolchain_var_name=TOOLCHAIN_CC_BINARY_$TOOLCHAIN_TYPE
TOOLCHAIN_CC_BINARY=${!toolchain_var_name}
toolchain_var_name=TOOLCHAIN_CXX_BINARY_$TOOLCHAIN_TYPE
@@ -31483,8 +31512,14 @@
export INCLUDE="$VS_INCLUDE"
export LIB="$VS_LIB"
else
- # Currently we do not define this for other toolchains. This might change as the need arise.
- TOOLCHAIN_VERSION=
+ if test "x$XCODE_VERSION_OUTPUT" != x; then
+ # For Xcode, we set the Xcode version as TOOLCHAIN_VERSION
+ TOOLCHAIN_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | $CUT -f 2 -d ' '`
+ TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode"
+ else
+ # Currently we do not define this for other toolchains. This might change as the need arise.
+ TOOLCHAIN_VERSION=
+ fi
fi
@@ -32191,7 +32226,7 @@
# Collapse compiler output into a single line
COMPILER_VERSION_STRING=`$ECHO $COMPILER_VERSION_OUTPUT`
COMPILER_VERSION_NUMBER=`$ECHO $COMPILER_VERSION_OUTPUT | \
- $SED -e 's/^.*clang version \([1-9][0-9.]*\).*$/\1/'`
+ $SED -e 's/^.* version \([1-9][0-9.]*\).*$/\1/'`
else
as_fn_error $? "Unknown toolchain type $TOOLCHAIN_TYPE." "$LINENO" 5
fi
@@ -33488,7 +33523,7 @@
# Collapse compiler output into a single line
COMPILER_VERSION_STRING=`$ECHO $COMPILER_VERSION_OUTPUT`
COMPILER_VERSION_NUMBER=`$ECHO $COMPILER_VERSION_OUTPUT | \
- $SED -e 's/^.*clang version \([1-9][0-9.]*\).*$/\1/'`
+ $SED -e 's/^.* version \([1-9][0-9.]*\).*$/\1/'`
else
as_fn_error $? "Unknown toolchain type $TOOLCHAIN_TYPE." "$LINENO" 5
fi
@@ -33760,6 +33795,116 @@
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ # This is the compiler version number on the form X.Y[.Z]
+
+
+
+
+ if test "x$CC_VERSION_NUMBER" != "x$CXX_VERSION_NUMBER"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C and C++ compiler has different version numbers, $CC_VERSION_NUMBER vs $CXX_VERSION_NUMBER." >&5
+$as_echo "$as_me: WARNING: C and C++ compiler has different version numbers, $CC_VERSION_NUMBER vs $CXX_VERSION_NUMBER." >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: This typically indicates a broken setup, and is not supported" >&5
+$as_echo "$as_me: WARNING: This typically indicates a broken setup, and is not supported" >&2;}
+ fi
+
+ # We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal.
+ if [[ "$CC_VERSION_NUMBER" =~ (.*\.){3} ]] ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&5
+$as_echo "$as_me: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
+ fi
+
+ if [[ "$CC_VERSION_NUMBER" =~ [0-9]{6} ]] ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has a part larger than 99999: $CC_VERSION_NUMBER. Comparisons might be wrong." >&5
+$as_echo "$as_me: WARNING: C compiler version number has a part larger than 99999: $CC_VERSION_NUMBER. Comparisons might be wrong." >&2;}
+ fi
+
+ COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$CC_VERSION_NUMBER"`
+
+
+ if test "x$TOOLCHAIN_MINIMUM_VERSION" != x; then
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ # Execute function body
+
+ # Need to assign to a variable since m4 is blocked from modifying parts in [].
+ REFERENCE_VERSION=$TOOLCHAIN_MINIMUM_VERSION
+
+ if [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ; then
+ as_fn_error $? "Internal errror: Cannot compare to $TOOLCHAIN_MINIMUM_VERSION, only three parts (X.Y.Z) is supported" "$LINENO" 5
+ fi
+
+ if [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ; then
+ as_fn_error $? "Internal errror: Cannot compare to $TOOLCHAIN_MINIMUM_VERSION, only parts < 99999 is supported" "$LINENO" 5
+ fi
+
+ # Version comparison method inspired by http://stackoverflow.com/a/24067243
+ COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"`
+
+ if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then
+ :
+
+ else
+ :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You are using $TOOLCHAIN_TYPE older than $TOOLCHAIN_MINIMUM_VERSION. This is not a supported configuration." >&5
+$as_echo "$as_me: WARNING: You are using $TOOLCHAIN_TYPE older than $TOOLCHAIN_MINIMUM_VERSION. This is not a supported configuration." >&2;}
+
+
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+ fi
+
#
# Setup the preprocessor (CPP and CXXCPP)
#
@@ -45332,7 +45477,7 @@
# On Windows, we need to set RC flags.
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
RC_FLAGS="-nologo -l0x409"
- if test "x$VARIANT" = xOPT; then
+ if test "x$DEBUG_LEVEL" = xrelease; then
RC_FLAGS="$RC_FLAGS -DNDEBUG"
fi
@@ -45358,8 +45503,6 @@
fi
-# FIXME: Currently we must test this after toolchain but before flags. Fix!
-
# Now we can test some aspects on the target using configure macros.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
@@ -46015,7 +46158,7 @@
SET_EXECUTABLE_ORIGIN='-Wl,-rpath,@loader_path/.'
SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN"
SET_SHARED_LIBRARY_NAME='-Wl,-install_name,@rpath/$1'
- SET_SHARED_LIBRARY_MAPFILE=''
+ SET_SHARED_LIBRARY_MAPFILE='-Wl,-exported_symbols_list,$1'
else
# Default works for linux, might work on other platforms as well.
SHARED_LIBRARY_FLAGS='-shared'
@@ -46035,7 +46178,7 @@
SET_EXECUTABLE_ORIGIN='-Wl,-rpath,@loader_path/.'
SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN"
SET_SHARED_LIBRARY_NAME='-Wl,-install_name,@rpath/$1'
- SET_SHARED_LIBRARY_MAPFILE=''
+ SET_SHARED_LIBRARY_MAPFILE='-Wl,-exported_symbols_list,$1'
else
# Default works for linux, might work on other platforms as well.
PICFLAG='-fPIC'
@@ -46071,7 +46214,7 @@
SET_EXECUTABLE_ORIGIN=''
SET_SHARED_LIBRARY_ORIGIN=''
SET_SHARED_LIBRARY_NAME=''
- SET_SHARED_LIBRARY_MAPFILE=''
+ SET_SHARED_LIBRARY_MAPFILE='-def:$1'
fi
@@ -46151,6 +46294,10 @@
# no adjustment
;;
slowdebug )
+ # FIXME: By adding this to C(XX)FLAGS_DEBUG_OPTIONS it
+ # get's added conditionally on whether we produce debug symbols or not.
+ # This is most likely not really correct.
+
# Add runtime stack smashing and undefined behavior checks.
# Not all versions of gcc support -fstack-protector
STACK_PROTECTOR_CFLAG="-fstack-protector-all"
@@ -46311,7 +46458,7 @@
CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra"
CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
- C_O_FLAG_DEBUG=""
+ CXX_O_FLAG_DEBUG=""
CXX_O_FLAG_NONE=""
fi
else
@@ -46492,8 +46639,8 @@
# avoid bundling msvcpNNN.dll. Doesn't work with newer versions of visual
# studio.
if test "x$TOOLCHAIN_VERSION" = "x2010"; then
- COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \
- -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB"
+ STATIC_CPPLIB_FLAGS="-D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB"
+ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK $STATIC_CPPLIB_FLAGS"
fi
fi
@@ -46561,9 +46708,6 @@
# Set some additional per-OS defines.
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
- elif test "x$OPENJDK_TARGET_OS" = xaix; then
- # FIXME: PPC64 should not be here.
- COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DPPC64"
elif test "x$OPENJDK_TARGET_OS" = xbsd; then
COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE"
fi
@@ -46621,36 +46765,34 @@
# Setup LDFLAGS et al.
#
- # Now this is odd. The JDK native libraries have to link against libjvm.so
- # On 32-bit machines there is normally two distinct libjvm.so:s, client and server.
- # Which should we link to? Are we lucky enough that the binary api to the libjvm.so library
- # is identical for client and server? Yes. Which is picked at runtime (client or server)?
- # Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following
- # libraries will link to whatever is in memory. Yuck.
- #
- # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh.
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
- LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no"
+ LDFLAGS_MICROSOFT="-nologo -opt:ref"
+ LDFLAGS_JDK="$LDFLAGS_JDK $LDFLAGS_MICROSOFT -incremental:no"
if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then
- LDFLAGS_JDK="$LDFLAGS_JDK -safeseh"
+ LDFLAGS_SAFESH="-safeseh"
+ LDFLAGS_JDK="$LDFLAGS_JDK $LDFLAGS_SAFESH"
fi
# TODO: make -debug optional "--disable-full-debug-symbols"
- LDFLAGS_JDK="$LDFLAGS_JDK -debug"
+ LDFLAGS_MICROSOFT_DEBUG="-debug"
+ LDFLAGS_JDK="$LDFLAGS_JDK $LDFLAGS_MICROSOFT_DEBUG"
elif test "x$TOOLCHAIN_TYPE" = xgcc; then
# If this is a --hash-style=gnu system, use --hash-style=both, why?
# We have previously set HAS_GNU_HASH if this is the case
if test -n "$HAS_GNU_HASH"; then
- LDFLAGS_JDK="${LDFLAGS_JDK} -Wl,--hash-style=both"
+ LDFLAGS_HASH_STYLE="-Wl,--hash-style=both"
+ LDFLAGS_JDK="${LDFLAGS_JDK} $LDFLAGS_HASH_STYLE"
fi
if test "x$OPENJDK_TARGET_OS" = xlinux; then
# And since we now know that the linker is gnu, then add -z defs, to forbid
# undefined symbols in object files.
- LDFLAGS_JDK="${LDFLAGS_JDK} -Wl,-z,defs"
+ LDFLAGS_NO_UNDEF_SYM="-Wl,-z,defs"
+ LDFLAGS_JDK="${LDFLAGS_JDK} $LDFLAGS_NO_UNDEF_SYM"
case $DEBUG_LEVEL in
release )
# tell linker to optimize libraries.
# Should this be supplied to the OSS linker as well?
- LDFLAGS_JDK="${LDFLAGS_JDK} -Wl,-O1"
+ LDFLAGS_DEBUGLEVEL_release="-Wl,-O1"
+ LDFLAGS_JDK="${LDFLAGS_JDK} $LDFLAGS_DEBUGLEVEL_release"
;;
slowdebug )
if test "x$HAS_LINKER_NOW" = "xtrue"; then
@@ -46677,10 +46819,13 @@
esac
fi
elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
- LDFLAGS_JDK="$LDFLAGS_JDK -Wl,-z,defs -xildoff -ztext"
- LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib"
+ LDFLAGS_SOLSTUDIO="-Wl,-z,defs"
+ LDFLAGS_JDK="$LDFLAGS_JDK $LDFLAGS_SOLSTUDIO -xildoff -ztext"
+ LDFLAGS_CXX_SOLSTUDIO="-norunpath"
+ LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK $LDFLAGS_CXX_SOLSTUDIO -xnolib"
elif test "x$TOOLCHAIN_TYPE" = xxlc; then
- LDFLAGS_JDK="${LDFLAGS_JDK} -brtl -bnolibpath -bexpall -bernotok"
+ LDFLAGS_XLC="-brtl -bnolibpath -bexpall -bernotok"
+ LDFLAGS_JDK="${LDFLAGS_JDK} $LDFLAGS_XLC"
fi
# Customize LDFLAGS for executables
@@ -47324,6 +47469,10 @@
DISABLE_WARNING_PREFIX="-Wno-"
CFLAGS_WARNINGS_ARE_ERRORS="-Werror"
;;
+ xlc)
+ DISABLE_WARNING_PREFIX="-qsuppress="
+ CFLAGS_WARNINGS_ARE_ERRORS="-qhalt=w"
+ ;;
esac
@@ -47353,7 +47502,11 @@
# AIX doesn't support 'zipped' so use 'internal' as default
with_native_debug_symbols="internal"
else
- with_native_debug_symbols="zipped"
+ if test "x$STATIC_BUILD" = xtrue; then
+ with_native_debug_symbols="none"
+ else
+ with_native_debug_symbols="zipped"
+ fi
fi
fi
@@ -55353,6 +55506,349 @@
fi
+ if test "x$OPENJDK_TARGET_OS" = xmacosx; then
+ if test "x$FOUND_FREETYPE" != xyes; then
+ # Due to changes in OSX 10.11 XQuartz now installs to /opt/X11
+ FREETYPE_BASE_DIR="$SYSROOT/opt/X11"
+
+ POTENTIAL_FREETYPE_INCLUDE_PATH="$FREETYPE_BASE_DIR/include"
+ POTENTIAL_FREETYPE_LIB_PATH="$FREETYPE_BASE_DIR/lib"
+ METHOD="well-known location"
+
+ # Let's start with an optimistic view of the world :-)
+ FOUND_FREETYPE=yes
+
+ # First look for the canonical freetype main include file ft2build.h.
+ if ! test -s "$POTENTIAL_FREETYPE_INCLUDE_PATH/ft2build.h"; then
+ # Oh no! Let's try in the freetype2 directory. This is needed at least at Mac OS X Yosemite.
+ POTENTIAL_FREETYPE_INCLUDE_PATH="$POTENTIAL_FREETYPE_INCLUDE_PATH/freetype2"
+ if ! test -s "$POTENTIAL_FREETYPE_INCLUDE_PATH/ft2build.h"; then
+ # Fail.
+ FOUND_FREETYPE=no
+ fi
+ fi
+
+ if test "x$FOUND_FREETYPE" = xyes; then
+ # Include file found, let's continue the sanity check.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Found freetype include files at $POTENTIAL_FREETYPE_INCLUDE_PATH using $METHOD" >&5
+$as_echo "$as_me: Found freetype include files at $POTENTIAL_FREETYPE_INCLUDE_PATH using $METHOD" >&6;}
+
+ # Reset to default value
+ FREETYPE_BASE_NAME=freetype
+ FREETYPE_LIB_NAME="${LIBRARY_PREFIX}${FREETYPE_BASE_NAME}${SHARED_LIBRARY_SUFFIX}"
+ if ! test -s "$POTENTIAL_FREETYPE_LIB_PATH/$FREETYPE_LIB_NAME"; then
+ if test "x$OPENJDK_TARGET_OS" = xmacosx \
+ && test -s "$POTENTIAL_FREETYPE_LIB_PATH/${LIBRARY_PREFIX}freetype.6${SHARED_LIBRARY_SUFFIX}"; then
+ # On Mac OS X Yosemite, the symlink from libfreetype.dylib to libfreetype.6.dylib disappeared. Check
+ # for the .6 version explicitly.
+ FREETYPE_BASE_NAME=freetype.6
+ FREETYPE_LIB_NAME="${LIBRARY_PREFIX}${FREETYPE_BASE_NAME}${SHARED_LIBRARY_SUFFIX}"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Compensating for missing symlink by using version 6 explicitly" >&5
+$as_echo "$as_me: Compensating for missing symlink by using version 6 explicitly" >&6;}
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $POTENTIAL_FREETYPE_LIB_PATH/$FREETYPE_LIB_NAME. Ignoring location." >&5
+$as_echo "$as_me: Could not find $POTENTIAL_FREETYPE_LIB_PATH/$FREETYPE_LIB_NAME. Ignoring location." >&6;}
+ FOUND_FREETYPE=no
+ fi
+ else
+ if test "x$OPENJDK_TARGET_OS" = xwindows; then
+ # On Windows, we will need both .lib and .dll file.
+ if ! test -s "$POTENTIAL_FREETYPE_LIB_PATH/${FREETYPE_BASE_NAME}.lib"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $POTENTIAL_FREETYPE_LIB_PATH/${FREETYPE_BASE_NAME}.lib. Ignoring location." >&5
+$as_echo "$as_me: Could not find $POTENTIAL_FREETYPE_LIB_PATH/${FREETYPE_BASE_NAME}.lib. Ignoring location." >&6;}
+ FOUND_FREETYPE=no
+ fi
+ elif test "x$OPENJDK_TARGET_OS" = xsolaris \
+ && test -s "$POTENTIAL_FREETYPE_LIB_PATH$OPENJDK_TARGET_CPU_ISADIR/$FREETYPE_LIB_NAME"; then
+ # Found lib in isa dir, use that instead.
+ POTENTIAL_FREETYPE_LIB_PATH="$POTENTIAL_FREETYPE_LIB_PATH$OPENJDK_TARGET_CPU_ISADIR"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting to use $POTENTIAL_FREETYPE_LIB_PATH instead" >&5
+$as_echo "$as_me: Rewriting to use $POTENTIAL_FREETYPE_LIB_PATH instead" >&6;}
+ fi
+ fi
+ fi
+
+ if test "x$FOUND_FREETYPE" = xyes; then
+
+ # Only process if variable expands to non-empty
+
+ if test "x$POTENTIAL_FREETYPE_INCLUDE_PATH" != x; then
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+
+ # Input might be given as Windows format, start by converting to
+ # unix format.
+ path="$POTENTIAL_FREETYPE_INCLUDE_PATH"
+ new_path=`$CYGPATH -u "$path"`
+
+ # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
+ # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
+ # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
+ # "foo.exe" is OK but "foo" is an error.
+ #
+ # This test is therefore slightly more accurate than "test -f" to check for file precense.
+ # It is also a way to make sure we got the proper file name for the real test later on.
+ test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
+ if test "x$test_shortpath" = x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The path of POTENTIAL_FREETYPE_INCLUDE_PATH, which resolves as \"$path\", is invalid." >&5
+$as_echo "$as_me: The path of POTENTIAL_FREETYPE_INCLUDE_PATH, which resolves as \"$path\", is invalid." >&6;}
+ as_fn_error $? "Cannot locate the the path of POTENTIAL_FREETYPE_INCLUDE_PATH" "$LINENO" 5
+ fi
+
+ # Call helper function which possibly converts this using DOS-style short mode.
+ # If so, the updated path is stored in $new_path.
+
+ input_path="$new_path"
+ # Check if we need to convert this using DOS-style short mode. If the path
+ # contains just simple characters, use it. Otherwise (spaces, weird characters),
+ # take no chances and rewrite it.
+ # Note: m4 eats our [], so we need to use [ and ] instead.
+ has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]`
+ if test "x$has_forbidden_chars" != x; then
+ # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
+ shortmode_path=`$CYGPATH -s -m -a "$input_path"`
+ path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
+ if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
+ # Going to short mode and back again did indeed matter. Since short mode is
+ # case insensitive, let's make it lowercase to improve readability.
+ shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ # Now convert it back to Unix-style (cygpath)
+ input_path=`$CYGPATH -u "$shortmode_path"`
+ new_path="$input_path"
+ fi
+ fi
+
+ test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
+ if test "x$test_cygdrive_prefix" = x; then
+ # As a simple fix, exclude /usr/bin since it's not a real path.
+ if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then
+ # The path is in a Cygwin special directory (e.g. /home). We need this converted to
+ # a path prefixed by /cygdrive for fixpath to work.
+ new_path="$CYGWIN_ROOT_PATH$input_path"
+ fi
+ fi
+
+
+ if test "x$path" != "x$new_path"; then
+ POTENTIAL_FREETYPE_INCLUDE_PATH="$new_path"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting POTENTIAL_FREETYPE_INCLUDE_PATH to \"$new_path\"" >&5
+$as_echo "$as_me: Rewriting POTENTIAL_FREETYPE_INCLUDE_PATH to \"$new_path\"" >&6;}
+ fi
+
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+
+ path="$POTENTIAL_FREETYPE_INCLUDE_PATH"
+ has_colon=`$ECHO $path | $GREP ^.:`
+ new_path="$path"
+ if test "x$has_colon" = x; then
+ # Not in mixed or Windows style, start by that.
+ new_path=`cmd //c echo $path`
+ fi
+
+
+ input_path="$new_path"
+ # Check if we need to convert this using DOS-style short mode. If the path
+ # contains just simple characters, use it. Otherwise (spaces, weird characters),
+ # take no chances and rewrite it.
+ # Note: m4 eats our [], so we need to use [ and ] instead.
+ has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]`
+ if test "x$has_forbidden_chars" != x; then
+ # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
+ new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ fi
+
+
+ windows_path="$new_path"
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+ unix_path=`$CYGPATH -u "$windows_path"`
+ new_path="$unix_path"
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+ unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
+ new_path="$unix_path"
+ fi
+
+ if test "x$path" != "x$new_path"; then
+ POTENTIAL_FREETYPE_INCLUDE_PATH="$new_path"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting POTENTIAL_FREETYPE_INCLUDE_PATH to \"$new_path\"" >&5
+$as_echo "$as_me: Rewriting POTENTIAL_FREETYPE_INCLUDE_PATH to \"$new_path\"" >&6;}
+ fi
+
+ # Save the first 10 bytes of this path to the storage, so fixpath can work.
+ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}")
+
+ else
+ # We're on a unix platform. Hooray! :)
+ path="$POTENTIAL_FREETYPE_INCLUDE_PATH"
+ has_space=`$ECHO "$path" | $GREP " "`
+ if test "x$has_space" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The path of POTENTIAL_FREETYPE_INCLUDE_PATH, which resolves as \"$path\", is invalid." >&5
+$as_echo "$as_me: The path of POTENTIAL_FREETYPE_INCLUDE_PATH, which resolves as \"$path\", is invalid." >&6;}
+ as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5
+ fi
+
+ # Use eval to expand a potential ~
+ eval path="$path"
+ if test ! -f "$path" && test ! -d "$path"; then
+ as_fn_error $? "The path of POTENTIAL_FREETYPE_INCLUDE_PATH, which resolves as \"$path\", is not found." "$LINENO" 5
+ fi
+
+ if test -d "$path"; then
+ POTENTIAL_FREETYPE_INCLUDE_PATH="`cd "$path"; $THEPWDCMD -L`"
+ else
+ dir="`$DIRNAME "$path"`"
+ base="`$BASENAME "$path"`"
+ POTENTIAL_FREETYPE_INCLUDE_PATH="`cd "$dir"; $THEPWDCMD -L`/$base"
+ fi
+ fi
+ fi
+
+
+ # Only process if variable expands to non-empty
+
+ if test "x$POTENTIAL_FREETYPE_LIB_PATH" != x; then
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+
+ # Input might be given as Windows format, start by converting to
+ # unix format.
+ path="$POTENTIAL_FREETYPE_LIB_PATH"
+ new_path=`$CYGPATH -u "$path"`
+
+ # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
+ # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
+ # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
+ # "foo.exe" is OK but "foo" is an error.
+ #
+ # This test is therefore slightly more accurate than "test -f" to check for file precense.
+ # It is also a way to make sure we got the proper file name for the real test later on.
+ test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
+ if test "x$test_shortpath" = x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The path of POTENTIAL_FREETYPE_LIB_PATH, which resolves as \"$path\", is invalid." >&5
+$as_echo "$as_me: The path of POTENTIAL_FREETYPE_LIB_PATH, which resolves as \"$path\", is invalid." >&6;}
+ as_fn_error $? "Cannot locate the the path of POTENTIAL_FREETYPE_LIB_PATH" "$LINENO" 5
+ fi
+
+ # Call helper function which possibly converts this using DOS-style short mode.
+ # If so, the updated path is stored in $new_path.
+
+ input_path="$new_path"
+ # Check if we need to convert this using DOS-style short mode. If the path
+ # contains just simple characters, use it. Otherwise (spaces, weird characters),
+ # take no chances and rewrite it.
+ # Note: m4 eats our [], so we need to use [ and ] instead.
+ has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]`
+ if test "x$has_forbidden_chars" != x; then
+ # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
+ shortmode_path=`$CYGPATH -s -m -a "$input_path"`
+ path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
+ if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
+ # Going to short mode and back again did indeed matter. Since short mode is
+ # case insensitive, let's make it lowercase to improve readability.
+ shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ # Now convert it back to Unix-style (cygpath)
+ input_path=`$CYGPATH -u "$shortmode_path"`
+ new_path="$input_path"
+ fi
+ fi
+
+ test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
+ if test "x$test_cygdrive_prefix" = x; then
+ # As a simple fix, exclude /usr/bin since it's not a real path.
+ if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then
+ # The path is in a Cygwin special directory (e.g. /home). We need this converted to
+ # a path prefixed by /cygdrive for fixpath to work.
+ new_path="$CYGWIN_ROOT_PATH$input_path"
+ fi
+ fi
+
+
+ if test "x$path" != "x$new_path"; then
+ POTENTIAL_FREETYPE_LIB_PATH="$new_path"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting POTENTIAL_FREETYPE_LIB_PATH to \"$new_path\"" >&5
+$as_echo "$as_me: Rewriting POTENTIAL_FREETYPE_LIB_PATH to \"$new_path\"" >&6;}
+ fi
+
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+
+ path="$POTENTIAL_FREETYPE_LIB_PATH"
+ has_colon=`$ECHO $path | $GREP ^.:`
+ new_path="$path"
+ if test "x$has_colon" = x; then
+ # Not in mixed or Windows style, start by that.
+ new_path=`cmd //c echo $path`
+ fi
+
+
+ input_path="$new_path"
+ # Check if we need to convert this using DOS-style short mode. If the path
+ # contains just simple characters, use it. Otherwise (spaces, weird characters),
+ # take no chances and rewrite it.
+ # Note: m4 eats our [], so we need to use [ and ] instead.
+ has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]`
+ if test "x$has_forbidden_chars" != x; then
+ # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
+ new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ fi
+
+
+ windows_path="$new_path"
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+ unix_path=`$CYGPATH -u "$windows_path"`
+ new_path="$unix_path"
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+ unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
+ new_path="$unix_path"
+ fi
+
+ if test "x$path" != "x$new_path"; then
+ POTENTIAL_FREETYPE_LIB_PATH="$new_path"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting POTENTIAL_FREETYPE_LIB_PATH to \"$new_path\"" >&5
+$as_echo "$as_me: Rewriting POTENTIAL_FREETYPE_LIB_PATH to \"$new_path\"" >&6;}
+ fi
+
+ # Save the first 10 bytes of this path to the storage, so fixpath can work.
+ all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}")
+
+ else
+ # We're on a unix platform. Hooray! :)
+ path="$POTENTIAL_FREETYPE_LIB_PATH"
+ has_space=`$ECHO "$path" | $GREP " "`
+ if test "x$has_space" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: The path of POTENTIAL_FREETYPE_LIB_PATH, which resolves as \"$path\", is invalid." >&5
+$as_echo "$as_me: The path of POTENTIAL_FREETYPE_LIB_PATH, which resolves as \"$path\", is invalid." >&6;}
+ as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5
+ fi
+
+ # Use eval to expand a potential ~
+ eval path="$path"
+ if test ! -f "$path" && test ! -d "$path"; then
+ as_fn_error $? "The path of POTENTIAL_FREETYPE_LIB_PATH, which resolves as \"$path\", is not found." "$LINENO" 5
+ fi
+
+ if test -d "$path"; then
+ POTENTIAL_FREETYPE_LIB_PATH="`cd "$path"; $THEPWDCMD -L`"
+ else
+ dir="`$DIRNAME "$path"`"
+ base="`$BASENAME "$path"`"
+ POTENTIAL_FREETYPE_LIB_PATH="`cd "$dir"; $THEPWDCMD -L`/$base"
+ fi
+ fi
+ fi
+
+
+ FREETYPE_INCLUDE_PATH="$POTENTIAL_FREETYPE_INCLUDE_PATH"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype includes" >&5
+$as_echo_n "checking for freetype includes... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE_INCLUDE_PATH" >&5
+$as_echo "$FREETYPE_INCLUDE_PATH" >&6; }
+ FREETYPE_LIB_PATH="$POTENTIAL_FREETYPE_LIB_PATH"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype libraries" >&5
+$as_echo_n "checking for freetype libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE_LIB_PATH" >&5
+$as_echo "$FREETYPE_LIB_PATH" >&6; }
+ fi
+
+ fi
+ fi
+
if test "x$FOUND_FREETYPE" != xyes; then
FREETYPE_BASE_DIR="$SYSROOT/usr/sfw"
@@ -58396,7 +58892,7 @@
FOUND_MEM=yes
elif test -x /usr/sbin/prtconf; then
# Looks like a Solaris or AIX system
- MEMORY_SIZE=`/usr/sbin/prtconf | grep "^Memory [Ss]ize" | awk '{ print $3 }'`
+ MEMORY_SIZE=`/usr/sbin/prtconf 2> /dev/null | grep "^Memory [Ss]ize" | awk '{ print $3 }'`
FOUND_MEM=yes
elif test -x /usr/sbin/sysctl; then
# Looks like a MacOSX system
@@ -59224,9 +59720,9 @@
fi
if test "x${TOOLCHAIN_TYPE}" = "xgcc"; then
- cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
+ ( cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
&& ${ICECC_CREATE_ENV} ${icecc_gcc_arg} ${CC} ${CXX} > \
- ${icecc_create_env_log} 2>&1
+ ${icecc_create_env_log} 2>&1 )
if test "$?" != "0"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: icecc-create-env output:" >&5
$as_echo "$as_me: icecc-create-env output:" >&6;}
@@ -59443,8 +59939,8 @@
- cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
- && ${ICECC_CREATE_ENV} --clang ${CC} ${ICECC_WRAPPER} > ${icecc_create_env_log} 2>&1
+ ( cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
+ && ${ICECC_CREATE_ENV} --clang ${CC} ${ICECC_WRAPPER} > ${icecc_create_env_log} 2>&1 )
if test "$?" != "0"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: icecc-create-env output:" >&5
$as_echo "$as_me: icecc-create-env output:" >&6;}
@@ -59475,9 +59971,9 @@
icecc_create_env_log_build="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/icecc_create_env_build.log"
if test "x${BUILD_CC##*/}" = "xgcc" || test "x${BUILD_CC##*/}" = "xcc"; then
- cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
+ ( cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
&& ${ICECC_CREATE_ENV} ${icecc_gcc_arg} ${BUILD_CC} ${BUILD_CXX} > \
- ${icecc_create_env_log_build} 2>&1
+ ${icecc_create_env_log_build} 2>&1 )
if test "$?" != "0"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: icecc-create-env output:" >&5
$as_echo "$as_me: icecc-create-env output:" >&6;}
@@ -59488,8 +59984,8 @@
elif test "x${BUILD_CC##*/}" = "xclang"; then
- cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
- && ${ICECC_CREATE_ENV} --clang ${BUILD_CC} ${ICECC_WRAPPER} > ${icecc_create_env_log_build} 2>&1
+ ( cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
+ && ${ICECC_CREATE_ENV} --clang ${BUILD_CC} ${ICECC_WRAPPER} > ${icecc_create_env_log_build} 2>&1 )
if test "$?" != "0"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: icecc-create-env output:" >&5
$as_echo "$as_me: icecc-create-env output:" >&6;}
--- a/common/autoconf/help.m4 Thu Feb 11 13:58:43 2016 -0800
+++ b/common/autoconf/help.m4 Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -159,7 +159,9 @@
# called at the very beginning in configure.ac.
AC_DEFUN_ONCE([HELP_PRINT_ADDITIONAL_HELP_AND_EXIT],
[
- if test "x$CONFIGURE_PRINT_TOOLCHAIN_LIST" != x; then
+ if test "x$CONFIGURE_PRINT_ADDITIONAL_HELP" != x; then
+
+ # Print available toolchains
$PRINTF "The following toolchains are available as arguments to --with-toolchain-type.\n"
$PRINTF "Which are valid to use depends on the build platform.\n"
for toolchain in $VALID_TOOLCHAINS_all; do
--- a/common/autoconf/hotspot.m4 Thu Feb 11 13:58:43 2016 -0800
+++ b/common/autoconf/hotspot.m4 Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -114,21 +114,6 @@
AC_SUBST(JVM_VARIANT_ZEROSHARK)
AC_SUBST(JVM_VARIANT_CORE)
- INCLUDE_SA=true
- if test "x$JVM_VARIANT_ZERO" = xtrue ; then
- INCLUDE_SA=false
- fi
- if test "x$JVM_VARIANT_ZEROSHARK" = xtrue ; then
- INCLUDE_SA=false
- fi
- if test "x$OPENJDK_TARGET_OS" = xaix ; then
- INCLUDE_SA=false
- fi
- if test "x$OPENJDK_TARGET_CPU" = xaarch64; then
- INCLUDE_SA=false
- fi
- AC_SUBST(INCLUDE_SA)
-
if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
MACOSX_UNIVERSAL="true"
fi
--- a/common/autoconf/jdk-options.m4 Thu Feb 11 13:58:43 2016 -0800
+++ b/common/autoconf/jdk-options.m4 Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -66,7 +66,7 @@
], [ENABLE_DEBUG="no"])
AC_ARG_WITH([debug-level], [AS_HELP_STRING([--with-debug-level],
- [set the debug level (release, fastdebug, slowdebug, optimized (HotSpot build only)) @<:@release@:>@])],
+ [set the debug level (release, fastdebug, slowdebug, optimized) @<:@release@:>@])],
[
DEBUG_LEVEL="${withval}"
if test "x$ENABLE_DEBUG" = xyes; then
@@ -79,7 +79,7 @@
test "x$DEBUG_LEVEL" != xoptimized && \
test "x$DEBUG_LEVEL" != xfastdebug && \
test "x$DEBUG_LEVEL" != xslowdebug; then
- AC_MSG_ERROR([Allowed debug levels are: release, fastdebug and slowdebug])
+ AC_MSG_ERROR([Allowed debug levels are: release, fastdebug, slowdebug and optimized])
fi
])
@@ -176,6 +176,22 @@
fi
AC_SUBST(UNLIMITED_CRYPTO)
+ # Should we build the serviceability agent (SA)?
+ INCLUDE_SA=true
+ if test "x$JVM_VARIANT_ZERO" = xtrue ; then
+ INCLUDE_SA=false
+ fi
+ if test "x$JVM_VARIANT_ZEROSHARK" = xtrue ; then
+ INCLUDE_SA=false
+ fi
+ if test "x$OPENJDK_TARGET_OS" = xaix ; then
+ INCLUDE_SA=false
+ fi
+ if test "x$OPENJDK_TARGET_CPU" = xaarch64; then
+ INCLUDE_SA=false
+ fi
+ AC_SUBST(INCLUDE_SA)
+
# Compress jars
COMPRESS_JARS=false
@@ -222,7 +238,7 @@
AC_MSG_CHECKING([what type of native debug symbols to use])
AC_ARG_WITH([native-debug-symbols],
[AS_HELP_STRING([--with-native-debug-symbols],
- [set the native debug symbol configuration (none, internal, external, zipped) @<:@zipped@:>@])],
+ [set the native debug symbol configuration (none, internal, external, zipped) @<:@varying@:>@])],
[
if test "x$OPENJDK_TARGET_OS" = xaix; then
if test "x$withval" = xexternal || test "x$withval" = xzipped; then
@@ -235,7 +251,11 @@
# AIX doesn't support 'zipped' so use 'internal' as default
with_native_debug_symbols="internal"
else
- with_native_debug_symbols="zipped"
+ if test "x$STATIC_BUILD" = xtrue; then
+ with_native_debug_symbols="none"
+ else
+ with_native_debug_symbols="zipped"
+ fi
fi
])
NATIVE_DEBUG_SYMBOLS=$with_native_debug_symbols
@@ -258,7 +278,7 @@
# Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true
DEBUG_BINARIES=false
STRIP_POLICY=min_strip
-
+
elif test "x$NATIVE_DEBUG_SYMBOLS" = xnone; then
COMPILE_WITH_DEBUG_SYMBOLS=false
COPY_DEBUG_SYMBOLS=false
@@ -275,7 +295,7 @@
DEBUG_BINARIES=true
STRIP_POLICY=no_strip
STRIP=""
-
+
elif test "x$NATIVE_DEBUG_SYMBOLS" = xexternal; then
if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then
@@ -356,7 +376,7 @@
################################################################################
#
-# Static build support. When enabled will generate static
+# Static build support. When enabled will generate static
# libraries instead of shared libraries for all JDK libs.
#
AC_DEFUN_ONCE([JDKOPT_SETUP_STATIC_BUILD],
--- a/common/autoconf/lib-freetype.m4 Thu Feb 11 13:58:43 2016 -0800
+++ b/common/autoconf/lib-freetype.m4 Mon Feb 15 09:44:42 2016 -0800
@@ -349,6 +349,14 @@
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
fi
+ if test "x$OPENJDK_TARGET_OS" = xmacosx; then
+ if test "x$FOUND_FREETYPE" != xyes; then
+ # Due to changes in OSX 10.11 XQuartz now installs to /opt/X11
+ FREETYPE_BASE_DIR="$SYSROOT/opt/X11"
+ LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
+ fi
+ fi
+
if test "x$FOUND_FREETYPE" != xyes; then
FREETYPE_BASE_DIR="$SYSROOT/usr/sfw"
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
--- a/common/autoconf/spec.gmk.in Thu Feb 11 13:58:43 2016 -0800
+++ b/common/autoconf/spec.gmk.in Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -36,10 +36,12 @@
# A self-referential reference to this file.
SPEC:=@SPEC@
-# SPACE is defined in MakeBase.gmk, but it is also used in := rules here for some
-# toolchains, and is needed if MakeBase.gmk is not included before this file.
+# SPACE and COMMA are defined in MakeBase.gmk, but they are also used in
+# some definitions here, and are needed if MakeBase.gmk is not included before
+# this file.
X:=
SPACE:=$(X) $(X)
+COMMA:=,
# What make to use for main processing, after bootstrapping top-level Makefile.
MAKE := @MAKE@
@@ -350,10 +352,8 @@
CXXFLAGS_JDKEXE:=@CXXFLAGS_JDKEXE@
CXX:=@FIXPATH@ @CCACHE@ @ICECC@ @CXX@
-#CXXFLAGS:=@CXXFLAGS@
CPP:=@FIXPATH@ @CPP@
-#CPPFLAGS:=@CPPFLAGS@
# The linker can be gcc or ld on unix systems, or link.exe on windows systems.
LD:=@FIXPATH@ @LD@
@@ -501,7 +501,7 @@
INTERIM_LANGTOOLS_JAR = $(BUILDTOOLS_OUTPUTDIR)/interim_langtools.jar
INTERIM_LANGTOOLS_ARGS = "-Xbootclasspath/p:$(INTERIM_LANGTOOLS_JAR)" -cp $(INTERIM_LANGTOOLS_JAR)
NEW_JAVAC = $(INTERIM_LANGTOOLS_ARGS) com.sun.tools.javac.Main
-NEW_JAVADOC = $(INTERIM_LANGTOOLS_ARGS) jdk.javadoc.internal.tool.Main
+NEW_JAVADOC = $(INTERIM_LANGTOOLS_ARGS) jdk.javadoc.internal.tool.Main
# Base flags for RC
# Guarding this against resetting value. Legacy make files include spec multiple
--- a/common/autoconf/toolchain.m4 Thu Feb 11 13:58:43 2016 -0800
+++ b/common/autoconf/toolchain.m4 Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -50,6 +50,67 @@
TOOLCHAIN_DESCRIPTION_solstudio="Oracle Solaris Studio"
TOOLCHAIN_DESCRIPTION_xlc="IBM XL C/C++"
+# Minimum supported versions, empty means unspecified
+TOOLCHAIN_MINIMUM_VERSION_clang="3.2"
+TOOLCHAIN_MINIMUM_VERSION_gcc="4.3"
+TOOLCHAIN_MINIMUM_VERSION_microsoft=""
+TOOLCHAIN_MINIMUM_VERSION_solstudio="5.12"
+TOOLCHAIN_MINIMUM_VERSION_xlc=""
+
+# Prepare the system so that TOOLCHAIN_CHECK_COMPILER_VERSION can be called.
+# Must have CC_VERSION_NUMBER and CXX_VERSION_NUMBER.
+AC_DEFUN([TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS],
+[
+ if test "x$CC_VERSION_NUMBER" != "x$CXX_VERSION_NUMBER"; then
+ AC_MSG_WARN([C and C++ compiler has different version numbers, $CC_VERSION_NUMBER vs $CXX_VERSION_NUMBER.])
+ AC_MSG_WARN([This typically indicates a broken setup, and is not supported])
+ fi
+
+ # We only check CC_VERSION_NUMBER since we assume CXX_VERSION_NUMBER is equal.
+ if [ [[ "$CC_VERSION_NUMBER" =~ (.*\.){3} ]] ]; then
+ AC_MSG_WARN([C compiler version number has more than three parts (X.Y.Z): $CC_VERSION_NUMBER. Comparisons might be wrong.])
+ fi
+
+ if [ [[ "$CC_VERSION_NUMBER" =~ [0-9]{6} ]] ]; then
+ AC_MSG_WARN([C compiler version number has a part larger than 99999: $CC_VERSION_NUMBER. Comparisons might be wrong.])
+ fi
+
+ COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$CC_VERSION_NUMBER"`
+])
+
+# Check if the configured compiler (C and C++) is of a specific version or
+# newer. TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS must have been called before.
+#
+# Arguments:
+# VERSION: The version string to check against the found version
+# IF_AT_LEAST: block to run if the compiler is at least this version (>=)
+# IF_OLDER_THAN: block to run if the compiler is older than this version (<)
+BASIC_DEFUN_NAMED([TOOLCHAIN_CHECK_COMPILER_VERSION],
+ [*VERSION IF_AT_LEAST IF_OLDER_THAN], [$@],
+[
+ # Need to assign to a variable since m4 is blocked from modifying parts in [].
+ REFERENCE_VERSION=ARG_VERSION
+
+ if [ [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ]; then
+ AC_MSG_ERROR([Internal errror: Cannot compare to ARG_VERSION, only three parts (X.Y.Z) is supported])
+ fi
+
+ if [ [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ]; then
+ AC_MSG_ERROR([Internal errror: Cannot compare to ARG_VERSION, only parts < 99999 is supported])
+ fi
+
+ # Version comparison method inspired by http://stackoverflow.com/a/24067243
+ COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$REFERENCE_VERSION"`
+
+ if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then
+ :
+ ARG_IF_AT_LEAST
+ else
+ :
+ ARG_IF_OLDER_THAN
+ fi
+])
+
# Setup a number of variables describing how native output files are
# named on this platform/toolchain.
AC_DEFUN([TOOLCHAIN_SETUP_FILENAME_PATTERNS],
@@ -175,6 +236,8 @@
# Use indirect variable referencing
toolchain_var_name=TOOLCHAIN_DESCRIPTION_$TOOLCHAIN_TYPE
TOOLCHAIN_DESCRIPTION=${!toolchain_var_name}
+ toolchain_var_name=TOOLCHAIN_MINIMUM_VERSION_$TOOLCHAIN_TYPE
+ TOOLCHAIN_MINIMUM_VERSION=${!toolchain_var_name}
toolchain_var_name=TOOLCHAIN_CC_BINARY_$TOOLCHAIN_TYPE
TOOLCHAIN_CC_BINARY=${!toolchain_var_name}
toolchain_var_name=TOOLCHAIN_CXX_BINARY_$TOOLCHAIN_TYPE
@@ -217,8 +280,14 @@
export INCLUDE="$VS_INCLUDE"
export LIB="$VS_LIB"
else
- # Currently we do not define this for other toolchains. This might change as the need arise.
- TOOLCHAIN_VERSION=
+ if test "x$XCODE_VERSION_OUTPUT" != x; then
+ # For Xcode, we set the Xcode version as TOOLCHAIN_VERSION
+ TOOLCHAIN_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | $CUT -f 2 -d ' '`
+ TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode"
+ else
+ # Currently we do not define this for other toolchains. This might change as the need arise.
+ TOOLCHAIN_VERSION=
+ fi
fi
AC_SUBST(TOOLCHAIN_VERSION)
@@ -257,7 +326,7 @@
#
# $1 = compiler to test (CC or CXX)
# $2 = human readable name of compiler (C or C++)
-AC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION],
+AC_DEFUN([TOOLCHAIN_EXTRACT_COMPILER_VERSION],
[
COMPILER=[$]$1
COMPILER_NAME=$2
@@ -354,7 +423,7 @@
# Collapse compiler output into a single line
COMPILER_VERSION_STRING=`$ECHO $COMPILER_VERSION_OUTPUT`
COMPILER_VERSION_NUMBER=`$ECHO $COMPILER_VERSION_OUTPUT | \
- $SED -e 's/^.*clang version \(@<:@1-9@:>@@<:@0-9.@:>@*\).*$/\1/'`
+ $SED -e 's/^.* version \(@<:@1-9@:>@@<:@0-9.@:>@*\).*$/\1/'`
else
AC_MSG_ERROR([Unknown toolchain type $TOOLCHAIN_TYPE.])
fi
@@ -451,7 +520,7 @@
fi
fi
- TOOLCHAIN_CHECK_COMPILER_VERSION([$1], [$COMPILER_NAME])
+ TOOLCHAIN_EXTRACT_COMPILER_VERSION([$1], [$COMPILER_NAME])
])
# Detect the core components of the toolchain, i.e. the compilers (CC and CXX),
@@ -471,6 +540,20 @@
# Now that we have resolved CXX ourself, let autoconf have its go at it
AC_PROG_CXX([$CXX])
+ # This is the compiler version number on the form X.Y[.Z]
+ AC_SUBST(CC_VERSION_NUMBER)
+ AC_SUBST(CXX_VERSION_NUMBER)
+
+ TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS
+
+ if test "x$TOOLCHAIN_MINIMUM_VERSION" != x; then
+ TOOLCHAIN_CHECK_COMPILER_VERSION(VERSION: $TOOLCHAIN_MINIMUM_VERSION,
+ IF_OLDER_THAN: [
+ AC_MSG_WARN([You are using $TOOLCHAIN_TYPE older than $TOOLCHAIN_MINIMUM_VERSION. This is not a supported configuration.])
+ ]
+ )
+ fi
+
#
# Setup the preprocessor (CPP and CXXCPP)
#
--- a/common/bin/compare.sh Thu Feb 11 13:58:43 2016 -0800
+++ b/common/bin/compare.sh Mon Feb 15 09:44:42 2016 -0800
@@ -1,6 +1,6 @@
#!/bin/bash
#
-# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 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
@@ -102,32 +102,21 @@
if test "x$SUFFIX" = "xclass"; then
# To improve performance when large diffs are found, do a rough filtering of classes
# elibeble for these exceptions
- if $GREP -R -e '[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}' \
- -e '[0-9]\{2\}/[0-9]\{2\}/[0-9]\{4\}' \
+ if $GREP -R -e '[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}' \
-e 'lambda\$[a-zA-Z0-9]*\$[0-9]' ${THIS_FILE} > /dev/null; then
$JAVAP -c -constants -l -p "${OTHER_FILE}" > ${OTHER_FILE}.javap
$JAVAP -c -constants -l -p "${THIS_FILE}" > ${THIS_FILE}.javap
TMP=$($DIFF ${OTHER_FILE}.javap ${THIS_FILE}.javap | \
$GREP '^[<>]' | \
- $SED -e '/[<>].*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \
- -e '/[0-9]\{2\}\/[0-9]\{2\}\/[0-9]\{4\}/d' \
+ $SED -e '/[<>].*[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}.*/d' \
-e '/[<>].*lambda\$[a-zA-Z0-9]*\$[0-9]*/d')
fi
fi
if test "x$SUFFIX" = "xproperties"; then
- # Run through nawk to add possibly missing newline at end of file.
- $CAT $OTHER_FILE | $NAWK '{ print }' | LC_ALL=C $SORT > $OTHER_FILE.cleaned
-# Disable this exception since we aren't changing the properties cleaning method yet.
-# $CAT $OTHER_FILE | $SED -e 's/\([^\\]\):/\1\\:/g' -e 's/\([^\\]\)=/\1\\=/g' -e 's/#.*/#/g' \
-# | $SED -f "$SRC_ROOT/common/makefiles/support/unicode2x.sed" \
-# | $SED -e '/^#/d' -e '/^$/d' \
-# -e :a -e '/\\$/N; s/\\\n//; ta' \
-# -e 's/^[ \t]*//;s/[ \t]*$//' \
-# -e 's/\\=/=/' | LC_ALL=C $SORT > $OTHER_FILE.cleaned
# Filter out date string differences.
- TMP=$(LC_ALL=C $DIFF $OTHER_FILE.cleaned $THIS_FILE | \
+ TMP=$(LC_ALL=C $DIFF $OTHER_FILE $THIS_FILE | \
$GREP '^[<>]' | \
- $SED -e '/[<>].*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d')
+ $SED -e '/[<>].*[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}.*/d')
fi
if test "x$SUFFIX" = "xhtml"; then
# Some javadoc versions do not put quotes around font size
@@ -306,7 +295,8 @@
! -name "*.lib" ! -name "*.war" ! -name "JavaControlPanel" \
! -name "*.obj" ! -name "*.o" ! -name "JavaControlPanelHelper" \
! -name "JavaUpdater" ! -name "JavaWSApplicationStub" \
- ! -name "jspawnhelper" ! -name "*.a" \
+ ! -name "jspawnhelper" ! -name "JavawsLauncher" ! -name "*.a" \
+ ! -name "finish_installation" ! -name "Sparkle" \
| $GREP -v "./bin/" | $SORT | $FILTER)
echo Other files with binary differences...
@@ -320,29 +310,28 @@
THIS_FILE=$WORK_DIR/$f.this
$MKDIR -p $(dirname $OTHER_FILE)
$MKDIR -p $(dirname $THIS_FILE)
- $CAT $OTHER_DIR/$f | $SED 's/\:[0-9a-f]\{12,12\}/:CHANGE/g' > $OTHER_FILE
- $CAT $THIS_DIR/$f | $SED 's/\:[0-9a-f]\{12,12\}/:CHANGE/g' > $THIS_FILE
+ RELEASE_FILTER="$SED \
+ -e 's/\:[0-9a-f]\{12,12\}/:CHANGE/g' \
+ -e 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}/<DATE>/g'
+ "
+ $CAT $OTHER_DIR/$f | eval "$RELEASE_FILTER" > $OTHER_FILE
+ $CAT $THIS_DIR/$f | eval "$RELEASE_FILTER" > $THIS_FILE
elif [ "x$SUFFIX" = "xhtml" ]; then
# Ignore time stamps in docs files
OTHER_FILE=$WORK_DIR/$f.other
THIS_FILE=$WORK_DIR/$f.this
- $MKDIR -p $(dirname $OTHER_FILE)
- $MKDIR -p $(dirname $THIS_FILE)
+ $MKDIR -p $(dirname $OTHER_FILE) $(dirname $THIS_FILE)
+ # Older versions of compare might have left soft links with
+ # these names.
+ $RM $OTHER_FILE $THIS_FILE
#Note that | doesn't work on mac sed.
- $CAT $OTHER_DIR/$f | $SED -e 's/\(-- Generated by javadoc \).*\( --\)/\1(removed)\2/' \
- -e 's/\(<meta name="date" content="\).*\(">\)/\1(removed)\2/' \
- -e 's/[A-Z][a-z]*, [A-Z][a-z]* [0-9][0-9]*, [12][0-9]* [0-9][0-9:]* [AMP]\{2,2\} [A-Z][A-Z]*/(removed)/' \
- -e 's/[A-Z][a-z]* [A-Z][a-z]* [0-9][0-9] [0-9][0-9:]* [A-Z][A-Z]* [12][0-9]*/(removed)/' \
- -e 's/^\( from \).*\(\.idl\)$/\1(removed)\2/' \
- -e 's/^\(.*\)\( o'"'"'clock \)\([A-Z][A-Z][A-Z]\)/(removed)\2(removed)/' \
- > $OTHER_FILE
- $CAT $THIS_DIR/$f | $SED -e 's/\(-- Generated by javadoc \).*\( --\)/\1(removed)\2/' \
- -e 's/\(<meta name="date" content="\).*\(">\)/\1(removed)\2/' \
- -e 's/[A-Z][a-z]*, [A-Z][a-z]* [0-9][0-9]*, [12][0-9]* [0-9][0-9:]* [AMP]\{2,2\} [A-Z][A-Z]*/(removed)/' \
- -e 's/[A-Z][a-z]* [A-Z][a-z]* [0-9][0-9] [0-9][0-9:]* [A-Z][A-Z]* [12][0-9]*/(removed)/' \
- -e 's/^\( from \).*\(\.idl\)$/\1(removed)\2/' \
- -e 's/^\(.*\)\( o'"'"'clock \)\([A-Z][A-Z][A-Z]\)/(removed)\2(removed)/' \
- > $THIS_FILE
+ HTML_FILTER="$SED \
+ -e 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}/<DATE>/g' \
+ -e 's/\(-- Generated by javadoc \).*\( --\)/\1(removed)\2/' \
+ -e 's/[A-Z][a-z]*, [A-Z][a-z]* [0-9][0-9]*, [0-9]\{4\} [0-9][0-9:]* [AMP]\{2,2\} [A-Z][A-Z]*/<DATE>/'
+ "
+ $CAT $OTHER_DIR/$f | eval "$HTML_FILTER" > $OTHER_FILE
+ $CAT $THIS_DIR/$f | eval "$HTML_FILTER" > $THIS_FILE
else
OTHER_FILE=$OTHER_DIR/$f
THIS_FILE=$THIS_DIR/$f
@@ -605,11 +594,17 @@
OTHER_FILE_BASE=${OTHER_FILE_BASE/.exe/}
OTHER_FILE_BASE=${OTHER_FILE_BASE/.cpl/}
DIZ_NAME=$(basename $OTHER_FILE_BASE).diz
- # java.exe and java.dll diz files will have the same name. Have to
- # make sure java.exe gets the right one. This is only needed for
- # OTHER since in the new build, all pdb files are left around.
- if [ "$NAME" = "java.exe" ] && [ -f "$OTHER/tmp/java/java/obj64/java.diz" ]; then
- OTHER_DIZ_FILE="$OTHER/tmp/java/java/obj64/java.diz"
+ # Some .exe files have the same name as a .dll file. Make sure the exe
+ # files get the right debug symbols.
+ if [ "$NAME" = "java.exe" ] \
+ && [ -f "$OTHER/support/native/java.base/java_objs/java.diz" ]; then
+ OTHER_DIZ_FILE="$OTHER/support/native/java.base/java_objs/java.diz"
+ elif [ "$NAME" = "jimage.exe" ] \
+ && [ -f "$OTHER/support/native/jdk.dev/jimage_objs/jimage.diz" ]; then
+ OTHER_DIZ_FILE="$OTHER/support/native/jdk.dev/jimage_objs/jimage.diz"
+ elif [ "$NAME" = "javacpl.exe" ] \
+ && [ -f "$OTHER/support/native/jdk.plugin/javacpl/javacpl.diz" ]; then
+ OTHER_DIZ_FILE="$OTHER/support/native/jdk.plugin/javacpl/javacpl.diz"
elif [ -f "${OTHER_FILE_BASE}.diz" ]; then
OTHER_DIZ_FILE=${OTHER_FILE_BASE}.diz
else
@@ -627,9 +622,22 @@
(cd $FILE_WORK_DIR/other ; $UNARCHIVE -o $OTHER_DIZ_FILE)
export _NT_SYMBOL_PATH="$FILE_WORK_DIR/other"
fi
+
THIS_FILE_BASE=${THIS_FILE/.dll/}
THIS_FILE_BASE=${THIS_FILE_BASE/.exe/}
- if [ -f "${THIS_FILE/.dll/}.diz" ]; then
+ THIS_FILE_BASE=${THIS_FILE_BASE/.cpl/}
+ # Some .exe files have the same name as a .dll file. Make sure the exe
+ # files get the right debug symbols.
+ if [ "$NAME" = "java.exe" ] \
+ && [ -f "$THIS/support/native/java.base/java_objs/java.diz" ]; then
+ THIS_DIZ_FILE="$THIS/support/native/java.base/java_objs/java.diz"
+ elif [ "$NAME" = "jimage.exe" ] \
+ && [ -f "$THIS/support/native/jdk.dev/jimage_objs/jimage.diz" ]; then
+ THIS_DIZ_FILE="$THIS/support/native/jdk.dev/jimage_objs/jimage.diz"
+ elif [ "$NAME" = "javacpl.exe" ] \
+ && [ -f "$THIS/support/native/jdk.plugin/javacpl/javacpl.diz" ]; then
+ THIS_DIZ_FILE="$THIS/support/native/jdk.plugin/javacpl/javacpl.diz"
+ elif [ -f "${THIS_FILE_BASE}.diz" ]; then
THIS_DIZ_FILE=${THIS_FILE/.dll/}.diz
else
THIS_DIZ_FILE="$($FIND $THIS_DIR -name $DIZ_NAME | $SED 1q)"
@@ -738,6 +746,9 @@
elif [ "$OPENJDK_TARGET_OS" = "aix" ]; then
$OBJDUMP -T $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other
$OBJDUMP -T $ORIG_THIS_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this
+ elif [ "$OPENJDK_TARGET_OS" = "macosx" ]; then
+ $NM -j $ORIG_OTHER_FILE 2> /dev/null | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other
+ $NM -j $ORIG_THIS_FILE 2> /dev/null | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this
else
$NM -a $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other
$NM -a $ORIG_THIS_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this
@@ -856,8 +867,15 @@
if [ -z "$DIS_DIFF_FILTER" ]; then
DIS_DIFF_FILTER="$GREP -v ' # .* <.*>$' | $SED -r -e 's/(\b|x)([0-9a-fA-F]+)(\b|:|>)/X/g'"
fi
- $DIS_CMD $OTHER_FILE | $GREP -v $NAME | eval "$DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.other 2>&1
- $DIS_CMD $THIS_FILE | $GREP -v $NAME | eval "$DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.this 2>&1
+ if [ "$OPENJDK_TARGET_OS" = "windows" ]; then
+ DIS_GREP_ARG=-a
+ else
+ DIS_GREP_ARG=
+ fi
+ $DIS_CMD $OTHER_FILE | $GREP $DIS_GREP_ARG -v $NAME \
+ | eval "$DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.other 2>&1
+ $DIS_CMD $THIS_FILE | $GREP $DIS_GREP_ARG -v $NAME \
+ | eval "$DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.this 2>&1
LC_ALL=C $DIFF $WORK_FILE_BASE.dis.other $WORK_FILE_BASE.dis.this > $WORK_FILE_BASE.dis.diff
@@ -974,6 +992,15 @@
-o -name '*.jar' -o -name '*.diz' -o -name 'jcontrol' -o -name '*.properties' \
-o -name '*.data' -o -name '*.bfc' -o -name '*.src' -o -name '*.txt' \
-o -name '*.cfg' -o -name 'meta-index' -o -name '*.properties.ja' \
+ -o -name '*.xml' -o -name '*.html' -o -name '*.png' -o -name 'README' \
+ -o -name '*.zip' -o -name '*.jimage' -o -name '*.java' -o -name '*.mf' \
+ -o -name '*.jpg' -o -name '*.wsdl' -o -name '*.js' -o -name '*.sh' \
+ -o -name '*.bat' -o -name '*LICENSE' -o -name '*.d' -o -name '*store' \
+ -o -name 'blacklist' -o -name '*certs' -o -name '*.ttf' \
+ -o -name '*.jfc' -o -name '*.dat' -o -name 'release' -o -name '*.dir'\
+ -o -name '*.sym' -o -name '*.idl' -o -name '*.h' -o -name '*.access' \
+ -o -name '*.template' -o -name '*.policy' -o -name '*.security' \
+ -o -name 'COPYRIGHT' -o -name '*.1' \
-o -name 'classlist' \) | $SORT | $FILTER)
fi
@@ -996,14 +1023,6 @@
################################################################################
# Initiate configuration
-COMPARE_ROOT=/tmp/cimages.$USER
-$MKDIR -p $COMPARE_ROOT
-if [ "$OPENJDK_TARGET_OS" = "windows" ]; then
- if [ "$(uname -o)" = "Cygwin" ]; then
- COMPARE_ROOT=$(cygpath -msa $COMPARE_ROOT)
- fi
-fi
-
THIS="$SCRIPT_DIR"
echo "$THIS"
THIS_SCRIPT="$0"
@@ -1026,6 +1045,7 @@
echo ""
echo "--sort-symbols Sort all symbols before comparing"
echo "--strip Strip all binaries before comparing"
+ echo "--clean Clean all previous comparison results first"
echo ""
echo "[FILTER] List filenames in the image to compare, works for jars, zips, libs and execs"
echo "Example:"
@@ -1125,6 +1145,9 @@
--strip)
STRIP_ALL=true
;;
+ --clean)
+ CLEAN_OUTPUT=true
+ ;;
*)
CMP_NAMES=false
CMP_PERMS=false
@@ -1143,6 +1166,23 @@
shift
done
+if [ "$STRIP_ALL" = "true" ] && [ -z "$STRIP" ]; then
+ echo Warning: Not stripping even with --strip, since strip is missing on this platform
+ STRIP_ALL=false
+fi
+
+COMPARE_ROOT=/tmp/cimages.$USER
+if [ "$CLEAN_OUTPUT" = "true" ]; then
+ echo Cleaning old output in $COMPARE_ROOT.
+ $RM -rf $COMPARE_ROOT
+fi
+$MKDIR -p $COMPARE_ROOT
+if [ "$OPENJDK_TARGET_OS" = "windows" ]; then
+ if [ "$(uname -o)" = "Cygwin" ]; then
+ COMPARE_ROOT=$(cygpath -msa $COMPARE_ROOT)
+ fi
+fi
+
if [ "$CMP_2_ZIPS" = "true" ]; then
THIS_DIR="$(dirname $THIS_FILE)"
THIS_DIR="$(cd "$THIS_DIR" > /dev/null && pwd )"
@@ -1278,6 +1318,15 @@
echo " $OTHER_DEPLOY_APPLET_PLUGIN_DIR"
fi
+ if [ -d "$THIS/install/sparkle/Sparkle.framework" ] \
+ && [ -d "$OTHER/install/sparkle/Sparkle.framework" ]; then
+ THIS_SPARKLE_DIR="$THIS/install/sparkle/Sparkle.framework"
+ OTHER_SPARKLE_DIR="$OTHER/install/sparkle/Sparkle.framework"
+ echo "Also comparing install sparkle framework"
+ echo " $THIS_SPARKLE_DIR"
+ echo " $OTHER_SPARKLE_DIR"
+ fi
+
if [ -d "$OTHER/images" ]; then
OTHER_SEC_DIR="$OTHER/images"
else
@@ -1298,9 +1347,9 @@
THIS_JGSS_WINDOWS_BIN="$THIS_SEC_DIR/$JGSS_WINDOWS_BIN"
fi
- if [ -d "$THIS/docs" ] && [ -d "$OTHER/docs" ]; then
- THIS_DOCS="$THIS/docs"
- OTHER_DOCS="$OTHER/docs"
+ if [ -d "$THIS/images/docs" ] && [ -d "$OTHER/images/docs" ]; then
+ THIS_DOCS="$THIS/images/docs"
+ OTHER_DOCS="$OTHER/images/docs"
echo "Also comparing docs"
else
echo "WARNING! Docs haven't been built and won't be compared."
@@ -1314,23 +1363,23 @@
if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then
echo -n "JDK "
compare_dirs $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk
- echo -n "JRE "
+ echo -n "JRE "
compare_dirs $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre
echo -n "JDK "
compare_files $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk
- echo -n "JRE "
+ echo -n "JRE "
compare_files $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre
fi
if [ -n "$THIS_JDK_BUNDLE" ] && [ -n "$OTHER_JDK_BUNDLE" ]; then
echo -n "JDK Bundle "
compare_dirs $THIS_JDK_BUNDLE $OTHER_JDK_BUNDLE $COMPARE_ROOT/jdk-bundle
- echo -n "JRE Bundle "
+ echo -n "JRE Bundle "
compare_dirs $THIS_JRE_BUNDLE $OTHER_JRE_BUNDLE $COMPARE_ROOT/jre-bundle
echo -n "JDK Bundle "
compare_files $THIS_JDK_BUNDLE $OTHER_JDK_BUNDLE $COMPARE_ROOT/jdk-bundle
- echo -n "JRE Bundle "
+ echo -n "JRE Bundle "
compare_files $THIS_JRE_BUNDLE $OTHER_JRE_BUNDLE $COMPARE_ROOT/jre-bundle
fi
if [ -n "$THIS_DOCS" ] && [ -n "$OTHER_DOCS" ]; then
@@ -1349,13 +1398,19 @@
echo -n "JavaAppletPlugin "
compare_files $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin
fi
+ if [ -n "$THIS_SPARKLE_DIR" ] && [ -n "$OTHER_SPARKLE_DIR" ]; then
+ echo -n "Sparkle.framework "
+ compare_dirs $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle
+ echo -n "Sparkle.framework "
+ compare_files $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle
+ fi
fi
if [ "$CMP_PERMS" = "true" ]; then
if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then
echo -n "JDK "
compare_permissions $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk
- echo -n "JRE "
+ echo -n "JRE "
compare_permissions $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre
fi
if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then
@@ -1365,19 +1420,23 @@
echo -n "JavaAppletPlugin "
compare_permissions $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin
fi
+ if [ -n "$THIS_SPARKLE_DIR" ] && [ -n "$OTHER_SPARKLE_DIR" ]; then
+ echo -n "Sparkle.framework "
+ compare_permissions $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle
+ fi
fi
if [ "$CMP_TYPES" = "true" ]; then
if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then
echo -n "JDK "
compare_file_types $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk
- echo -n "JRE "
+ echo -n "JRE "
compare_file_types $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre
fi
if [ -n "$THIS_JDK_BUNDLE" ] && [ -n "$OTHER_JDK_BUNDLE" ]; then
echo -n "JDK Bundle "
compare_file_types $THIS_JDK_BUNDLE $OTHER_JDK_BUNDLE $COMPARE_ROOT/jdk-bundle
- echo -n "JRE Bundle "
+ echo -n "JRE Bundle "
compare_file_types $THIS_JRE_BUNDLE $OTHER_JRE_BUNDLE $COMPARE_ROOT/jre-bundle
fi
if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then
@@ -1387,19 +1446,23 @@
echo -n "JavaAppletPlugin "
compare_file_types $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin
fi
+ if [ -n "$THIS_SPARKLE_DIR" ] && [ -n "$OTHER_SPARKLE_DIR" ]; then
+ echo -n "Sparkle.framework "
+ compare_file_types $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle
+ fi
fi
if [ "$CMP_GENERAL" = "true" ]; then
if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then
echo -n "JDK "
compare_general_files $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk
- echo -n "JRE "
+ echo -n "JRE "
compare_general_files $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre
fi
if [ -n "$THIS_JDK_BUNDLE" ] && [ -n "$OTHER_JDK_BUNDLE" ]; then
echo -n "JDK Bundle "
compare_general_files $THIS_JDK_BUNDLE $OTHER_JDK_BUNDLE $COMPARE_ROOT/jdk-bundle
- echo -n "JRE Bundle "
+ echo -n "JRE Bundle "
compare_general_files $THIS_JRE_BUNDLE $OTHER_JRE_BUNDLE $COMPARE_ROOT/jre-bundle
fi
if [ -n "$THIS_DOCS" ] && [ -n "$OTHER_DOCS" ]; then
@@ -1413,6 +1476,10 @@
echo -n "JavaAppletPlugin "
compare_general_files $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin
fi
+ if [ -n "$THIS_SPARKLE_DIR" ] && [ -n "$OTHER_SPARKLE_DIR" ]; then
+ echo -n "Sparkle.framework "
+ compare_general_files $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle
+ fi
fi
if [ "$CMP_ZIPS" = "true" ]; then
@@ -1465,7 +1532,7 @@
echo -n "JDK "
compare_all_libs $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk
if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then
- echo -n "JRE "
+ echo -n "JRE "
compare_all_libs $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre
fi
fi
@@ -1476,13 +1543,17 @@
echo -n "JavaAppletPlugin "
compare_all_libs $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin
fi
+ if [ -n "$THIS_SPARKLE_DIR" ] && [ -n "$OTHER_SPARKLE_DIR" ]; then
+ echo -n "Sparkle.framework "
+ compare_all_libs $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle
+ fi
fi
if [ "$CMP_EXECS" = "true" ]; then
if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then
compare_all_execs $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk
if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then
- echo -n "JRE "
+ echo -n "JRE "
compare_all_execs $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre
fi
fi
@@ -1493,6 +1564,10 @@
echo -n "JavaAppletPlugin "
compare_all_execs $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin
fi
+ if [ -n "$THIS_SPARKLE_DIR" ] && [ -n "$OTHER_SPARKLE_DIR" ]; then
+ echo -n "Sparkle.framework "
+ compare_all_execs $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle
+ fi
fi
echo
--- a/common/bin/compare_exceptions.sh.incl Thu Feb 11 13:58:43 2016 -0800
+++ b/common/bin/compare_exceptions.sh.incl Mon Feb 15 09:44:42 2016 -0800
@@ -35,637 +35,580 @@
##########################################################################################
# Diff exceptions
-if [ "$OPENJDK_TARGET_OS" = "linux" ] && [ "$OPENJDK_TARGET_CPU" = "x86" ]; then
-
-STRIP_BEFORE_COMPARE="
-./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
-./demo/jvmti/gctest/lib/libgctest.so
-./demo/jvmti/heapTracker/lib/libheapTracker.so
-./demo/jvmti/heapViewer/lib/libheapViewer.so
-./demo/jvmti/minst/lib/libminst.so
-./demo/jvmti/mtrace/lib/libmtrace.so
-./demo/jvmti/versionCheck/lib/libversionCheck.so
-./demo/jvmti/waiters/lib/libwaiters.so
-"
+if [ "$OPENJDK_TARGET_OS" = "linux" ]; then
-ACCEPTED_BIN_DIFF="
-./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
-./demo/jvmti/gctest/lib/libgctest.so
-./demo/jvmti/heapTracker/lib/libheapTracker.so
-./demo/jvmti/heapViewer/lib/libheapViewer.so
-./demo/jvmti/minst/lib/libminst.so
-./demo/jvmti/mtrace/lib/libmtrace.so
-./demo/jvmti/versionCheck/lib/libversionCheck.so
-./demo/jvmti/waiters/lib/libwaiters.so
-./lib/i386/client/libjsig.so
-./lib/i386/client/libjvm.so
-./lib/i386/libattach.so
-./lib/i386/libdt_socket.so
-./lib/i386/libinstrument.so
-./lib/i386/libjsdt.so
-./lib/i386/libjsig.so
-./lib/i386/libmanagement.so
-./lib/i386/libnet.so
-./lib/i386/libnpt.so
-./lib/i386/libverify.so
-./lib/i386/server/libjsig.so
-./lib/i386/server/libjvm.so
-./bin/appletviewer
-./bin/idlj
-./bin/jar
-./bin/jarsigner
-./bin/java
-./bin/javac
-./bin/javadoc
-./bin/javah
-./bin/javap
-./bin/jdeps
-./bin/jcmd
-./bin/jconsole
-./bin/jdb
-./bin/jimage
-./bin/jinfo
-./bin/jjs
-./bin/jmap
-./bin/jps
-./bin/jrunscript
-./bin/jsadebugd
-./bin/jstack
-./bin/jstat
-./bin/jstatd
-./bin/keytool
-./bin/orbd
-./bin/pack200
-./bin/policytool
-./bin/rmic
-./bin/rmid
-./bin/rmiregistry
-./bin/schemagen
-./bin/serialver
-./bin/servertool
-./bin/tnameserv
-./bin/wsgen
-./bin/wsimport
-./bin/xjc
-"
+ STRIP_BEFORE_COMPARE="
+ ./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
+ ./demo/jvmti/gctest/lib/libgctest.so
+ ./demo/jvmti/heapTracker/lib/libheapTracker.so
+ ./demo/jvmti/heapViewer/lib/libheapViewer.so
+ ./demo/jvmti/minst/lib/libminst.so
+ ./demo/jvmti/mtrace/lib/libmtrace.so
+ ./demo/jvmti/versionCheck/lib/libversionCheck.so
+ ./demo/jvmti/waiters/lib/libwaiters.so
+ "
-# Issue with __FILE__ usage in generated header files prevent clean fulldump diff of
-# server jvm with old hotspot build.
-KNOWN_FULLDUMP_DIFF="
-./lib/i386/server/libjvm.so
-"
-KNOWN_DIS_DIFF="
-./lib/i386/server/libjvm.so
-"
-DIS_DIFF_FILTER="$SED \
- -e 's/\(:\t\)\([0-9a-z]\{2,2\} \)\{1,7\}/\1<hex>/g' \
- -e 's/0x[0-9a-z]\{2,9\}/<hex>/g'"
-fi
-
-if [ "$OPENJDK_TARGET_OS" = "linux" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then
-
-STRIP_BEFORE_COMPARE="
-./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
-./demo/jvmti/gctest/lib/libgctest.so
-./demo/jvmti/heapTracker/lib/libheapTracker.so
-./demo/jvmti/heapViewer/lib/libheapViewer.so
-./demo/jvmti/minst/lib/libminst.so
-./demo/jvmti/mtrace/lib/libmtrace.so
-./demo/jvmti/versionCheck/lib/libversionCheck.so
-./demo/jvmti/waiters/lib/libwaiters.so
-"
+ ACCEPTED_BIN_DIFF="
+ ./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
+ ./demo/jvmti/gctest/lib/libgctest.so
+ ./demo/jvmti/heapTracker/lib/libheapTracker.so
+ ./demo/jvmti/heapViewer/lib/libheapViewer.so
+ ./demo/jvmti/minst/lib/libminst.so
+ ./demo/jvmti/mtrace/lib/libmtrace.so
+ ./demo/jvmti/versionCheck/lib/libversionCheck.so
+ ./demo/jvmti/waiters/lib/libwaiters.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/client/libjsig.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/client/libjvm.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/libattach.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/libdt_socket.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/libinstrument.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/libjsdt.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/libjsig.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/libmanagement.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/libnet.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/libnpt.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/libverify.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/minimal/libjsig.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/minimal/libjvm.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/server/libjsig.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/server/libjvm.so
+ ./bin/appletviewer
+ ./bin/idlj
+ ./bin/jar
+ ./bin/jarsigner
+ ./bin/java
+ ./bin/javac
+ ./bin/javadoc
+ ./bin/javah
+ ./bin/javap
+ ./bin/jdeps
+ ./bin/jcmd
+ ./bin/jconsole
+ ./bin/jdb
+ ./bin/jhsdb
+ ./bin/jimage
+ ./bin/jinfo
+ ./bin/jjs
+ ./bin/jmap
+ ./bin/jps
+ ./bin/jrunscript
+ ./bin/jsadebugd
+ ./bin/jshell
+ ./bin/jstack
+ ./bin/jstat
+ ./bin/jstatd
+ ./bin/keytool
+ ./bin/orbd
+ ./bin/pack200
+ ./bin/policytool
+ ./bin/rmic
+ ./bin/rmid
+ ./bin/rmiregistry
+ ./bin/schemagen
+ ./bin/serialver
+ ./bin/servertool
+ ./bin/tnameserv
+ ./bin/wsgen
+ ./bin/wsimport
+ ./bin/xjc
+ "
-ACCEPTED_BIN_DIFF="
-./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
-./demo/jvmti/gctest/lib/libgctest.so
-./demo/jvmti/heapTracker/lib/libheapTracker.so
-./demo/jvmti/heapViewer/lib/libheapViewer.so
-./demo/jvmti/minst/lib/libminst.so
-./demo/jvmti/mtrace/lib/libmtrace.so
-./demo/jvmti/versionCheck/lib/libversionCheck.so
-./demo/jvmti/waiters/lib/libwaiters.so
-./lib/amd64/libattach.so
-./lib/amd64/libdt_socket.so
-./lib/amd64/libinstrument.so
-./lib/amd64/libjsdt.so
-./lib/amd64/libjsig.so
-./lib/amd64/libmanagement.so
-./lib/amd64/libnet.so
-./lib/amd64/libnpt.so
-./lib/amd64/libsaproc.so
-./lib/amd64/libverify.so
-./lib/amd64/server/libjsig.so
-./lib/amd64/server/libjvm.so
-./bin/appletviewer
-./bin/idlj
-./bin/jar
-./bin/jarsigner
-./bin/java
-./bin/javac
-./bin/javadoc
-./bin/javah
-./bin/javap
-./bin/jdeps
-./bin/jcmd
-./bin/jconsole
-./bin/jdb
-./bin/jimage
-./bin/jinfo
-./bin/jjs
-./bin/jmap
-./bin/jps
-./bin/jrunscript
-./bin/jsadebugd
-./bin/jstack
-./bin/jstat
-./bin/jstatd
-./bin/keytool
-./bin/orbd
-./bin/pack200
-./bin/policytool
-./bin/rmic
-./bin/rmid
-./bin/rmiregistry
-./bin/schemagen
-./bin/serialver
-./bin/servertool
-./bin/tnameserv
-./bin/wsgen
-./bin/wsimport
-./bin/xjc
-"
+ # Issue with __FILE__ usage in generated header files prevent clean fulldump diff of
+ # server jvm with old hotspot build.
+ KNOWN_FULLDUMP_DIFF="
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/client/libjvm.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/server/libjvm.so
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/minimal/libjvm.so
+ "
-# Issue with __FILE__ usage in generated header files prevent clean fulldump diff of
-# server jvm with old hotspot build.
-KNOWN_FULLDUMP_DIFF="
-./lib/amd64/server/libjvm.so
-"
-
+ if [ "$OPENJDK_TARGET_CPU" = "x86" ]; then
+ KNOWN_DIS_DIFF="
+ ./lib$OPENJDK_TARGET_CPU_LIBDIR/server/libjvm.so
+ "
+ DIS_DIFF_FILTER="$SED \
+ -e 's/\(:\t\)\([0-9a-z]\{2,2\} \)\{1,7\}/\1<hex>/g' \
+ -e 's/0x[0-9a-z]\{2,9\}/<hex>/g'"
+ fi
fi
if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then
-STRIP_BEFORE_COMPARE="
-./demo/jni/Poller/lib/libPoller.so
-./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
-./demo/jvmti/gctest/lib/libgctest.so
-./demo/jvmti/heapTracker/lib/libheapTracker.so
-./demo/jvmti/heapViewer/lib/libheapViewer.so
-./demo/jvmti/minst/lib/libminst.so
-./demo/jvmti/mtrace/lib/libmtrace.so
-./demo/jvmti/versionCheck/lib/libversionCheck.so
-./demo/jvmti/waiters/lib/libwaiters.so
-"
+ STRIP_BEFORE_COMPARE="
+ ./demo/jni/Poller/lib/libPoller.so
+ ./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
+ ./demo/jvmti/gctest/lib/libgctest.so
+ ./demo/jvmti/heapTracker/lib/libheapTracker.so
+ ./demo/jvmti/heapViewer/lib/libheapViewer.so
+ ./demo/jvmti/minst/lib/libminst.so
+ ./demo/jvmti/mtrace/lib/libmtrace.so
+ ./demo/jvmti/versionCheck/lib/libversionCheck.so
+ ./demo/jvmti/waiters/lib/libwaiters.so
+ "
-SORT_SYMBOLS="
-./lib/amd64/server/libjvm.so
-./lib/amd64/libsaproc.so
-"
+ SORT_SYMBOLS="
+ ./lib/amd64/server/libjvm.so
+ ./lib/amd64/libfontmanager.so
+ ./lib/amd64/libjimage.so
+ ./lib/amd64/libsaproc.so
+ ./lib/amd64/libunpack.so
+ ./bin/unpack200
+ "
-SKIP_BIN_DIFF="true"
+ SKIP_BIN_DIFF="true"
-ACCEPTED_SMALL_SIZE_DIFF="
-./demo/jni/Poller/lib/libPoller.so
-./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
-./demo/jvmti/gctest/lib/libgctest.so
-./demo/jvmti/heapTracker/lib/libheapTracker.so
-./demo/jvmti/heapViewer/lib/libheapViewer.so
-./demo/jvmti/minst/lib/libminst.so
-./demo/jvmti/mtrace/lib/libmtrace.so
-./demo/jvmti/versionCheck/lib/libversionCheck.so
-./demo/jvmti/waiters/lib/libwaiters.so
-./lib/amd64/jli/libjli.so
-./lib/amd64/jspawnhelper
-./lib/amd64/libJdbcOdbc.so
-./lib/amd64/libattach.so
-./lib/amd64/libawt.so
-./lib/amd64/libawt_headless.so
-./lib/amd64/libawt_xawt.so
-./lib/amd64/libdcpr.so
-./lib/amd64/libdt_socket.so
-./lib/amd64/libfontmanager.so
-./lib/amd64/libinstrument.so
-./lib/amd64/libj2gss.so
-./lib/amd64/libj2pcsc.so
-./lib/amd64/libj2pkcs11.so
-./lib/amd64/libj2ucrypto.so
-./lib/amd64/libjaas_unix.so
-./lib/amd64/libjava.so
-./lib/amd64/libjawt.so
-./lib/amd64/libjdwp.so
-./lib/amd64/libjfr.so
-./lib/amd64/libjpeg.so
-./lib/amd64/libjsdt.so
-./lib/amd64/libjsound.so
-./lib/amd64/libkcms.so
-./lib/amd64/liblcms.so
-./lib/amd64/libmanagement.so
-./lib/amd64/libmlib_image.so
-./lib/amd64/libnet.so
-./lib/amd64/libnio.so
-./lib/amd64/libnpt.so
-./lib/amd64/libsctp.so
-./lib/amd64/libsplashscreen.so
-./lib/amd64/libsunec.so
-./lib/amd64/libsunwjdga.so
-./lib/amd64/libt2k.so
-./lib/amd64/libunpack.so
-./lib/amd64/libverify.so
-./lib/amd64/libzip.so
-./lib/amd64/server/64/libjvm_db.so
-./lib/amd64/server/64/libjvm_dtrace.so
-./lib/amd64/server/libjvm.so
-./lib/amd64/server/libjvm_db.so
-./lib/amd64/server/libjvm_dtrace.so
-./bin/appletviewer
-./bin/idlj
-./bin/jar
-./bin/jarsigner
-./bin/java
-./bin/javac
-./bin/javadoc
-./bin/javah
-./bin/javap
-./bin/jdeps
-./bin/jcmd
-./bin/jconsole
-./bin/jdb
-./bin/jimage
-./bin/jinfo
-./bin/jjs
-./bin/jmap
-./bin/jps
-./bin/jrunscript
-./bin/jsadebugd
-./bin/jstack
-./bin/jstat
-./bin/jstatd
-./bin/keytool
-./bin/orbd
-./bin/pack200
-./bin/policytool
-./bin/rmic
-./bin/rmid
-./bin/rmiregistry
-./bin/schemagen
-./bin/serialver
-./bin/servertool
-./bin/tnameserv
-./bin/unpack200
-./bin/wsgen
-./bin/wsimport
-./bin/xjc
-"
+ ACCEPTED_SMALL_SIZE_DIFF="
+ ./demo/jni/Poller/lib/libPoller.so
+ ./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
+ ./demo/jvmti/gctest/lib/libgctest.so
+ ./demo/jvmti/heapTracker/lib/libheapTracker.so
+ ./demo/jvmti/heapViewer/lib/libheapViewer.so
+ ./demo/jvmti/minst/lib/libminst.so
+ ./demo/jvmti/mtrace/lib/libmtrace.so
+ ./demo/jvmti/versionCheck/lib/libversionCheck.so
+ ./demo/jvmti/waiters/lib/libwaiters.so
+ ./lib/amd64/jli/libjli.so
+ ./lib/amd64/jspawnhelper
+ ./lib/amd64/libJdbcOdbc.so
+ ./lib/amd64/libattach.so
+ ./lib/amd64/libawt.so
+ ./lib/amd64/libawt_headless.so
+ ./lib/amd64/libawt_xawt.so
+ ./lib/amd64/libdcpr.so
+ ./lib/amd64/libdt_socket.so
+ ./lib/amd64/libfontmanager.so
+ ./lib/amd64/libinstrument.so
+ ./lib/amd64/libj2gss.so
+ ./lib/amd64/libj2pcsc.so
+ ./lib/amd64/libj2pkcs11.so
+ ./lib/amd64/libj2ucrypto.so
+ ./lib/amd64/libjaas_unix.so
+ ./lib/amd64/libjava.so
+ ./lib/amd64/libjawt.so
+ ./lib/amd64/libjdwp.so
+ ./lib/amd64/libjfr.so
+ ./lib/amd64/libjpeg.so
+ ./lib/amd64/libjsdt.so
+ ./lib/amd64/libjsound.so
+ ./lib/amd64/libkcms.so
+ ./lib/amd64/liblcms.so
+ ./lib/amd64/libmanagement.so
+ ./lib/amd64/libmlib_image.so
+ ./lib/amd64/libnet.so
+ ./lib/amd64/libnio.so
+ ./lib/amd64/libnpt.so
+ ./lib/amd64/libsctp.so
+ ./lib/amd64/libsplashscreen.so
+ ./lib/amd64/libsunec.so
+ ./lib/amd64/libsunwjdga.so
+ ./lib/amd64/libt2k.so
+ ./lib/amd64/libunpack.so
+ ./lib/amd64/libverify.so
+ ./lib/amd64/libzip.so
+ ./lib/amd64/server/64/libjvm_db.so
+ ./lib/amd64/server/64/libjvm_dtrace.so
+ ./lib/amd64/server/libjvm.so
+ ./lib/amd64/server/libjvm_db.so
+ ./lib/amd64/server/libjvm_dtrace.so
+ ./bin/appletviewer
+ ./bin/idlj
+ ./bin/jar
+ ./bin/jarsigner
+ ./bin/java
+ ./bin/javac
+ ./bin/javadoc
+ ./bin/javah
+ ./bin/javap
+ ./bin/jdeps
+ ./bin/jcmd
+ ./bin/jconsole
+ ./bin/jdb
+ ./bin/jimage
+ ./bin/jinfo
+ ./bin/jjs
+ ./bin/jmap
+ ./bin/jps
+ ./bin/jrunscript
+ ./bin/jsadebugd
+ ./bin/jstack
+ ./bin/jstat
+ ./bin/jstatd
+ ./bin/keytool
+ ./bin/orbd
+ ./bin/pack200
+ ./bin/policytool
+ ./bin/rmic
+ ./bin/rmid
+ ./bin/rmiregistry
+ ./bin/schemagen
+ ./bin/serialver
+ ./bin/servertool
+ ./bin/tnameserv
+ ./bin/unpack200
+ ./bin/wsgen
+ ./bin/wsimport
+ ./bin/xjc
+ "
-SKIP_FULLDUMP_DIFF="true"
+ SKIP_FULLDUMP_DIFF="true"
-# Filter random C++ symbol strings.
-# Some numbers differ randomly.
-DIS_DIFF_FILTER="$SED \
- -e 's/\.[a-zA-Z0-9_\$]\{15\}/<SYM>/g' \
- -e 's/\(\# \)[0-9a-f]*\( <\)/\1<HEX>\2/g' \
- -e 's/0x[0-9a-f]*$/<HEX>/g' \
- -e 's/0x[0-9a-f]*\([,(>]\)/<HEX>\1/g' \
- -e 's/: [0-9a-f][0-9a-f]\( [0-9a-f][0-9a-f]\)\{2,10\}/: <NUMS>/g' \
- -e 's/ [\.A-Za-z0-9%@]\{16\}$/ <BIN>/g'"
+ # Filter random C++ symbol strings.
+ # Some numbers differ randomly.
+ DIS_DIFF_FILTER="$SED \
+ -e 's/\.[a-zA-Z0-9_\$]\{15\}/<SYM>/g' \
+ -e 's/\(\# \)[0-9a-f]*\( <\)/\1<HEX>\2/g' \
+ -e 's/0x[0-9a-f]*$/<HEX>/g' \
+ -e 's/0x[0-9a-f]*\([,(>]\)/<HEX>\1/g' \
+ -e 's/: [0-9a-f][0-9a-f]\( [0-9a-f][0-9a-f]\)\{2,10\}/: <NUMS>/g' \
+ -e 's/ [\.A-Za-z0-9%@]\{16\}$/ <BIN>/g'"
fi
if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "sparcv9" ]; then
-STRIP_BEFORE_COMPARE="
-./demo/jni/Poller/lib/libPoller.so
-./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
-./demo/jvmti/gctest/lib/libgctest.so
-./demo/jvmti/heapTracker/lib/libheapTracker.so
-./demo/jvmti/heapViewer/lib/libheapViewer.so
-./demo/jvmti/minst/lib/libminst.so
-./demo/jvmti/mtrace/lib/libmtrace.so
-./demo/jvmti/versionCheck/lib/libversionCheck.so
-./demo/jvmti/waiters/lib/libwaiters.so
-"
+ STRIP_BEFORE_COMPARE="
+ ./demo/jni/Poller/lib/libPoller.so
+ ./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
+ ./demo/jvmti/gctest/lib/libgctest.so
+ ./demo/jvmti/heapTracker/lib/libheapTracker.so
+ ./demo/jvmti/heapViewer/lib/libheapViewer.so
+ ./demo/jvmti/minst/lib/libminst.so
+ ./demo/jvmti/mtrace/lib/libmtrace.so
+ ./demo/jvmti/versionCheck/lib/libversionCheck.so
+ ./demo/jvmti/waiters/lib/libwaiters.so
+ "
-SORT_SYMBOLS="
-./demo/jvmti/waiters/lib/libwaiters.so
-./lib/sparcv9/libjsig.so
-./lib/sparcv9/libsaproc.so
-./lib/sparcv9/server/libjvm.so
-./lib/sparcv9/server/libjvm_dtrace.so
-"
+ SORT_SYMBOLS="
+ ./demo/jvmti/waiters/lib/libwaiters.so
+ ./lib/sparcv9/libjsig.so
+ ./lib/sparcv9/libfontmanager.so
+ ./lib/sparcv9/libjimage.so
+ ./lib/sparcv9/libsaproc.so
+ ./lib/sparcv9/libunpack.so
+ ./lib/sparcv9/server/libjvm.so
+ ./lib/sparcv9/server/libjvm_dtrace.so
+ ./bin/unpack200
+ "
-SKIP_BIN_DIFF="true"
+ SKIP_BIN_DIFF="true"
-ACCEPTED_SMALL_SIZE_DIFF="
-./demo/jni/Poller/lib/libPoller.so
-./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
-./demo/jvmti/gctest/lib/libgctest.so
-./demo/jvmti/heapTracker/lib/libheapTracker.so
-./demo/jvmti/heapViewer/lib/libheapViewer.so
-./demo/jvmti/minst/lib/libminst.so
-./demo/jvmti/mtrace/lib/libmtrace.so
-./demo/jvmti/versionCheck/lib/libversionCheck.so
-./demo/jvmti/waiters/lib/libwaiters.so
-./lib/sparcv9/client/libjvm.so
-./lib/sparcv9/jli/libjli.so
-./lib/sparcv9/jspawnhelper
-./lib/sparcv9/libJdbcOdbc.so
-./lib/sparcv9/libattach.so
-./lib/sparcv9/libawt.so
-./lib/sparcv9/libawt_headless.so
-./lib/sparcv9/libawt_xawt.so
-./lib/sparcv9/libdcpr.so
-./lib/sparcv9/libdt_socket.so
-./lib/sparcv9/libfontmanager.so
-./lib/sparcv9/libinstrument.so
-./lib/sparcv9/libj2gss.so
-./lib/sparcv9/libj2pcsc.so
-./lib/sparcv9/libj2pkcs11.so
-./lib/sparcv9/libj2ucrypto.so
-./lib/sparcv9/libjaas_unix.so
-./lib/sparcv9/libjava.so
-./lib/sparcv9/libjawt.so
-./lib/sparcv9/libjdwp.so
-./lib/sparcv9/libjfr.so
-./lib/sparcv9/libjpeg.so
-./lib/sparcv9/libjsdt.so
-./lib/sparcv9/libjsound.so
-./lib/sparcv9/libkcms.so
-./lib/sparcv9/liblcms.so
-./lib/sparcv9/libmanagement.so
-./lib/sparcv9/libmlib_image.so
-./lib/sparcv9/libmlib_image_v.so
-./lib/sparcv9/libnet.so
-./lib/sparcv9/libnio.so
-./lib/sparcv9/libnpt.so
-./lib/sparcv9/libsctp.so
-./lib/sparcv9/libsplashscreen.so
-./lib/sparcv9/libsunec.so
-./lib/sparcv9/libsunwjdga.so
-./lib/sparcv9/libt2k.so
-./lib/sparcv9/libunpack.so
-./lib/sparcv9/libverify.so
-./lib/sparcv9/libzip.so
-./lib/sparcv9/server/libjvm.so
-./bin/appletviewer
-./bin/idlj
-./bin/jar
-./bin/jarsigner
-./bin/java
-./bin/javac
-./bin/javadoc
-./bin/javah
-./bin/javap
-./bin/jdeps
-./bin/jcmd
-./bin/jconsole
-./bin/jdb
-./bin/jimage
-./bin/jinfo
-./bin/jjs
-./bin/jmap
-./bin/jps
-./bin/jrunscript
-./bin/jsadebugd
-./bin/jstack
-./bin/jstat
-./bin/jstatd
-./bin/keytool
-./bin/orbd
-./bin/pack200
-./bin/policytool
-./bin/rmic
-./bin/rmid
-./bin/rmiregistry
-./bin/schemagen
-./bin/serialver
-./bin/servertool
-./bin/tnameserv
-./bin/unpack200
-./bin/wsgen
-./bin/wsimport
-./bin/xjc
-"
+ ACCEPTED_SMALL_SIZE_DIFF="
+ ./demo/jni/Poller/lib/libPoller.so
+ ./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so
+ ./demo/jvmti/gctest/lib/libgctest.so
+ ./demo/jvmti/heapTracker/lib/libheapTracker.so
+ ./demo/jvmti/heapViewer/lib/libheapViewer.so
+ ./demo/jvmti/minst/lib/libminst.so
+ ./demo/jvmti/mtrace/lib/libmtrace.so
+ ./demo/jvmti/versionCheck/lib/libversionCheck.so
+ ./demo/jvmti/waiters/lib/libwaiters.so
+ ./lib/sparcv9/client/libjvm.so
+ ./lib/sparcv9/jli/libjli.so
+ ./lib/sparcv9/jspawnhelper
+ ./lib/sparcv9/libJdbcOdbc.so
+ ./lib/sparcv9/libattach.so
+ ./lib/sparcv9/libawt.so
+ ./lib/sparcv9/libawt_headless.so
+ ./lib/sparcv9/libawt_xawt.so
+ ./lib/sparcv9/libdcpr.so
+ ./lib/sparcv9/libdt_socket.so
+ ./lib/sparcv9/libfontmanager.so
+ ./lib/sparcv9/libinstrument.so
+ ./lib/sparcv9/libj2gss.so
+ ./lib/sparcv9/libj2pcsc.so
+ ./lib/sparcv9/libj2pkcs11.so
+ ./lib/sparcv9/libj2ucrypto.so
+ ./lib/sparcv9/libjaas_unix.so
+ ./lib/sparcv9/libjava.so
+ ./lib/sparcv9/libjawt.so
+ ./lib/sparcv9/libjdwp.so
+ ./lib/sparcv9/libjfr.so
+ ./lib/sparcv9/libjpeg.so
+ ./lib/sparcv9/libjsdt.so
+ ./lib/sparcv9/libjsound.so
+ ./lib/sparcv9/libkcms.so
+ ./lib/sparcv9/liblcms.so
+ ./lib/sparcv9/libmanagement.so
+ ./lib/sparcv9/libmlib_image.so
+ ./lib/sparcv9/libmlib_image_v.so
+ ./lib/sparcv9/libnet.so
+ ./lib/sparcv9/libnio.so
+ ./lib/sparcv9/libnpt.so
+ ./lib/sparcv9/libsctp.so
+ ./lib/sparcv9/libsplashscreen.so
+ ./lib/sparcv9/libsunec.so
+ ./lib/sparcv9/libsunwjdga.so
+ ./lib/sparcv9/libt2k.so
+ ./lib/sparcv9/libunpack.so
+ ./lib/sparcv9/libverify.so
+ ./lib/sparcv9/libzip.so
+ ./lib/sparcv9/server/libjvm.so
+ ./bin/appletviewer
+ ./bin/idlj
+ ./bin/jar
+ ./bin/jarsigner
+ ./bin/java
+ ./bin/javac
+ ./bin/javadoc
+ ./bin/javah
+ ./bin/javap
+ ./bin/jdeps
+ ./bin/jcmd
+ ./bin/jconsole
+ ./bin/jdb
+ ./bin/jimage
+ ./bin/jinfo
+ ./bin/jjs
+ ./bin/jmap
+ ./bin/jps
+ ./bin/jrunscript
+ ./bin/jsadebugd
+ ./bin/jstack
+ ./bin/jstat
+ ./bin/jstatd
+ ./bin/keytool
+ ./bin/orbd
+ ./bin/pack200
+ ./bin/policytool
+ ./bin/rmic
+ ./bin/rmid
+ ./bin/rmiregistry
+ ./bin/schemagen
+ ./bin/serialver
+ ./bin/servertool
+ ./bin/tnameserv
+ ./bin/unpack200
+ ./bin/wsgen
+ ./bin/wsimport
+ ./bin/xjc
+ "
-# Some numbers differ randomly.
-DIS_DIFF_FILTER="$SED \
- -e 's/\$[a-zA-Z0-9_\$]\{15\}/<SYM>/g' \
- -e 's/: [0-9a-f][0-9a-f]\( [0-9a-f][0-9a-f]\)\{2,10\}/: <NUMS>/g' \
- -e 's/, [0-9a-fx\-]\{1,8\}/, <CONST>/g' \
- -e 's/call [0-9a-f]\{7\}/call <ADDR>/g' \
- -e 's/0x[0-9a-f]\{1,8\}/<HEX>/g' \
- -e 's/\! [0-9a-f]\{1,8\} /! <ADDR> /g'"
+ # Some numbers differ randomly.
+ DIS_DIFF_FILTER="$SED \
+ -e 's/\$[a-zA-Z0-9_\$]\{15\}/<SYM>/g' \
+ -e 's/: [0-9a-f][0-9a-f]\( [0-9a-f][0-9a-f]\)\{2,10\}/: <NUMS>/g' \
+ -e 's/, [0-9a-fx\-]\{1,8\}/, <CONST>/g' \
+ -e 's/call [0-9a-f]\{7\}/call <ADDR>/g' \
+ -e 's/0x[0-9a-f]\{1,8\}/<HEX>/g' \
+ -e 's/\! [0-9a-f]\{1,8\} /! <ADDR> /g'"
-# libjvm.so
-# __FILE__ macro usage in debug.hpp causes differences between old and new
-# hotspot builds in ad_sparc.o and ad_sparc_clone.o. The .o files compare
-# equal when stripped, but at link time differences appear. Removing
-# __FILE__ from ShouldNotCallThis() and ShouldNotReachHere() removes
-# the differences.
-KNOWN_DIS_DIFF="
-./lib/sparcv9/server/libjvm.so
-"
+ # libjvm.so
+ # __FILE__ macro usage in debug.hpp causes differences between old and new
+ # hotspot builds in ad_sparc.o and ad_sparc_clone.o. The .o files compare
+ # equal when stripped, but at link time differences appear. Removing
+ # __FILE__ from ShouldNotCallThis() and ShouldNotReachHere() removes
+ # the differences.
+ KNOWN_DIS_DIFF="
+ ./lib/sparcv9/server/libjvm.so
+ ./lib/sparcv9/libsaproc.so
+ "
-SKIP_FULLDUMP_DIFF="true"
+ SKIP_FULLDUMP_DIFF="true"
fi
if [ "$OPENJDK_TARGET_OS" = "windows" ]; then
-ACCEPTED_JARZIP_CONTENTS="
-/modules_libs/java.security.jgss/w2k_lsa_auth.diz
-/modules_libs/java.security.jgss/w2k_lsa_auth.dll
-"
+ ACCEPTED_JARZIP_CONTENTS="
+ /modules_libs/java.security.jgss/w2k_lsa_auth.diz
+ /modules_libs/java.security.jgss/w2k_lsa_auth.dll
+ "
-# Probably should add all libs here
-ACCEPTED_SMALL_SIZE_DIFF="
-./demo/jvmti/gctest/lib/gctest.dll
-./demo/jvmti/heapTracker/lib/heapTracker.dll
-./demo/jvmti/minst/lib/minst.dll
-./bin/attach.dll
-./bin/jsoundds.dll
-./bin/server/jvm.dll
-./bin/appletviewer.exe
-./bin/idlj.exe
-./bin/jar.exe
-./bin/jarsigner.exe
-./bin/java-rmi.exe
-./bin/java.exe
-./bin/javac.exe
-./bin/javadoc.exe
-./bin/javah.exe
-./bin/javap.exe
-./bin/jdeps.exe
-./bin/javaw.exe
-./bin/jcmd.exe
-./bin/jconsole.exe
-./bin/jdb.exe
-./bin/jimage.exe
-./bin/jinfo.exe
-./bin/jjs.exe
-./bin/jmap.exe
-./bin/jps.exe
-./bin/jrunscript.exe
-./bin/jsadebugd.exe
-./bin/jstack.exe
-./bin/jstat.exe
-./bin/jstatd.exe
-./bin/keytool.exe
-./bin/kinit.exe
-./bin/klist.exe
-./bin/ktab.exe
-./bin/orbd.exe
-./bin/pack200.exe
-./bin/policytool.exe
-./bin/rmic.exe
-./bin/rmid.exe
-./bin/rmiregistry.exe
-./bin/schemagen.exe
-./bin/serialver.exe
-./bin/servertool.exe
-./bin/tnameserv.exe
-./bin/unpack200.exe
-./bin/wsgen.exe
-./bin/wsimport.exe
-./bin/xjc.exe
-"
+ # Probably should add all libs here
+ ACCEPTED_SMALL_SIZE_DIFF="
+ ./demo/jvmti/gctest/lib/gctest.dll
+ ./demo/jvmti/heapTracker/lib/heapTracker.dll
+ ./demo/jvmti/minst/lib/minst.dll
+ ./bin/attach.dll
+ ./bin/jsoundds.dll
+ ./bin/server/jvm.dll
+ ./bin/appletviewer.exe
+ ./bin/idlj.exe
+ ./bin/jar.exe
+ ./bin/jarsigner.exe
+ ./bin/java-rmi.exe
+ ./bin/java.exe
+ ./bin/javac.exe
+ ./bin/javadoc.exe
+ ./bin/javah.exe
+ ./bin/javap.exe
+ ./bin/jdeps.exe
+ ./bin/javaw.exe
+ ./bin/jcmd.exe
+ ./bin/jconsole.exe
+ ./bin/jdb.exe
+ ./bin/jimage.exe
+ ./bin/jinfo.exe
+ ./bin/jjs.exe
+ ./bin/jmap.exe
+ ./bin/jps.exe
+ ./bin/jrunscript.exe
+ ./bin/jsadebugd.exe
+ ./bin/jstack.exe
+ ./bin/jstat.exe
+ ./bin/jstatd.exe
+ ./bin/keytool.exe
+ ./bin/kinit.exe
+ ./bin/klist.exe
+ ./bin/ktab.exe
+ ./bin/orbd.exe
+ ./bin/pack200.exe
+ ./bin/policytool.exe
+ ./bin/rmic.exe
+ ./bin/rmid.exe
+ ./bin/rmiregistry.exe
+ ./bin/schemagen.exe
+ ./bin/serialver.exe
+ ./bin/servertool.exe
+ ./bin/tnameserv.exe
+ ./bin/unpack200.exe
+ ./bin/wsgen.exe
+ ./bin/wsimport.exe
+ ./bin/xjc.exe
+ "
-# jabswitch.exe is compiled and linked with incremental turned on in the old
-# build. This makes no sense, so it's turned off in the new build.
-ACCEPTED_SIZE_DIFF="
-./bin/jabswitch.exe
-"
-ACCEPTED_DIS_DIFF="
-./bin/jabswitch.exe
-"
+ ACCEPTED_DIS_DIFF="
+ ./bin/jabswitch.exe
+ "
-# On windows, there are unavoidable allignment issues making
-# a perfect disasm diff impossible. Filter out the following:
-# * Random parts of C++ symbols (this is a bit greedy, but does the trick)
-# @XXXXX
-# * Hexadecimal addresses that are sometimes alligned differently.
-# * Dates in version strings XXXX_XX_XX.
-DIS_DIFF_FILTER="$SED \
- -e 's/^ [0-9A-F]\{16\}: //g' \
- -e 's/[@?][A-Za-z0-9_]\{1,25\}/<SYM>/g' \
- -e 's/\([\[+]\)[0-9A-F]\{4,16\}h\]/\1<HEXSTR>]/g' \
- -e 's/_[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}/_<DATE>/g'"
-#DIS_DIFF_FILTER="$CAT"
+ # On windows, there are unavoidable allignment issues making
+ # a perfect disasm diff impossible. Filter out the following:
+ # * Random parts of C++ symbols (this is a bit greedy, but does the trick)
+ # @XXXXX
+ # * Hexadecimal addresses that are sometimes alligned differently.
+ # * Dates in version strings XXXX_XX_XX.
+ DIS_DIFF_FILTER="$SED \
+ -e 's/^ [0-9A-F]\{16\}: //g' \
+ -e 's/[@?][A-Za-z0-9_]\{1,25\}/<SYM>/g' \
+ -e 's/\([\[+]\)[0-9A-F]\{4,16\}h\]/\1<HEXSTR>]/g' \
+ -e 's/_[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}/_<DATE>/g'"
+ #DIS_DIFF_FILTER="$CAT"
-SKIP_BIN_DIFF="true"
-SKIP_FULLDUMP_DIFF="true"
+ SKIP_BIN_DIFF="true"
+ SKIP_FULLDUMP_DIFF="true"
fi
if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then
-ACCEPTED_JARZIP_CONTENTS="
-/META-INF/INDEX.LIST
-"
+
+ ACCEPTED_JARZIP_CONTENTS="
+ /META-INF/INDEX.LIST
+ "
-ACCEPTED_BIN_DIFF="
-./bin/appletviewer
-./bin/idlj
-./bin/jar
-./bin/jarsigner
-./bin/java
-./bin/javac
-./bin/javadoc
-./bin/javah
-./bin/javap
-./bin/javaws
-./bin/jdeps
-./bin/jcmd
-./bin/jconsole
-./bin/jdb
-./bin/jimage
-./bin/jinfo
-./bin/jjs
-./bin/jmap
-./bin/jps
-./bin/jrunscript
-./bin/jsadebugd
-./bin/jstack
-./bin/jstat
-./bin/jstatd
-./bin/keytool
-./bin/orbd
-./bin/pack200
-./bin/policytool
-./bin/rmic
-./bin/rmid
-./bin/rmiregistry
-./bin/schemagen
-./bin/serialver
-./bin/servertool
-./bin/tnameserv
-./bin/wsgen
-./bin/wsimport
-./bin/xjc
-./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.dylib
-./demo/jvmti/gctest/lib/libgctest.dylib
-./demo/jvmti/heapTracker/lib/libheapTracker.dylib
-./demo/jvmti/heapViewer/lib/libheapViewer.dylib
-./demo/jvmti/minst/lib/libminst.dylib
-./demo/jvmti/mtrace/lib/libmtrace.dylib
-./demo/jvmti/versionCheck/lib/libversionCheck.dylib
-./demo/jvmti/waiters/lib/libwaiters.dylib
-./Contents/Home/bin/_javaws
-./Contents/Home/bin/idlj
-./Contents/Home/bin/servertool
-./Contents/Home/lib/shortcuts/JavaWSApplicationStub
-./Contents/Home/lib/jli/libjli.dylib
-./Contents/Home/lib/libAppleScriptEngine.dylib
-./Contents/Home/lib/libattach.dylib
-./Contents/Home/lib/libawt_lwawt.dylib
-./Contents/Home/lib/libdeploy.dylib
-./Contents/Home/lib/libdt_socket.dylib
-./Contents/Home/lib/libinstrument.dylib
-./Contents/Home/lib/libjdwp.dylib
-./Contents/Home/lib/libjsdt.dylib
-./Contents/Home/lib/libjsig.dylib
-./Contents/Home/lib/libmanagement.dylib
-./Contents/Home/lib/libnpjp2.dylib
-./Contents/Home/lib/libosx.dylib
-./Contents/Home/lib/libosxapp.dylib
-./Contents/Home/lib/libverify.dylib
-./Contents/Home/lib/libsaproc.dylib
-./Contents/Home/lib/libsplashscreen.dylib
-./Contents/Home/lib/server/libjvm.dylib
-./Contents/Home/lib/deploy/JavaControlPanel.prefPane/Contents/MacOS/JavaControlPanel
-./Contents/Resources/JavaControlPanelHelper
-./Contents/Resources/JavaUpdater.app/Contents/MacOS/JavaUpdater
-./lib/shortcuts/JavaWSApplicationStub
-./lib/jli/libjli.dylib
-./lib/libAppleScriptEngine.dylib
-./lib/libattach.dylib
-./lib/libawt_lwawt.dylib
-./lib/libdeploy.dylib
-./lib/libdt_socket.dylib
-./lib/libinstrument.dylib
-./lib/libjdwp.dylib
-./lib/libjsdt.dylib
-./lib/libjsig.dylib
-./lib/libmanagement.dylib
-./lib/libnpjp2.dylib
-./lib/libosx.dylib
-./lib/libosxapp.dylib
-./lib/libverify.dylib
-./lib/libsaproc.dylib
-./lib/libsplashscreen.dylib
-./lib/server/libjvm.dylib
-./lib/deploy/JavaControlPanel.prefPane/Contents/MacOS/JavaControlPanel
-"
+ ACCEPTED_BIN_DIFF="
+ ./bin/appletviewer
+ ./bin/idlj
+ ./bin/jar
+ ./bin/jarsigner
+ ./bin/java
+ ./bin/javac
+ ./bin/javadoc
+ ./bin/javah
+ ./bin/javap
+ ./bin/javaws
+ ./bin/jdeps
+ ./bin/jcmd
+ ./bin/jconsole
+ ./bin/jdb
+ ./bin/jimage
+ ./bin/jinfo
+ ./bin/jjs
+ ./bin/jmap
+ ./bin/jps
+ ./bin/jrunscript
+ ./bin/jsadebugd
+ ./bin/jstack
+ ./bin/jstat
+ ./bin/jstatd
+ ./bin/keytool
+ ./bin/orbd
+ ./bin/pack200
+ ./bin/policytool
+ ./bin/rmic
+ ./bin/rmid
+ ./bin/rmiregistry
+ ./bin/schemagen
+ ./bin/serialver
+ ./bin/servertool
+ ./bin/tnameserv
+ ./bin/wsgen
+ ./bin/wsimport
+ ./bin/xjc
+ ./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.dylib
+ ./demo/jvmti/gctest/lib/libgctest.dylib
+ ./demo/jvmti/heapTracker/lib/libheapTracker.dylib
+ ./demo/jvmti/heapViewer/lib/libheapViewer.dylib
+ ./demo/jvmti/minst/lib/libminst.dylib
+ ./demo/jvmti/mtrace/lib/libmtrace.dylib
+ ./demo/jvmti/versionCheck/lib/libversionCheck.dylib
+ ./demo/jvmti/waiters/lib/libwaiters.dylib
+ ./Contents/Home/bin/_javaws
+ ./Contents/Home/bin/javaws
+ ./Contents/Home/bin/idlj
+ ./Contents/Home/bin/servertool
+ ./Contents/Home/lib/shortcuts/JavaWSApplicationStub
+ ./Contents/Home/lib/jli/libjli.dylib
+ ./Contents/Home/lib/jspawnhelper
+ ./Contents/Home/lib/libAppleScriptEngine.dylib
+ ./Contents/Home/lib/libattach.dylib
+ ./Contents/Home/lib/libawt_lwawt.dylib
+ ./Contents/Home/lib/libdeploy.dylib
+ ./Contents/Home/lib/libdt_socket.dylib
+ ./Contents/Home/lib/libinstrument.dylib
+ ./Contents/Home/lib/libjdwp.dylib
+ ./Contents/Home/lib/libjsdt.dylib
+ ./Contents/Home/lib/libjsig.dylib
+ ./Contents/Home/lib/libmanagement.dylib
+ ./Contents/Home/lib/libnpjp2.dylib
+ ./Contents/Home/lib/libosx.dylib
+ ./Contents/Home/lib/libosxapp.dylib
+ ./Contents/Home/lib/libosxui.dylib
+ ./Contents/Home/lib/libverify.dylib
+ ./Contents/Home/lib/libsaproc.dylib
+ ./Contents/Home/lib/libsplashscreen.dylib
+ ./Contents/Home/lib/server/libjvm.dylib
+ ./Contents/Home/lib/deploy/JavaControlPanel.prefPane/Contents/MacOS/JavaControlPanel
+ ./Contents/Resources/JavaControlPanelHelper
+ ./Contents/Resources/JavaUpdater.app/Contents/MacOS/JavaUpdater
+ ./Contents/Resources/JavawsLauncher.app/Contents/MacOS/JavawsLauncher
+ ./lib/shortcuts/JavaWSApplicationStub
+ ./lib/jli/libjli.dylib
+ ./lib/jspawnhelper
+ ./lib/libAppleScriptEngine.dylib
+ ./lib/libattach.dylib
+ ./lib/libawt_lwawt.dylib
+ ./lib/libdeploy.dylib
+ ./lib/libdt_socket.dylib
+ ./lib/libinstrument.dylib
+ ./lib/libjdwp.dylib
+ ./lib/libjsdt.dylib
+ ./lib/libjsig.dylib
+ ./lib/libmanagement.dylib
+ ./lib/libnpjp2.dylib
+ ./lib/libosx.dylib
+ ./lib/libosxapp.dylib
+ ./lib/libosxui.dylib
+ ./lib/libverify.dylib
+ ./lib/libsaproc.dylib
+ ./lib/libsplashscreen.dylib
+ ./lib/server/libjvm.dylib
+ ./lib/deploy/JavaControlPanel.prefPane/Contents/MacOS/JavaControlPanel
+ ./Versions/A/Resources/finish_installation.app/Contents/MacOS/finish_installation
+ ./Versions/A/Sparkle
+ "
-SORT_SYMBOLS="
-./Contents/Home/lib/libsaproc.dylib
-./lib/libsaproc.dylib
-./lib/libjsig.dylib
-"
+ SORT_SYMBOLS="
+ ./Contents/Home/lib/libsaproc.dylib
+ ./lib/libsaproc.dylib
+ ./lib/libjsig.dylib
+ "
-ACCEPTED_SMALL_SIZE_DIFF="$ACCEPTED_BIN_DIFF"
+ ACCEPTED_SMALL_SIZE_DIFF="$ACCEPTED_BIN_DIFF"
-DIS_DIFF_FILTER="LANG=C $SED \
- -e 's/0x[0-9a-f]\{3,16\}/<HEXSTR>/g' -e 's/^[0-9a-f]\{12,20\}/<ADDR>/'"
+ DIS_DIFF_FILTER="LANG=C $SED \
+ -e 's/0x[0-9a-f]\{3,16\}/<HEXSTR>/g' -e 's/^[0-9a-f]\{12,20\}/<ADDR>/' \
+ -e 's/## literal pool for: .Java HotSpot(TM) 64-Bit Server VM.*/<COMMENT>/g'
+ "
fi
--- a/corba/.hgtags Thu Feb 11 13:58:43 2016 -0800
+++ b/corba/.hgtags Mon Feb 15 09:44:42 2016 -0800
@@ -347,3 +347,4 @@
9c4662334d933d299928d1f599d02ff50777cbf8 jdk-9+102
0680fb7dae4da1ee6cf783c4b74184e3e08d3179 jdk-9+103
e385e95e6101711d5c63e7b1a827e99b6ec7a1cc jdk-9+104
+64006ae915b3aa85ac7e6fac679024d2da7fe526 jdk-9+105
--- a/hotspot/.hgtags Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/.hgtags Mon Feb 15 09:44:42 2016 -0800
@@ -507,3 +507,4 @@
d5239fc1b69749ae50793c61b899fcdacf3df857 jdk-9+102
c5f55130b1b69510d9a6f4a3105b58e21cd7ffe1 jdk-9+103
534c50395957c6025fb6627e93b35756f8d48a08 jdk-9+104
+266fa9bb5297bf02cb2a7b038b10a109817d2b48 jdk-9+105
--- a/hotspot/make/lib/Lib-jdk.hotspot.agent.gmk Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/make/lib/Lib-jdk.hotspot.agent.gmk Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2015, 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
@@ -29,6 +29,10 @@
################################################################################
+ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx windows), )
+ DISABLE_MAPFILES := true
+endif
+
SA_TOPDIR := $(HOTSPOT_TOPDIR)/src/jdk.hotspot.agent
# Defaults for most platforms
--- a/hotspot/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -962,7 +962,7 @@
__ lea(d, Address(d, count, Address::lsl(exact_log2(-step))));
}
- Label done, tail;
+ Label tail;
__ cmp(count, 16/granularity);
__ br(Assembler::LO, tail);
@@ -987,7 +987,8 @@
}
// rscratch2 is the byte adjustment needed to align s.
__ cbz(rscratch2, aligned);
- __ lsr(rscratch2, rscratch2, exact_log2(granularity));
+ int shift = exact_log2(granularity);
+ if (shift) __ lsr(rscratch2, rscratch2, shift);
__ sub(count, count, rscratch2);
#if 0
--- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -45,13 +45,6 @@
if( cache_line_size > AllocatePrefetchStepSize )
AllocatePrefetchStepSize = cache_line_size;
- assert(AllocatePrefetchLines > 0, "invalid value");
- if( AllocatePrefetchLines < 1 ) // set valid value in product VM
- AllocatePrefetchLines = 3;
- assert(AllocateInstancePrefetchLines > 0, "invalid value");
- if( AllocateInstancePrefetchLines < 1 ) // set valid value in product VM
- AllocateInstancePrefetchLines = 1;
-
AllocatePrefetchDistance = allocate_prefetch_distance();
AllocatePrefetchStyle = allocate_prefetch_style();
--- a/hotspot/src/cpu/x86/vm/sharedRuntime_x86_32.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/sharedRuntime_x86_32.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -114,15 +114,20 @@
OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_frame_words,
int* total_frame_words, bool verify_fpu, bool save_vectors) {
- int vect_words = 0;
int num_xmm_regs = XMMRegisterImpl::number_of_registers;
+ int ymm_bytes = num_xmm_regs * 16;
+ int zmm_bytes = num_xmm_regs * 32;
#ifdef COMPILER2
if (save_vectors) {
- assert(UseAVX > 0, "512bit vectors are supported only with EVEX");
- assert(MaxVectorSize == 64, "only 512bit vectors are supported now");
- // Save upper half of ZMM/YMM registers :
- vect_words = 8 * 16 / wordSize;
- additional_frame_words += vect_words;
+ assert(UseAVX > 0, "up to 512bit vectors are supported with EVEX");
+ assert(MaxVectorSize <= 64, "up to 512bit vectors are supported now");
+ // Save upper half of YMM registers
+ int vect_bytes = ymm_bytes;
+ if (UseAVX > 2) {
+ // Save upper half of ZMM registers as well
+ vect_bytes += zmm_bytes;
+ }
+ additional_frame_words += vect_bytes / wordSize;
}
#else
assert(!save_vectors, "vectors are generated only by C2");
@@ -185,13 +190,14 @@
off = xmm0_off;
delta = xmm1_off - off;
- if(UseSSE == 1) { // Save the XMM state
+ if(UseSSE == 1) {
+ // Save the XMM state
for (int n = 0; n < num_xmm_regs; n++) {
__ movflt(Address(rsp, off*wordSize), as_XMMRegister(n));
off += delta;
}
} else if(UseSSE >= 2) {
- // Save whole 128bit (16 bytes) XMM regiters
+ // Save whole 128bit (16 bytes) XMM registers
for (int n = 0; n < num_xmm_regs; n++) {
__ movdqu(Address(rsp, off*wordSize), as_XMMRegister(n));
off += delta;
@@ -199,13 +205,14 @@
}
if (save_vectors) {
- assert(vect_words*wordSize == 128, "");
- __ subptr(rsp, 128); // Save upper half of YMM registes
+ __ subptr(rsp, ymm_bytes);
+ // Save upper half of YMM registers
for (int n = 0; n < num_xmm_regs; n++) {
__ vextractf128h(Address(rsp, n*16), as_XMMRegister(n));
}
if (UseAVX > 2) {
- __ subptr(rsp, 256); // Save upper half of ZMM registes
+ __ subptr(rsp, zmm_bytes);
+ // Save upper half of ZMM registers
for (int n = 0; n < num_xmm_regs; n++) {
__ vextractf64x4h(Address(rsp, n*32), as_XMMRegister(n), 1);
}
@@ -255,48 +262,57 @@
void RegisterSaver::restore_live_registers(MacroAssembler* masm, bool restore_vectors) {
int num_xmm_regs = XMMRegisterImpl::number_of_registers;
+ int ymm_bytes = num_xmm_regs * 16;
+ int zmm_bytes = num_xmm_regs * 32;
// Recover XMM & FPU state
int additional_frame_bytes = 0;
#ifdef COMPILER2
if (restore_vectors) {
- assert(UseAVX > 0, "512bit vectors are supported only with EVEX");
- assert(MaxVectorSize == 64, "only 512bit vectors are supported now");
- additional_frame_bytes = 128;
+ assert(UseAVX > 0, "up to 512bit vectors are supported with EVEX");
+ assert(MaxVectorSize <= 64, "up to 512bit vectors are supported now");
+ // Save upper half of YMM registers
+ additional_frame_bytes = ymm_bytes;
+ if (UseAVX > 2) {
+ // Save upper half of ZMM registers as well
+ additional_frame_bytes += zmm_bytes;
+ }
}
#else
assert(!restore_vectors, "vectors are generated only by C2");
#endif
+ int off = xmm0_off;
+ int delta = xmm1_off - off;
+
+ if (UseSSE == 1) {
+ // Restore XMM registers
+ assert(additional_frame_bytes == 0, "");
+ for (int n = 0; n < num_xmm_regs; n++) {
+ __ movflt(as_XMMRegister(n), Address(rsp, off*wordSize));
+ off += delta;
+ }
+ } else if (UseSSE >= 2) {
+ // Restore whole 128bit (16 bytes) XMM registers. Do this before restoring YMM and
+ // ZMM because the movdqu instruction zeros the upper part of the XMM register.
+ for (int n = 0; n < num_xmm_regs; n++) {
+ __ movdqu(as_XMMRegister(n), Address(rsp, off*wordSize+additional_frame_bytes));
+ off += delta;
+ }
+ }
+
if (restore_vectors) {
- assert(additional_frame_bytes == 128, "");
if (UseAVX > 2) {
// Restore upper half of ZMM registers.
for (int n = 0; n < num_xmm_regs; n++) {
__ vinsertf64x4h(as_XMMRegister(n), Address(rsp, n*32), 1);
}
- __ addptr(rsp, additional_frame_bytes*2); // Save upper half of ZMM registes
+ __ addptr(rsp, zmm_bytes);
}
- // Restore upper half of YMM registes.
+ // Restore upper half of YMM registers.
for (int n = 0; n < num_xmm_regs; n++) {
__ vinsertf128h(as_XMMRegister(n), Address(rsp, n*16));
}
- __ addptr(rsp, additional_frame_bytes); // Save upper half of YMM registes
- }
-
- int off = xmm0_off;
- int delta = xmm1_off - off;
-
- if (UseSSE == 1) {
- for (int n = 0; n < num_xmm_regs; n++) {
- __ movflt(as_XMMRegister(n), Address(rsp, off*wordSize));
- off += delta;
- }
- } else if (UseSSE >= 2) {
- // additional_frame_bytes only populated for the restore_vector case, else it is 0
- for (int n = 0; n < num_xmm_regs; n++) {
- __ movdqu(as_XMMRegister(n), Address(rsp, off*wordSize+additional_frame_bytes));
- off += delta;
- }
+ __ addptr(rsp, ymm_bytes);
}
__ pop_FPU_state();
@@ -306,7 +322,6 @@
__ popa();
// Get the rbp, described implicitly by the frame sender code (no oopMap)
__ pop(rbp);
-
}
void RegisterSaver::restore_result_registers(MacroAssembler* masm) {
--- a/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -150,8 +150,8 @@
}
#if defined(COMPILER2) || INCLUDE_JVMCI
if (save_vectors) {
- assert(UseAVX > 0, "512bit vectors are supported only with EVEX");
- assert(MaxVectorSize == 64, "only 512bit vectors are supported now");
+ assert(UseAVX > 0, "up to 512bit vectors are supported with EVEX");
+ assert(MaxVectorSize <= 64, "up to 512bit vectors are supported now");
}
#else
assert(!save_vectors, "vectors are generated only by C2 and JVMCI");
@@ -176,18 +176,18 @@
// push cpu state handles this on EVEX enabled targets
if (save_vectors) {
- // Save upper half of YMM registes(0..15)
+ // Save upper half of YMM registers(0..15)
int base_addr = XSAVE_AREA_YMM_BEGIN;
for (int n = 0; n < 16; n++) {
__ vextractf128h(Address(rsp, base_addr+n*16), as_XMMRegister(n));
}
if (VM_Version::supports_evex()) {
- // Save upper half of ZMM registes(0..15)
+ // Save upper half of ZMM registers(0..15)
base_addr = XSAVE_AREA_ZMM_BEGIN;
for (int n = 0; n < 16; n++) {
__ vextractf64x4h(Address(rsp, base_addr+n*32), as_XMMRegister(n), 1);
}
- // Save full ZMM registes(16..num_xmm_regs)
+ // Save full ZMM registers(16..num_xmm_regs)
base_addr = XSAVE_AREA_UPPERBANK;
off = 0;
int vector_len = Assembler::AVX_512bit;
@@ -321,8 +321,8 @@
#if defined(COMPILER2) || INCLUDE_JVMCI
if (restore_vectors) {
- assert(UseAVX > 0, "512bit vectors are supported only with EVEX");
- assert(MaxVectorSize == 64, "only 512bit vectors are supported now");
+ assert(UseAVX > 0, "up to 512bit vectors are supported with EVEX");
+ assert(MaxVectorSize <= 64, "up to 512bit vectors are supported now");
}
#else
assert(!restore_vectors, "vectors are generated only by C2");
@@ -330,18 +330,18 @@
// On EVEX enabled targets everything is handled in pop fpu state
if (restore_vectors) {
- // Restore upper half of YMM registes (0..15)
+ // Restore upper half of YMM registers (0..15)
int base_addr = XSAVE_AREA_YMM_BEGIN;
for (int n = 0; n < 16; n++) {
__ vinsertf128h(as_XMMRegister(n), Address(rsp, base_addr+n*16));
}
if (VM_Version::supports_evex()) {
- // Restore upper half of ZMM registes (0..15)
+ // Restore upper half of ZMM registers (0..15)
base_addr = XSAVE_AREA_ZMM_BEGIN;
for (int n = 0; n < 16; n++) {
__ vinsertf64x4h(as_XMMRegister(n), Address(rsp, base_addr+n*32), 1);
}
- // Restore full ZMM registes(16..num_xmm_regs)
+ // Restore full ZMM registers(16..num_xmm_regs)
base_addr = XSAVE_AREA_UPPERBANK;
int vector_len = Assembler::AVX_512bit;
int off = 0;
@@ -351,7 +351,7 @@
}
} else {
if (VM_Version::supports_evex()) {
- // Restore upper bank of ZMM registes(16..31) for double/float usage
+ // Restore upper bank of ZMM registers(16..31) for double/float usage
int base_addr = XSAVE_AREA_UPPERBANK;
int off = 0;
for (int n = 16; n < num_xmm_regs; n++) {
--- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -1163,13 +1163,6 @@
if( cache_line_size > AllocatePrefetchStepSize )
AllocatePrefetchStepSize = cache_line_size;
- assert(AllocatePrefetchLines > 0, "invalid value");
- if( AllocatePrefetchLines < 1 ) // set valid value in product VM
- AllocatePrefetchLines = 3;
- assert(AllocateInstancePrefetchLines > 0, "invalid value");
- if( AllocateInstancePrefetchLines < 1 ) // set valid value in product VM
- AllocateInstancePrefetchLines = 1;
-
AllocatePrefetchDistance = allocate_prefetch_distance();
AllocatePrefetchStyle = allocate_prefetch_style();
@@ -1183,7 +1176,9 @@
}
if (supports_sse4_2() && supports_ht()) { // Nehalem based cpus
AllocatePrefetchDistance = 192;
- AllocatePrefetchLines = 4;
+ if (FLAG_IS_DEFAULT(AllocatePrefetchLines)) {
+ FLAG_SET_DEFAULT(AllocatePrefetchLines, 4);
+ }
}
#ifdef COMPILER2
if (supports_sse4_2()) {
--- a/hotspot/src/os/windows/vm/version.rc Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/os/windows/vm/version.rc Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
//
-// Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+// Copyright (c) 2004, 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
@@ -19,7 +19,7 @@
// 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.
-//
+//
//
#include "winresrc.h"
@@ -36,7 +36,7 @@
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION HS_VER
+ FILEVERSION JDK_VER
PRODUCTVERSION JDK_VER
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
@@ -56,7 +56,7 @@
BEGIN
VALUE "CompanyName", XSTR(HS_COMPANY) "\0"
VALUE "FileDescription", XSTR(HS_FILEDESC) "\0"
- VALUE "FileVersion", XSTR(HS_DOTVER) "\0"
+ VALUE "FileVersion", XSTR(JDK_DOTVER) "\0"
VALUE "Full Version", XSTR(HS_BUILD_ID) "\0"
VALUE "InternalName", XSTR(HS_INTERNAL_NAME) "\0"
VALUE "LegalCopyright", XSTR(HS_COPYRIGHT) "\0"
--- a/hotspot/src/share/vm/ci/ciField.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/share/vm/ci/ciField.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -72,7 +72,7 @@
assert(ciObjectFactory::is_initialized(), "not a shared field");
- assert(klass->get_instanceKlass()->is_linked(), "must be linked before using its constan-pool");
+ assert(klass->get_instanceKlass()->is_linked(), "must be linked before using its constant-pool");
constantPoolHandle cpool(thread, klass->get_instanceKlass()->constants());
@@ -106,10 +106,31 @@
// even though we may not need to.
int holder_index = cpool->klass_ref_index_at(index);
bool holder_is_accessible;
- ciInstanceKlass* declared_holder =
- ciEnv::current(thread)->get_klass_by_index(cpool, holder_index,
- holder_is_accessible,
- klass)->as_instance_klass();
+
+ ciKlass* generic_declared_holder = ciEnv::current(thread)->get_klass_by_index(cpool, holder_index,
+ holder_is_accessible,
+ klass);
+
+ if (generic_declared_holder->is_array_klass()) {
+ // If the declared holder of the field is an array class, assume that
+ // the canonical holder of that field is java.lang.Object. Arrays
+ // do not have fields; java.lang.Object is the only supertype of an
+ // array type that can declare fields and is therefore the canonical
+ // holder of the array type.
+ //
+ // Furthermore, the compilers assume that java.lang.Object does not
+ // have any fields. Therefore, the field is not looked up. Instead,
+ // the method returns partial information that will trigger special
+ // handling in ciField::will_link and will result in a
+ // java.lang.NoSuchFieldError exception being thrown by the compiled
+ // code (the expected behavior in this case).
+ _holder = ciEnv::current(thread)->Object_klass();
+ _offset = -1;
+ _is_constant = false;
+ return;
+ }
+
+ ciInstanceKlass* declared_holder = generic_declared_holder->as_instance_klass();
// The declared holder of this field may not have been loaded.
// Bail out with partial field information.
--- a/hotspot/src/share/vm/opto/addnode.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/share/vm/opto/addnode.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -61,7 +61,7 @@
//------------------------------commute----------------------------------------
// Commute operands to move loads and constants to the right.
-static bool commute( Node *add, int con_left, int con_right ) {
+static bool commute(Node *add, bool con_left, bool con_right) {
Node *in1 = add->in(1);
Node *in2 = add->in(2);
@@ -110,8 +110,8 @@
Node *AddNode::Ideal(PhaseGVN *phase, bool can_reshape) {
const Type *t1 = phase->type( in(1) );
const Type *t2 = phase->type( in(2) );
- int con_left = t1->singleton();
- int con_right = t2->singleton();
+ bool con_left = t1->singleton();
+ bool con_right = t2->singleton();
// Check for commutative operation desired
if( commute(this,con_left,con_right) ) return this;
--- a/hotspot/src/share/vm/opto/loopTransform.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/share/vm/opto/loopTransform.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -3048,7 +3048,7 @@
// state of the loop. It's safe in this case to replace it with the
// result_mem.
_igvn.replace_node(store->in(MemNode::Memory), result_mem);
- _igvn.replace_node(exit, result_ctrl);
+ lazy_replace(exit, result_ctrl);
_igvn.replace_node(store, result_mem);
// Any uses the increment outside of the loop become the loop limit.
_igvn.replace_node(head->incr(), head->limit());
--- a/hotspot/src/share/vm/opto/loopnode.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/share/vm/opto/loopnode.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -755,8 +755,8 @@
set_loop(iff2, get_loop(iffalse));
// Lazy update of 'get_ctrl' mechanism.
- lazy_replace_proj( iffalse, iff2 );
- lazy_replace_proj( iftrue, ift2 );
+ lazy_replace(iffalse, iff2);
+ lazy_replace(iftrue, ift2);
// Swap names
iffalse = iff2;
--- a/hotspot/src/share/vm/opto/loopnode.hpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/share/vm/opto/loopnode.hpp Mon Feb 15 09:44:42 2016 -0800
@@ -693,13 +693,18 @@
}
private:
- Node *get_ctrl_no_update( Node *i ) const {
+ Node *get_ctrl_no_update_helper(Node *i) const {
+ assert(has_ctrl(i), "should be control, not loop");
+ return (Node*)(((intptr_t)_nodes[i->_idx]) & ~1);
+ }
+
+ Node *get_ctrl_no_update(Node *i) const {
assert( has_ctrl(i), "" );
- Node *n = (Node*)(((intptr_t)_nodes[i->_idx]) & ~1);
+ Node *n = get_ctrl_no_update_helper(i);
if (!n->in(0)) {
// Skip dead CFG nodes
do {
- n = (Node*)(((intptr_t)_nodes[n->_idx]) & ~1);
+ n = get_ctrl_no_update_helper(n);
} while (!n->in(0));
n = find_non_split_ctrl(n);
}
@@ -721,22 +726,15 @@
// from old_node to new_node to support the lazy update. Reference
// replaces loop reference, since that is not needed for dead node.
public:
- void lazy_update( Node *old_node, Node *new_node ) {
- assert( old_node != new_node, "no cycles please" );
- //old_node->set_req( 1, new_node /*NO DU INFO*/ );
- // Nodes always have DU info now, so re-use the side array slot
- // for this node to provide the forwarding pointer.
- _nodes.map( old_node->_idx, (Node*)((intptr_t)new_node + 1) );
+ void lazy_update(Node *old_node, Node *new_node) {
+ assert(old_node != new_node, "no cycles please");
+ // Re-use the side array slot for this node to provide the
+ // forwarding pointer.
+ _nodes.map(old_node->_idx, (Node*)((intptr_t)new_node + 1));
}
- void lazy_replace( Node *old_node, Node *new_node ) {
- _igvn.replace_node( old_node, new_node );
- lazy_update( old_node, new_node );
- }
- void lazy_replace_proj( Node *old_node, Node *new_node ) {
- assert( old_node->req() == 1, "use this for Projs" );
- _igvn.hash_delete(old_node); // Must hash-delete before hacking edges
- old_node->add_req( NULL );
- lazy_replace( old_node, new_node );
+ void lazy_replace(Node *old_node, Node *new_node) {
+ _igvn.replace_node(old_node, new_node);
+ lazy_update(old_node, new_node);
}
private:
--- a/hotspot/src/share/vm/opto/macro.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/share/vm/opto/macro.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -2654,9 +2654,9 @@
eliminate_macro_nodes();
// Make sure expansion will not cause node limit to be exceeded.
- // Worst case is a macro node gets expanded into about 50 nodes.
+ // Worst case is a macro node gets expanded into about 200 nodes.
// Allow 50% more for optimization.
- if (C->check_node_count(C->macro_count() * 75, "out of nodes before macro expansion" ) )
+ if (C->check_node_count(C->macro_count() * 300, "out of nodes before macro expansion" ) )
return true;
// Eliminate Opaque and LoopLimit nodes. Do it after all loop optimizations.
--- a/hotspot/src/share/vm/opto/split_if.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/share/vm/opto/split_if.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -472,7 +472,7 @@
// Replace in the graph with lazy-update mechanism
new_iff->set_req(0, new_iff); // hook self so it does not go dead
- lazy_replace_proj( ifp, ifpx );
+ lazy_replace(ifp, ifpx);
new_iff->set_req(0, region);
// Record bits for later xforms
--- a/hotspot/src/share/vm/opto/subnode.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/share/vm/opto/subnode.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -1334,6 +1334,65 @@
return new BoolNode( ncmp, _test.negate() );
}
+ // Change ((x & m) u<= m) or ((m & x) u<= m) to always true
+ // Same with ((x & m) u< m+1) and ((m & x) u< m+1)
+ if (cop == Op_CmpU &&
+ cmp1->Opcode() == Op_AndI) {
+ Node* bound = NULL;
+ if (_test._test == BoolTest::le) {
+ bound = cmp2;
+ } else if (_test._test == BoolTest::lt &&
+ cmp2->Opcode() == Op_AddI &&
+ cmp2->in(2)->find_int_con(0) == 1) {
+ bound = cmp2->in(1);
+ }
+ if (cmp1->in(2) == bound || cmp1->in(1) == bound) {
+ return ConINode::make(1);
+ }
+ }
+
+ // Change ((x & (m - 1)) u< m) into (m > 0)
+ // This is the off-by-one variant of the above
+ if (cop == Op_CmpU &&
+ _test._test == BoolTest::lt &&
+ cmp1->Opcode() == Op_AndI) {
+ Node* l = cmp1->in(1);
+ Node* r = cmp1->in(2);
+ for (int repeat = 0; repeat < 2; repeat++) {
+ bool match = r->Opcode() == Op_AddI && r->in(2)->find_int_con(0) == -1 &&
+ r->in(1) == cmp2;
+ if (match) {
+ // arraylength known to be non-negative, so a (arraylength != 0) is sufficient,
+ // but to be compatible with the array range check pattern, use (arraylength u> 0)
+ Node* ncmp = cmp2->Opcode() == Op_LoadRange
+ ? phase->transform(new CmpUNode(cmp2, phase->intcon(0)))
+ : phase->transform(new CmpINode(cmp2, phase->intcon(0)));
+ return new BoolNode(ncmp, BoolTest::gt);
+ } else {
+ // commute and try again
+ l = cmp1->in(2);
+ r = cmp1->in(1);
+ }
+ }
+ }
+
+ // Change (arraylength <= 0) or (arraylength == 0)
+ // into (arraylength u<= 0)
+ // Also change (arraylength != 0) into (arraylength u> 0)
+ // The latter version matches the code pattern generated for
+ // array range checks, which will more likely be optimized later.
+ if (cop == Op_CmpI &&
+ cmp1->Opcode() == Op_LoadRange &&
+ cmp2->find_int_con(-1) == 0) {
+ if (_test._test == BoolTest::le || _test._test == BoolTest::eq) {
+ Node* ncmp = phase->transform(new CmpUNode(cmp1, cmp2));
+ return new BoolNode(ncmp, BoolTest::le);
+ } else if (_test._test == BoolTest::ne) {
+ Node* ncmp = phase->transform(new CmpUNode(cmp1, cmp2));
+ return new BoolNode(ncmp, BoolTest::gt);
+ }
+ }
+
// Change "bool eq/ne (cmp (Conv2B X) 0)" into "bool eq/ne (cmp X 0)".
// This is a standard idiom for branching on a boolean value.
Node *c2b = cmp1;
@@ -1496,4 +1555,3 @@
double d = t1->getd();
return TypeD::make( StubRoutines::intrinsic_log10( d ) );
}
-
--- a/hotspot/src/share/vm/runtime/commandLineFlagConstraintsCompiler.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/share/vm/runtime/commandLineFlagConstraintsCompiler.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -118,27 +118,46 @@
}
Flag::Error AllocatePrefetchStepSizeConstraintFunc(intx value, bool verbose) {
- if (value < 1 || value > max_jint) {
+ intx max_value = 512;
+ if (value < 1 || value > max_value) {
CommandLineError::print(verbose,
"AllocatePrefetchStepSize (" INTX_FORMAT ") "
"must be between 1 and %d\n",
AllocatePrefetchStepSize,
- max_jint);
+ max_value);
return Flag::VIOLATES_CONSTRAINT;
}
if (AllocatePrefetchDistance % AllocatePrefetchStepSize != 0) {
- CommandLineError::print(verbose,
- "AllocatePrefetchDistance (" INTX_FORMAT ") "
- "%% AllocatePrefetchStepSize (" INTX_FORMAT ") "
- "= " INTX_FORMAT " "
- "must be 0\n",
- AllocatePrefetchDistance, AllocatePrefetchStepSize,
- AllocatePrefetchDistance % AllocatePrefetchStepSize);
- return Flag::VIOLATES_CONSTRAINT;
- }
+ CommandLineError::print(verbose,
+ "AllocatePrefetchDistance (" INTX_FORMAT ") "
+ "%% AllocatePrefetchStepSize (" INTX_FORMAT ") "
+ "= " INTX_FORMAT " "
+ "must be 0\n",
+ AllocatePrefetchDistance, AllocatePrefetchStepSize,
+ AllocatePrefetchDistance % AllocatePrefetchStepSize);
+ return Flag::VIOLATES_CONSTRAINT;
+ }
- return Flag::SUCCESS;
+ /* The limit of 64 for the quotient of AllocatePrefetchDistance and AllocatePrefetchSize
+ * originates from the limit of 64 for AllocatePrefetchLines/AllocateInstancePrefetchLines.
+ * If AllocatePrefetchStyle == 2, the quotient from above is used in PhaseMacroExpand::prefetch_allocation()
+ * to determine the number of lines to prefetch. For other values of AllocatePrefetchStyle,
+ * AllocatePrefetchDistance and AllocatePrefetchSize is used. For consistency, all these
+ * quantities must have the same limit (64 in this case).
+ */
+ if (AllocatePrefetchDistance / AllocatePrefetchStepSize > 64) {
+ CommandLineError::print(verbose,
+ "AllocatePrefetchDistance (" INTX_FORMAT ") too large or "
+ "AllocatePrefetchStepSize (" INTX_FORMAT ") too small; "
+ "try decreasing/increasing values so that "
+ "AllocatePrefetchDistance / AllocatePrefetchStepSize <= 64\n",
+ AllocatePrefetchDistance, AllocatePrefetchStepSize,
+ AllocatePrefetchDistance % AllocatePrefetchStepSize);
+ return Flag::VIOLATES_CONSTRAINT;
+ }
+
+ return Flag::SUCCESS;
}
Flag::Error CompileThresholdConstraintFunc(intx value, bool verbose) {
--- a/hotspot/src/share/vm/runtime/globals.hpp Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/src/share/vm/runtime/globals.hpp Mon Feb 15 09:44:42 2016 -0800
@@ -2966,16 +2966,16 @@
\
product(intx, AllocatePrefetchLines, 3, \
"Number of lines to prefetch ahead of array allocation pointer") \
- range(1, max_jint / 2) \
+ range(1, 64) \
\
product(intx, AllocateInstancePrefetchLines, 1, \
"Number of lines to prefetch ahead of instance allocation " \
"pointer") \
- range(1, max_jint / 2) \
+ range(1, 64) \
\
product(intx, AllocatePrefetchStepSize, 16, \
"Step size in bytes of sequential prefetch instructions") \
- range(1, max_jint) \
+ range(1, 512) \
constraint(AllocatePrefetchStepSizeConstraintFunc,AfterMemoryInit)\
\
product(intx, AllocatePrefetchInstr, 0, \
--- a/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityBase.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityBase.java Mon Feb 15 09:44:42 2016 -0800
@@ -24,7 +24,7 @@
/*
* @test TestCompilerDirectivesCompatibilityBase
* @bug 8137167
- * @library /testlibrary /../../test/lib
+ * @library /testlibrary /test/lib
* @modules java.base/sun.misc
* java.compiler
* java.management
--- a/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityCommandOff.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityCommandOff.java Mon Feb 15 09:44:42 2016 -0800
@@ -24,7 +24,7 @@
/*
* @test TestCompilerDirectivesCompatibilityCommandOff
* @bug 8137167
- * @library /testlibrary /../../test/lib
+ * @library /testlibrary /test/lib
* @modules java.base/sun.misc
* java.compiler
* java.management
--- a/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityCommandOn.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityCommandOn.java Mon Feb 15 09:44:42 2016 -0800
@@ -24,7 +24,7 @@
/*
* @test TestCompilerDirectivesCompatibilityCommandOn
* @bug 8137167
- * @library /testlibrary /../../test/lib
+ * @library /testlibrary /test/lib
* @modules java.base/sun.misc
* java.compiler
* java.management
--- a/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityFlag.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityFlag.java Mon Feb 15 09:44:42 2016 -0800
@@ -24,7 +24,7 @@
/*
* @test TestCompilerDirectivesCompatibilityFlag
* @bug 8137167
- * @library /testlibrary /../../test/lib
+ * @library /testlibrary /test/lib
* @modules java.base/sun.misc
* java.compiler
* java.management
--- a/hotspot/test/compiler/compilercontrol/commandfile/CompileOnlyTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/commandfile/CompileOnlyTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests CompileCommand=compileonly
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.commandfile.CompileOnlyTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/commandfile/ExcludeTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/commandfile/ExcludeTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests CompileCommand=exclude
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.commandfile.ExcludeTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/commandfile/LogTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/commandfile/LogTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests CompileCommand=log
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.commandfile.LogTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/commandfile/PrintTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/commandfile/PrintTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests CompileCommand=print
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.commandfile.PrintTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/commands/CompileOnlyTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/commands/CompileOnlyTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests CompileCommand=compileonly
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.commands.CompileOnlyTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/commands/ExcludeTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/commands/ExcludeTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests CompileCommand=exclude
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.commands.ExcludeTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/commands/LogTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/commands/LogTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests CompileCommand=log
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.commands.LogTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/commands/PrintTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/commands/PrintTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests CompileCommand=print
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.commands.PrintTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/directives/CompileOnlyTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/directives/CompileOnlyTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests directives to be able to compile only specified methods
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.directives.CompileOnlyTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/directives/ExcludeTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/directives/ExcludeTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests directives to be able to exclude methods from compilation
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.directives.ExcludeTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/directives/LogTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/directives/LogTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests directives to be able to turn on LogCompilation
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.directives.LogTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/directives/PrintTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/directives/PrintTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests directives to be able to turn on print_assembly
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.directives.PrintTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/jcmd/AddAndRemoveTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/jcmd/AddAndRemoveTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests directives to be able to add and remove directives
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.jcmd.AddAndRemoveTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/jcmd/AddCompileOnlyTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/jcmd/AddCompileOnlyTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests jcmd to be able to add a directive to compile only specified methods
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.jcmd.AddCompileOnlyTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/jcmd/AddExcludeTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/jcmd/AddExcludeTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests jcmd to be able to add a directive to exclude only specified methods
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.jcmd.AddExcludeTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/jcmd/AddLogTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/jcmd/AddLogTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Tests jcmd to be able to add a directive to log only specified methods
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.jcmd.AddLogTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/jcmd/AddPrintAssemblyTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/jcmd/AddPrintAssemblyTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -26,7 +26,7 @@
* @bug 8137167
* @summary Tests jcmd to be able to add a directive to print assembly
* only for specified methods
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.jcmd.AddPrintAssemblyTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/mixed/RandomCommandsTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/mixed/RandomCommandsTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Randomly generates commands with random types
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.mixed.RandomCommandsTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/mixed/RandomValidCommandsTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/mixed/RandomValidCommandsTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -25,7 +25,7 @@
* @test
* @bug 8137167
* @summary Randomly generates valid commands with random types
- * @library /testlibrary /../../test/lib /compiler/testlibrary ../share /
+ * @library /testlibrary /test/lib /compiler/testlibrary ../share /
* @build compiler.compilercontrol.mixed.RandomValidCommandsTest
* pool.sub.* pool.subpack.* sun.hotspot.WhiteBox
* compiler.testlibrary.CompilerUtils compiler.compilercontrol.share.actions.*
--- a/hotspot/test/compiler/compilercontrol/share/scenario/Command.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/compilercontrol/share/scenario/Command.java Mon Feb 15 09:44:42 2016 -0800
@@ -32,8 +32,8 @@
public enum Command {
COMPILEONLY("compileonly", ".*", "-Xbatch"),
EXCLUDE("exclude", "", "-Xbatch"),
- INLINE("inline", ".*"),
- DONTINLINE("dontinline", ""),
+ INLINE("inline", ".*", "-Xbatch"),
+ DONTINLINE("dontinline", "", "-Xbatch"),
LOG("log", "", "-XX:+UnlockDiagnosticVMOptions",
"-XX:+LogCompilation", "-XX:LogFile=" + LogProcessor.LOG_FILE),
PRINT("print", ""),
--- a/hotspot/test/compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java Mon Feb 15 09:44:42 2016 -0800
@@ -27,7 +27,7 @@
/*
* @test
- * @library /testlibrary /../../test/lib /compiler/whitebox
+ * @library /testlibrary /test/lib /compiler/whitebox
* /compiler/testlibrary /compiler/codegen/7184394
* @modules java.base/sun.misc
* java.management
--- a/hotspot/test/compiler/cpuflags/TestAESIntrinsicsOnUnsupportedConfig.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/cpuflags/TestAESIntrinsicsOnUnsupportedConfig.java Mon Feb 15 09:44:42 2016 -0800
@@ -28,7 +28,7 @@
/*
* @test
- * @library /testlibrary /../../test/lib /compiler/whitebox
+ * @library /testlibrary /test/lib /compiler/whitebox
* /compiler/testlibrary /compiler/codegen/7184394
* @modules java.base/sun.misc
* java.management
--- a/hotspot/test/compiler/intrinsics/IntrinsicDisabledTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/intrinsics/IntrinsicDisabledTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -24,7 +24,7 @@
/*
* @test
* @bug 8138651
- * @library /testlibrary /../../test/lib
+ * @library /testlibrary /test/lib
* @build IntrinsicDisabledTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
--- a/hotspot/test/compiler/intrinsics/montgomerymultiply/MontgomeryMultiplyTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/intrinsics/montgomerymultiply/MontgomeryMultiplyTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -42,7 +42,7 @@
* @test
* @bug 8130150 8131779 8139907
* @summary Verify that the Montgomery multiply and square intrinsic works and correctly checks their arguments.
- * @library /testlibrary /../../test/lib
+ * @library /testlibrary /test/lib
* @library /testlibrary
* @build MontgomeryMultiplyTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
--- a/hotspot/test/compiler/intrinsics/string/TestStringIntrinsics2.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/intrinsics/string/TestStringIntrinsics2.java Mon Feb 15 09:44:42 2016 -0800
@@ -26,7 +26,7 @@
* @test
* @bug 8145336
* @summary PPC64: fix string intrinsics after CompactStrings change
- * @library /testlibrary /../../test/lib
+ * @library /testlibrary /test/lib
* @build sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/loopopts/TestArraysFillDeadControl.java Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,53 @@
+/*
+ * 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.
+ *
+ * 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.
+ *
+ */
+
+/**
+ * @test
+ * @bug 8147645
+ * @summary Array.fill intrinsification code doesn't mark replaced control as dead
+ * @run main/othervm -XX:-TieredCompilation -XX:CompileCommand=dontinline,TestArraysFillDeadControl::dont_inline TestArraysFillDeadControl
+ *
+ */
+
+import java.util.Arrays;
+
+public class TestArraysFillDeadControl {
+
+ static void dont_inline() {
+ }
+
+ static int i = 1;
+
+ public static void main(String[] args) {
+ for (int j = 0; j < 200000; j++) {
+ int[] a = new int[2];
+ int b = i;
+
+ Arrays.fill(a, 1);
+ Arrays.fill(a, 1+b);
+
+ dont_inline();
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/rangechecks/PowerOf2SizedArraysChecks.java Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/**
+ * @test
+ * @bug 8003585
+ * @summary strength reduce or eliminate range checks for power-of-two sized arrays
+ * @run main/othervm -XX:CompileCommand=compileonly,PowerOf2SizedArraysChecks::test* -XX:-BackgroundCompilation PowerOf2SizedArraysChecks
+ *
+ */
+
+import java.util.function.*;
+
+public class PowerOf2SizedArraysChecks {
+
+ static void check_result(String name, int x, int m, boolean expected, boolean res) {
+ if (expected != res) {
+ throw new RuntimeException("Bad result in " + name + " for x = " + x + " m = " + m + " expected " + expected + " got " + res);
+ }
+ }
+
+ static void helper(String name, BiFunction<Integer, int[], Boolean> test, int[] x_values, int[] m_values, boolean[][] expected) {
+ for (int i = 0; i < x_values.length; i++) {
+ int x = x_values[i];
+ for (int j = 0; j < m_values.length; j++) {
+ int m = m_values[j];
+ int[] array = new int[m];
+ boolean res = test.apply(x, array);
+ check_result(name, x, m, expected[i][j], res);
+ }
+ }
+ }
+
+ static void check_result(String name, int m, boolean expected, boolean res) {
+ if (expected != res) {
+ throw new RuntimeException("Bad result in " + name + " for m = " + m + " expected " + expected + " got " + res);
+ }
+ }
+
+ static void helper2(String name, Function<int[], Boolean> test, int[] m_values, boolean[] expected) {
+ for (int j = 0; j < m_values.length; j++) {
+ int m = m_values[j];
+ int[] array = new int[m];
+ boolean res = test.apply(array);
+ check_result(name, m, expected[j], res);
+ }
+ }
+
+ // ((x & m) u<= m) is always true
+ static boolean test1(int x, int[] array) {
+ int m = array.length;
+ if ((x & m) < 0 || (x & m) > m) {
+ return false;
+ }
+ return true;
+ }
+
+ // ((x & (m - 1)) u< m) iff (m > 0)
+ static boolean test2(int x, int[] array) {
+ int m = array.length;
+ if ((x & (m-1)) < 0 || (x & (m-1)) >= m) {
+ return false;
+ }
+ return true;
+ }
+
+ static boolean test3(int x, int[] array) {
+ try {
+ int v = array[x & (array.length-1)];
+ } catch(ArrayIndexOutOfBoundsException aioobe) {
+ return false;
+ }
+ return true;
+ }
+
+ // arraylength <= 0 to arraylength u<= 0
+ static boolean test4(int[] array) {
+ if (array.length <= 0) {
+ return false;
+ }
+ return true;
+ }
+
+ // arraylength == 0 to arraylength u<= 0
+ static boolean test5(int[] array) {
+ if (array.length == 0) {
+ return false;
+ }
+ return true;
+ }
+
+ // arraylength != 0 to arraylength u> 0
+ static boolean test6(int[] array) {
+ if (array.length != 0) {
+ return false;
+ }
+ return true;
+ }
+
+ static public void main(String[] args) {
+ int[] x_values = {-10, -5, 0, 5, 8, 16, 100};
+ int[] m_values = { 16, 10, 0 };
+
+ boolean[][] test1_expected = new boolean[x_values.length][m_values.length];
+ for (int i = 0; i < x_values.length; i++) {
+ for (int j = 0; j < m_values.length; j++) {
+ test1_expected[i][j] = true;
+ }
+ }
+
+ boolean[][] test2_expected = new boolean[x_values.length][m_values.length];
+ for (int i = 0; i < x_values.length; i++) {
+ for (int j = 0; j < m_values.length; j++) {
+ test2_expected[i][j] = (m_values[j] > 0);
+ }
+ }
+
+ boolean[] test4_expected = new boolean[m_values.length];
+ for (int i = 0; i < m_values.length; i++) {
+ test4_expected[i] = (m_values[i] > 0);
+ }
+ boolean[] test5_expected = new boolean[m_values.length];
+ for (int i = 0; i < m_values.length; i++) {
+ test5_expected[i] = (m_values[i] != 0);
+ }
+ boolean[] test6_expected = new boolean[m_values.length];
+ for (int i = 0; i < m_values.length; i++) {
+ test6_expected[i] = (m_values[i] == 0);
+ }
+
+ for (int i = 0; i < 20000; i++) {
+ helper("test1", PowerOf2SizedArraysChecks::test1, x_values, m_values, test1_expected);
+ helper("test2", PowerOf2SizedArraysChecks::test2, x_values, m_values, test2_expected);
+ helper("test3", PowerOf2SizedArraysChecks::test3, x_values, m_values, test2_expected);
+ helper2("test4", PowerOf2SizedArraysChecks::test4, m_values, test4_expected);
+ helper2("test5", PowerOf2SizedArraysChecks::test5, m_values, test5_expected);
+ helper2("test6", PowerOf2SizedArraysChecks::test6, m_values, test6_expected);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/runtime/safepoints/TestRegisterRestoring.java Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,62 @@
+/*
+ * 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.
+ *
+ * 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.
+ *
+ */
+
+
+/**
+ * @test
+ * @bug 8148490
+ * @summary Test correct saving and restoring of vector registers at safepoints.
+ * @run main/othervm -Xbatch -XX:-TieredCompilation -XX:CompileCommand=exclude,TestRegisterRestoring::main -XX:+SafepointALot TestRegisterRestoring
+ */
+public class TestRegisterRestoring {
+ public static void main(String args[]) throws Exception {
+ // Initialize
+ float[] array = new float[100];
+ for (int i = 0; i < array.length; ++i) {
+ array[i] = 0;
+ }
+ // Test
+ for (int j = 0; j < 20_000; ++j) {
+ increment(array);
+ // Check result
+ for (int i = 0; i < array.length; i++) {
+ if (array[i] != 10_000) {
+ throw new RuntimeException("Test failed: array[" + i + "] = " + array[i] + " but should be 10.000");
+ }
+ array[i] = 0;
+ }
+ }
+ }
+
+ static void increment(float[] array) {
+ // Loop with safepoint
+ for (long l = 0; l < 10_000; l++) {
+ // Vectorized loop
+ for (int i = 0; i < array.length; ++i) {
+ array[i] += 1;
+ }
+ }
+ }
+}
+
--- a/hotspot/test/compiler/stable/TestStableMemoryBarrier.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/stable/TestStableMemoryBarrier.java Mon Feb 15 09:44:42 2016 -0800
@@ -27,7 +27,7 @@
* @test TestStableMemoryBarrier
* @bug 8139758
* @summary tests memory barrier correctly inserted for stable fields
- * @library /testlibrary /../../test/lib
+ * @library /testlibrary /test/lib
*
* @run main/bootclasspath -Xcomp -XX:CompileOnly=::testCompile
* java.lang.invoke.TestStableMemoryBarrier
--- a/hotspot/test/compiler/types/TestMeetIncompatibleInterfaceArrays.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/types/TestMeetIncompatibleInterfaceArrays.java Mon Feb 15 09:44:42 2016 -0800
@@ -27,7 +27,7 @@
* @summary C2 can not handle returns with inccompatible interface arrays
* @modules java.base/jdk.internal.org.objectweb.asm
* java.base/sun.misc
- * @library /testlibrary /../../test/lib
+ * @library /testlibrary /test/lib
* @build sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission
--- a/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -92,33 +92,36 @@
private void test() {
System.out.printf("type %s%n", type);
+
+ // Measure the code cache usage after allocate/free.
long start = getUsage();
- long addr = WHITE_BOX.allocateCodeBlob(SIZE, type.id);
- Asserts.assertNE(0, addr, "allocation failed");
+ long addr1 = WHITE_BOX.allocateCodeBlob(SIZE, type.id);
+ long firstAllocation = getUsage();
+ WHITE_BOX.freeCodeBlob(addr1);
+ long firstFree = getUsage();
+ long addr2 = WHITE_BOX.allocateCodeBlob(SIZE, type.id);
+ long secondAllocation = getUsage();
+ WHITE_BOX.freeCodeBlob(addr2);
- long firstAllocation = getUsage();
+ // The following code may trigger resolving of invokedynamic
+ // instructions and therefore method handle intrinsic creation
+ // in the code cache. Make sure this is executed after measuring
+ // the code cache usage.
+ Asserts.assertNE(0, addr1, "first allocation failed");
+ Asserts.assertNE(0, addr2, "second allocation failed");
Asserts.assertLTE(start + SIZE, firstAllocation,
"allocation should increase memory usage: "
+ start + " + " + SIZE + " <= " + firstAllocation);
-
- WHITE_BOX.freeCodeBlob(addr);
- long firstFree = getUsage();
Asserts.assertLTE(firstFree, firstAllocation,
"free shouldn't increase memory usage: "
+ firstFree + " <= " + firstAllocation);
-
- addr = WHITE_BOX.allocateCodeBlob(SIZE, type.id);
- Asserts.assertNE(0, addr, "allocation failed");
-
- long secondAllocation = getUsage();
Asserts.assertEQ(firstAllocation, secondAllocation);
- WHITE_BOX.freeCodeBlob(addr);
System.out.println("allocating till possible...");
ArrayList<Long> blobs = new ArrayList<>();
int size = (int) (CODE_CACHE_SIZE >> 7);
- while ((addr = WHITE_BOX.allocateCodeBlob(size, type.id)) != 0) {
- blobs.add(addr);
+ while ((addr1 = WHITE_BOX.allocateCodeBlob(size, type.id)) != 0) {
+ blobs.add(addr1);
}
for (Long blob : blobs) {
WHITE_BOX.freeCodeBlob(blob);
--- a/hotspot/test/gc/g1/TestPLABOutput.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/gc/g1/TestPLABOutput.java Mon Feb 15 09:44:42 2016 -0800
@@ -27,7 +27,7 @@
* @summary Check that G1 does not report empty PLAB statistics in the first evacuation.
* @requires vm.gc=="G1" | vm.gc=="null"
* @key gc
- * @library /testlibrary /../../test/lib
+ * @library /testlibrary /test/lib
* @build sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run driver TestPLABOutput
--- a/hotspot/test/testlibrary_tests/whitebox/vm_flags/IntxTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/hotspot/test/testlibrary_tests/whitebox/vm_flags/IntxTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -24,6 +24,7 @@
/*
* @test IntxTest
* @bug 8028756
+ * @ignore 8148758
* @library /testlibrary /test/lib
* @modules java.management/sun.management
* @build IntxTest
--- a/jaxp/.hgtags Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/.hgtags Mon Feb 15 09:44:42 2016 -0800
@@ -347,3 +347,4 @@
9dcf193c0b6cf22c0e89e2dc705a2c0f520ae064 jdk-9+102
bdbf2342b21bd8ecad1b4e6499a0dfb314952bd7 jdk-9+103
58448465334e1d8bf1cfc09052783937b1cc21c0 jdk-9+104
+5acf6071d4d610068a19c79e004ba8e59cf1b087 jdk-9+105
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java Mon Feb 15 09:44:42 2016 -0800
@@ -123,7 +123,7 @@
* @see Serializer
* @see org.w3c.dom.ls.LSSerializer
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializer.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializer.java Mon Feb 15 09:44:42 2016 -0800
@@ -37,7 +37,7 @@
* @author <a href="mailto:Scott_Boag/CAM/Lotus@lotus.com">Scott Boag</a>
* @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java Mon Feb 15 09:44:42 2016 -0800
@@ -72,7 +72,7 @@
* @author Arun Yadav, Sun Microsystems
* @author Sunitha Reddy, Sun Microsystems
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, replaced by
+ * @deprecated As of JDK 9, Xerces 2.9.0, replaced by
* {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}
*/
public class DOMSerializerImpl implements LSSerializer, DOMConfiguration {
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/ElementState.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/ElementState.java Mon Feb 15 09:44:42 2016 -0800
@@ -31,7 +31,7 @@
* @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
* @see BaseMarkupSerializer
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java Mon Feb 15 09:44:42 2016 -0800
@@ -32,7 +32,7 @@
/**
* This class represents an encoding.
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Encodings.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Encodings.java Mon Feb 15 09:44:42 2016 -0800
@@ -37,7 +37,7 @@
*
* @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLdtd.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLdtd.java Mon Feb 15 09:44:42 2016 -0800
@@ -46,7 +46,7 @@
*
* @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/IndentPrinter.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/IndentPrinter.java Mon Feb 15 09:44:42 2016 -0800
@@ -34,7 +34,7 @@
*
* @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/LineSeparator.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/LineSeparator.java Mon Feb 15 09:44:42 2016 -0800
@@ -27,7 +27,7 @@
* @author <a href="mailto:arkin@intalio..com">Assaf Arkin</a>
* @see OutputFormat
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Method.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Method.java Mon Feb 15 09:44:42 2016 -0800
@@ -27,7 +27,7 @@
* @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
* @see OutputFormat
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/OutputFormat.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/OutputFormat.java Mon Feb 15 09:44:42 2016 -0800
@@ -60,7 +60,7 @@
* @see Method
* @see LineSeparator
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Printer.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Printer.java Mon Feb 15 09:44:42 2016 -0800
@@ -42,7 +42,7 @@
*
* @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Serializer.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Serializer.java Mon Feb 15 09:44:42 2016 -0800
@@ -62,7 +62,7 @@
* @see OutputFormat
* @see DOMSerializer
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java Mon Feb 15 09:44:42 2016 -0800
@@ -37,7 +37,7 @@
* @author <a href="mailto:Scott_Boag/CAM/Lotus@lotus.com">Scott Boag</a>
* @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactoryImpl.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactoryImpl.java Mon Feb 15 09:44:42 2016 -0800
@@ -36,7 +36,7 @@
* @author <a href="mailto:Scott_Boag/CAM/Lotus@lotus.com">Scott Boag</a>
* @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/TextSerializer.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/TextSerializer.java Mon Feb 15 09:44:42 2016 -0800
@@ -60,7 +60,7 @@
* @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
* @see Serializer
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XML11Serializer.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XML11Serializer.java Mon Feb 15 09:44:42 2016 -0800
@@ -79,7 +79,7 @@
* @author Elena Litani IBM
* @see Serializer
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XMLSerializer.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XMLSerializer.java Mon Feb 15 09:44:42 2016 -0800
@@ -90,7 +90,7 @@
* @author Elena Litani IBM
* @see Serializer
*
- * @deprecated As of JDK 1.9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
+ * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation
* is replaced by that of Xalan. Main class
* {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced
* by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}.
--- a/jaxws/.hgtags Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxws/.hgtags Mon Feb 15 09:44:42 2016 -0800
@@ -350,3 +350,4 @@
0868b93587cc99df3a4f4d3817a1aa756bea60ab jdk-9+102
eb5e005a17e50d7d8340daaf21a5c3c5ae358d68 jdk-9+103
0f557aa096e2a5c9733d406d8cf0c2e6b1f8ca60 jdk-9+104
+45a666c58e4c7d07638878684ad09decb3229dc9 jdk-9+105
--- a/jaxws/src/java.xml.ws/share/classes/com/sun/xml/internal/ws/api/pipe/ThreadHelper.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jaxws/src/java.xml.ws/share/classes/com/sun/xml/internal/ws/api/pipe/ThreadHelper.java Mon Feb 15 09:44:42 2016 -0800
@@ -28,62 +28,97 @@
import java.lang.reflect.Constructor;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.util.concurrent.ThreadFactory;
/**
* Simple utility class to instantiate correct Thread instance
- * depending on runtime context (jdk/non-jdk usage)
+ * depending on runtime context (jdk/non-jdk usage) and Java version.
*
* @author miroslav.kos@oracle.com
*/
final class ThreadHelper {
private static final String SAFE_THREAD_NAME = "sun.misc.ManagedLocalsThread";
- private static final Constructor THREAD_CONSTRUCTOR;
+
+ private static final ThreadFactory threadFactory;
// no instantiating wanted
private ThreadHelper() {
}
static {
- THREAD_CONSTRUCTOR = AccessController.doPrivileged(
- new PrivilegedAction<Constructor> () {
+ threadFactory = AccessController.doPrivileged(
+ new PrivilegedAction<ThreadFactory> () {
@Override
- public Constructor run() {
+ public ThreadFactory run() {
+ // In order of preference
try {
- Class cls = Class.forName(SAFE_THREAD_NAME);
- if (cls != null) {
- return cls.getConstructor(Runnable.class);
+ try {
+ Class<Thread> cls = Thread.class;
+ Constructor<Thread> ctr = cls.getConstructor(
+ ThreadGroup.class,
+ Runnable.class,
+ String.class,
+ long.class,
+ boolean.class);
+ return new JDK9ThreadFactory(ctr);
+ } catch (NoSuchMethodException ignored) {
+ // constructor newly added in Java SE 9
}
+ Class<?> cls = Class.forName(SAFE_THREAD_NAME);
+ Constructor<?> ctr = cls.getConstructor(Runnable.class);
+ return new SunMiscThreadFactory(ctr);
} catch (ClassNotFoundException ignored) {
} catch (NoSuchMethodException ignored) {
}
- return null;
+ return new LegacyThreadFactory();
}
}
);
}
static Thread createNewThread(final Runnable r) {
- if (isJDKInternal()) {
+ return threadFactory.newThread(r);
+ }
+
+ // A Thread factory backed by the Thread constructor that
+ // suppresses inheriting of inheritable thread-locals.
+ private static class JDK9ThreadFactory implements ThreadFactory {
+ final Constructor<Thread> ctr;
+ JDK9ThreadFactory(Constructor<Thread> ctr) { this.ctr = ctr; }
+ @Override public Thread newThread(Runnable r) {
+ try {
+ return ctr.newInstance(null, r, "toBeReplaced", 0, false);
+ } catch (ReflectiveOperationException x) {
+ throw new InternalError(x);
+ }
+ }
+ }
+
+ // A Thread factory backed by sun.misc.ManagedLocalsThread
+ private static class SunMiscThreadFactory implements ThreadFactory {
+ final Constructor<?> ctr;
+ SunMiscThreadFactory(Constructor<?> ctr) { this.ctr = ctr; }
+ @Override public Thread newThread(Runnable r) {
return AccessController.doPrivileged(
- new PrivilegedAction<Thread>() {
- @Override
- public Thread run() {
- try {
- return (Thread) THREAD_CONSTRUCTOR.newInstance(r);
- } catch (Exception e) {
- return new Thread(r);
- }
+ new PrivilegedAction<Thread>() {
+ @Override
+ public Thread run() {
+ try {
+ return (Thread) ctr.newInstance(r);
+ } catch (Exception e) {
+ return new Thread(r);
}
}
+ }
);
- } else {
+ }
+ }
+
+ // A Thread factory backed by new Thread(Runnable)
+ private static class LegacyThreadFactory implements ThreadFactory {
+ @Override public Thread newThread(Runnable r) {
return new Thread(r);
}
}
-
- private static boolean isJDKInternal() {
- String className = ThreadHelper.class.getName();
- return className.contains(".internal.");
- }
}
--- a/jdk/.hgtags Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/.hgtags Mon Feb 15 09:44:42 2016 -0800
@@ -347,3 +347,4 @@
6eb3c8132e489dab81adde4ce29844904ce15482 jdk-9+102
eee1ced1d8e78293f2a004af818ca474387dbebf jdk-9+103
8faf1aec77a9517c69d2f4d8dd146429852ace7f jdk-9+104
+55518739e399a1066c8613e19100d51b38d9f223 jdk-9+105
--- a/jdk/make/gensrc/Gensrc-jdk.jdi.gmk Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/make/gensrc/Gensrc-jdk.jdi.gmk Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -78,11 +78,9 @@
$(install-file)
# Some platforms don't have the serviceability agent
-ifeq (, $(filter $(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), aix-ppc64))
- ifneq ($(JVM_VARIANT_ZERO), true)
- GENSRC_JDK_JDI += $(SUPPORT_OUTPUTDIR)/gensrc/jdk.jdi/META-INF/services/com.sun.jdi.connect.Connector \
- $(SUPPORT_OUTPUTDIR)/gensrc/jdk.hotspot.agent/META-INF/services/com.sun.jdi.connect.Connector
- endif
+ifeq ($(INCLUDE_SA), true)
+ GENSRC_JDK_JDI += $(SUPPORT_OUTPUTDIR)/gensrc/jdk.jdi/META-INF/services/com.sun.jdi.connect.Connector \
+ $(SUPPORT_OUTPUTDIR)/gensrc/jdk.hotspot.agent/META-INF/services/com.sun.jdi.connect.Connector
endif
################################################################################
--- a/jdk/make/launcher/LauncherCommon.gmk Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/make/launcher/LauncherCommon.gmk Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -26,8 +26,12 @@
include NativeCompilation.gmk
ifeq ($(OPENJDK_TARGET_OS), macosx)
+ DISABLE_MAPFILES := true
ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN)
else
+ ifeq ($(OPENJDK_TARGET_OS), windows)
+ DISABLE_MAPFILES := true
+ endif
ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN,/../lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli)
# Applications expect to be able to link against libjawt without invoking
--- a/jdk/make/lib/LibCommon.gmk Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/make/lib/LibCommon.gmk Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -36,6 +36,10 @@
# elegant solution to this.
WIN_JAVA_LIB := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib
+ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx windows), )
+ DISABLE_MAPFILES := true
+endif
+
################################################################################
# Find the default set of src dirs for a native library.
# Param 1 - module name
--- a/jdk/make/src/classes/build/tools/generatecharacter/CharacterName.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/make/src/classes/build/tools/generatecharacter/CharacterName.java Mon Feb 15 09:44:42 2016 -0800
@@ -14,13 +14,14 @@
System.err.println("Usage: java CharacterName UnicodeData.txt uniName.dat");
System.exit(1);
}
-
reader = new FileReader(args[0]);
BufferedReader bfr = new BufferedReader(reader);
String line = null;
StringBuilder namePool = new StringBuilder();
byte[] cpPoolBytes = new byte[0x100000];
+ boolean[] cpBlocks = new boolean[(Character.MAX_CODE_POINT + 1) >> 8];
+ int bkNum = 0;
ByteBuffer cpBB = ByteBuffer.wrap(cpPoolBytes);
int lastCp = 0;
int cpNum = 0;
@@ -32,10 +33,26 @@
if (spec != null) {
int cp = spec.getCodePoint();
String name = spec.getName();
- cpNum++;
if (name.equals("<control>") && spec.getOldName() != null) {
- if (spec.getOldName().length() != 0)
+ if (cp == 0x7) // <control>BELL -> BEL; u+1f514 <-> BELL
+ name = "BEL";
+ else if (spec.getOldName().length() != 0)
name = spec.getOldName();
+ /*
+ 3 "figment" characters from NameAliases.txt
+ Several documented labels for C1 control code points which
+ were never actually approved in any standard...but were
+ implemented in Perl regex.
+ 0080;PADDING CHARACTER;figment
+ 0081;HIGH OCTET PRESET;figment
+ 0099;SINGLE GRAPHIC CHARACTER INTRODUCER;figment
+ */
+ else if (cp == 0x80)
+ name = "PADDING CHARACTER";
+ else if (cp == 0x81)
+ name = "HIGH OCTET PRESET";
+ else if (cp == 0x99)
+ name = "SINGLE GRAPHIC CHARACTER INTRODUCER";
else
continue;
} else if (name.startsWith("<")) {
@@ -61,7 +78,11 @@
*/
continue;
}
-
+ cpNum++;
+ if (!cpBlocks[cp >> 8]) {
+ cpBlocks[cp >> 8] = true;
+ bkNum++;
+ }
if (cp == lastCp + 1) {
cpBB.put((byte)name.length());
} else {
@@ -76,11 +97,12 @@
byte[] namePoolBytes = namePool.toString().getBytes("ASCII");
int cpLen = cpBB.position();
int total = cpLen + namePoolBytes.length;
-
DataOutputStream dos = new DataOutputStream(
new DeflaterOutputStream(
new FileOutputStream(args[1])));
dos.writeInt(total); // total
+ dos.writeInt(bkNum); // bkNum;
+ dos.writeInt(cpNum); // cpNum
dos.writeInt(cpLen); // nameOff
dos.write(cpPoolBytes, 0, cpLen);
dos.write(namePoolBytes);
--- a/jdk/src/java.base/share/classes/java/io/ObjectInputStream.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/java/io/ObjectInputStream.java Mon Feb 15 09:44:42 2016 -0800
@@ -3144,7 +3144,15 @@
* utflen bytes.
*/
private String readUTFBody(long utflen) throws IOException {
- StringBuilder sbuf = new StringBuilder();
+ StringBuilder sbuf;
+ if (utflen > 0 && utflen < Integer.MAX_VALUE) {
+ // a reasonable initial capacity based on the UTF length
+ int initialCapacity = Math.min((int)utflen, 0xFFFF);
+ sbuf = new StringBuilder(initialCapacity);
+ } else {
+ sbuf = new StringBuilder();
+ }
+
if (!blkmode) {
end = pos = 0;
}
--- a/jdk/src/java.base/share/classes/java/lang/Character.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/java/lang/Character.java Mon Feb 15 09:44:42 2016 -0800
@@ -10126,7 +10126,7 @@
* <blockquote>{@code
* Character.UnicodeBlock.of(codePoint).toString().replace('_', ' ')
* + " "
- * + Integer.toHexString(codePoint).toUpperCase(Locale.ENGLISH);
+ * + Integer.toHexString(codePoint).toUpperCase(Locale.ROOT);
*
* }</blockquote>
*
@@ -10145,7 +10145,7 @@
if (!isValidCodePoint(codePoint)) {
throw new IllegalArgumentException();
}
- String name = CharacterName.get(codePoint);
+ String name = CharacterName.getInstance().getName(codePoint);
if (name != null)
return name;
if (getType(codePoint) == UNASSIGNED)
@@ -10153,8 +10153,52 @@
UnicodeBlock block = UnicodeBlock.of(codePoint);
if (block != null)
return block.toString().replace('_', ' ') + " "
- + Integer.toHexString(codePoint).toUpperCase(Locale.ENGLISH);
+ + Integer.toHexString(codePoint).toUpperCase(Locale.ROOT);
// should never come here
- return Integer.toHexString(codePoint).toUpperCase(Locale.ENGLISH);
+ return Integer.toHexString(codePoint).toUpperCase(Locale.ROOT);
+ }
+
+ /**
+ * Returns the code point value of the Unicode character specified by
+ * the given Unicode character name.
+ * <p>
+ * Note: if a character is not assigned a name by the <i>UnicodeData</i>
+ * file (part of the Unicode Character Database maintained by the Unicode
+ * Consortium), its name is defined as the result of expression
+ *
+ * <blockquote>{@code
+ * Character.UnicodeBlock.of(codePoint).toString().replace('_', ' ')
+ * + " "
+ * + Integer.toHexString(codePoint).toUpperCase(Locale.ROOT);
+ *
+ * }</blockquote>
+ * <p>
+ * The {@code name} matching is case insensitive, with any leading and
+ * trailing whitespace character removed.
+ *
+ * @param name the Unicode character name
+ *
+ * @return the code point value of the character specified by its name.
+ *
+ * @throws IllegalArgumentException if the specified {@code name}
+ * is not a valid Unicode character name.
+ * @throws NullPointerException if {@code name} is {@code null}
+ *
+ * @since 9
+ */
+ public static int codePointOf(String name) {
+ name = name.trim().toUpperCase(Locale.ROOT);
+ int cp = CharacterName.getInstance().getCodePoint(name);
+ if (cp != -1)
+ return cp;
+ try {
+ int off = name.lastIndexOf(' ');
+ if (off != -1) {
+ cp = Integer.parseInt(name, off + 1, name.length(), 16);
+ if (isValidCodePoint(cp) && name.equals(getName(cp)))
+ return cp;
+ }
+ } catch (Exception x) {}
+ throw new IllegalArgumentException("Unrecognized character name :" + name);
}
}
--- a/jdk/src/java.base/share/classes/java/lang/CharacterName.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/java/lang/CharacterName.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 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
@@ -29,38 +29,56 @@
import java.io.InputStream;
import java.lang.ref.SoftReference;
import java.util.Arrays;
+import java.util.Locale;
import java.util.zip.InflaterInputStream;
import java.security.AccessController;
import java.security.PrivilegedAction;
class CharacterName {
- private static SoftReference<byte[]> refStrPool;
- private static int[][] lookup;
+ private static SoftReference<CharacterName> refCharName;
+
+ // codepoint -> bkIndex -> lookup -> offset/len
+ private final byte[] strPool;
+ private final int[] lookup; // code point -> offset/len in strPool
+ private final int[] bkIndices; // code point -> lookup index
+
+ // name -> hash -> hsIndices -> cpEntries -> code point
+ private final int[] cpEntries; // code points that have name in strPool
+ private final int[] hsIndices; // chain heads, hash indices into "cps"
- private static synchronized byte[] initNamePool() {
- byte[] strPool = null;
- if (refStrPool != null && (strPool = refStrPool.get()) != null)
- return strPool;
- DataInputStream dis = null;
- try {
- dis = new DataInputStream(new InflaterInputStream(
- AccessController.doPrivileged(new PrivilegedAction<>()
- {
- public InputStream run() {
- return getClass().getResourceAsStream("uniName.dat");
- }
- })));
+ private CharacterName() {
+ try (DataInputStream dis = new DataInputStream(new InflaterInputStream(
+ AccessController.doPrivileged(new PrivilegedAction<>() {
+ public InputStream run() {
+ return getClass().getResourceAsStream("uniName.dat");
+ }
+ })))) {
- lookup = new int[(Character.MAX_CODE_POINT + 1) >> 8][];
int total = dis.readInt();
+ int bkNum = dis.readInt();
+ int cpNum = dis.readInt();
int cpEnd = dis.readInt();
byte ba[] = new byte[cpEnd];
+ lookup = new int[bkNum * 256];
+ bkIndices = new int[(Character.MAX_CODE_POINT + 1) >> 8];
+ strPool = new byte[total - cpEnd];
+ cpEntries = new int[cpNum * 3];
+ hsIndices = new int[(cpNum / 2) | 1];
+ Arrays.fill(bkIndices, -1);
+ Arrays.fill(hsIndices, -1);
dis.readFully(ba);
+ dis.readFully(strPool);
int nameOff = 0;
int cpOff = 0;
int cp = 0;
+ int bk = -1;
+ int prevBk = -1; // prev bkNo;
+ int idx = 0;
+ int next = -1;
+ int hash = 0;
+ int hsh = 0;
do {
int len = ba[cpOff++] & 0xff;
if (len == 0) {
@@ -72,37 +90,91 @@
} else {
cp++;
}
+ // cp -> name
int hi = cp >> 8;
- if (lookup[hi] == null) {
- lookup[hi] = new int[0x100];
+ if (prevBk != hi) {
+ bk++;
+ bkIndices[hi] = bk;
+ prevBk = hi;
}
- lookup[hi][cp&0xff] = (nameOff << 8) | len;
+ lookup[(bk << 8) + (cp & 0xff)] = (nameOff << 8) | len;
+ // name -> cp
+ hash = hashN(strPool, nameOff, len);
+ hsh = (hash & 0x7fffffff) % hsIndices.length;
+ next = hsIndices[hsh];
+ hsIndices[hsh] = idx;
+ idx = addCp(idx, hash, next, cp);
nameOff += len;
} while (cpOff < cpEnd);
- strPool = new byte[total - cpEnd];
- dis.readFully(strPool);
- refStrPool = new SoftReference<>(strPool);
} catch (Exception x) {
throw new InternalError(x.getMessage(), x);
- } finally {
- try {
- if (dis != null)
- dis.close();
- } catch (Exception xx) {}
+ }
+ }
+
+ private static final int hashN(byte[] a, int off, int len) {
+ int h = 1;
+ while (len-- > 0) {
+ h = 31 * h + a[off++];
}
- return strPool;
+ return h;
+ }
+
+ private int addCp(int idx, int hash, int next, int cp) {
+ cpEntries[idx++] = hash;
+ cpEntries[idx++] = next;
+ cpEntries[idx++] = cp;
+ return idx;
}
- public static String get(int cp) {
- byte[] strPool = null;
- if (refStrPool == null || (strPool = refStrPool.get()) == null)
- strPool = initNamePool();
+ private int getCpHash(int idx) { return cpEntries[idx]; }
+ private int getCpNext(int idx) { return cpEntries[idx + 1]; }
+ private int getCp(int idx) { return cpEntries[idx + 2]; }
+
+ public static CharacterName getInstance() {
+ SoftReference<CharacterName> ref = refCharName;
+ CharacterName cname = null;
+ if (ref == null || (cname = ref.get()) == null) {
+ cname = new CharacterName();
+ refCharName = new SoftReference<>(cname);
+ }
+ return cname;
+ }
+
+ public String getName(int cp) {
int off = 0;
- if (lookup[cp>>8] == null ||
- (off = lookup[cp>>8][cp&0xff]) == 0)
+ int bk = bkIndices[cp >> 8];
+ if (bk == -1 || (off = lookup[(bk << 8) + (cp & 0xff)]) == 0)
return null;
@SuppressWarnings("deprecation")
String result = new String(strPool, 0, off >>> 8, off & 0xff); // ASCII
return result;
}
+
+ public int getCodePoint(String name) {
+ byte[] bname = name.getBytes(java.nio.charset.StandardCharsets.ISO_8859_1);
+ int hsh = hashN(bname, 0, bname.length);
+ int idx = hsIndices[(hsh & 0x7fffffff) % hsIndices.length];
+ while (idx != -1) {
+ if (getCpHash(idx) == hsh) {
+ int cp = getCp(idx);
+ int off = -1;
+ int bk = bkIndices[cp >> 8];
+ if (bk != -1 && (off = lookup[(bk << 8) + (cp & 0xff)]) != 0) {
+ int len = off & 0xff;
+ off = off >>> 8;
+ if (bname.length == len) {
+ int i = 0;
+ while (i < len && bname[i] == strPool[off++]) {
+ i++;
+ }
+ if (i == len) {
+ return cp;
+ }
+ }
+ }
+ }
+ idx = getCpNext(idx);
+ }
+ return -1;
+ }
}
--- a/jdk/src/java.base/share/classes/java/lang/ProcessHandleImpl.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/java/lang/ProcessHandleImpl.java Mon Feb 15 09:44:42 2016 -0800
@@ -42,8 +42,6 @@
import java.util.stream.IntStream;
import java.util.stream.Stream;
-import sun.misc.InnocuousThread;
-
import static java.security.AccessController.doPrivileged;
/**
--- a/jdk/src/java.base/share/classes/java/util/Scanner.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/java/util/Scanner.java Mon Feb 15 09:44:42 2016 -0800
@@ -38,8 +38,6 @@
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
-import sun.misc.LRUCache;
-
/**
* A simple text scanner which can parse primitive types and strings using
* regular expressions.
@@ -366,15 +364,7 @@
private Locale locale = null;
// A cache of the last few recently used Patterns
- private LRUCache<String,Pattern> patternCache =
- new LRUCache<String,Pattern>(7) {
- protected Pattern create(String s) {
- return Pattern.compile(s);
- }
- protected boolean hasName(Pattern p, String s) {
- return p.pattern().equals(s);
- }
- };
+ private PatternLRUCache patternCache = new PatternLRUCache(7);
// A holder of the last IOException encountered
private IOException lastException;
@@ -2838,4 +2828,50 @@
}
}
}
+
+ /** Small LRU cache of Patterns. */
+ private static class PatternLRUCache {
+
+ private Pattern[] oa = null;
+ private final int size;
+
+ PatternLRUCache(int size) {
+ this.size = size;
+ }
+
+ boolean hasName(Pattern p, String s) {
+ return p.pattern().equals(s);
+ }
+
+ void moveToFront(Object[] oa, int i) {
+ Object ob = oa[i];
+ for (int j = i; j > 0; j--)
+ oa[j] = oa[j - 1];
+ oa[0] = ob;
+ }
+
+ Pattern forName(String name) {
+ if (oa == null) {
+ Pattern[] temp = new Pattern[size];
+ oa = temp;
+ } else {
+ for (int i = 0; i < oa.length; i++) {
+ Pattern ob = oa[i];
+ if (ob == null)
+ continue;
+ if (hasName(ob, name)) {
+ if (i > 0)
+ moveToFront(oa, i);
+ return ob;
+ }
+ }
+ }
+
+ // Create a new object
+ Pattern ob = Pattern.compile(name);
+ oa[oa.length - 1] = ob;
+ moveToFront(oa, oa.length - 1);
+ return ob;
+ }
+ }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/java/util/regex/Grapheme.java Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,205 @@
+/*
+ * 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.util.regex;
+
+final class Grapheme {
+
+ /**
+ * Determines if there is an extended grapheme cluster boundary between two
+ * continuing characters {@code cp1} and {@code cp2}.
+ * <p>
+ * See Unicode Standard Annex #29 Unicode Text Segmentation for the specification
+ * for the extended grapheme cluster boundary rules
+ */
+ static boolean isBoundary(int cp1, int cp2) {
+ return rules[getType(cp1)][getType(cp2)];
+ }
+
+ // types
+ private static final int OTHER = 0;
+ private static final int CR = 1;
+ private static final int LF = 2;
+ private static final int CONTROL = 3;
+ private static final int EXTEND = 4;
+ private static final int RI = 5;
+ private static final int PREPEND = 6;
+ private static final int SPACINGMARK = 7;
+ private static final int L = 8;
+ private static final int V = 9;
+ private static final int T = 10;
+ private static final int LV = 11;
+ private static final int LVT = 12;
+
+ private static final int FIRST_TYPE = 0;
+ private static final int LAST_TYPE = 12;
+
+ private static boolean[][] rules;
+ static {
+ rules = new boolean[LAST_TYPE + 1][LAST_TYPE + 1];
+ // default, any + any
+ for (int i = FIRST_TYPE; i <= LAST_TYPE; i++)
+ for (int j = FIRST_TYPE; j <= LAST_TYPE; j++)
+ rules[i][j] = true;
+ // GB 6 L x (L | V | LV | VT)
+ rules[L][L] = false;
+ rules[L][V] = false;
+ rules[L][LV] = false;
+ rules[L][LVT] = false;
+ // GB 7 (LV | V) x (V | T)
+ rules[LV][V] = false;
+ rules[LV][T] = false;
+ rules[V][V] = false;
+ rules[V][T] = false;
+ // GB 8 (LVT | T) x T
+ rules[LVT][T] = false;
+ rules[T][T] = false;
+ // GB 8a RI x RI
+ rules[RI][RI] = false;
+ // GB 9 x Extend
+ // GB 9a x Spacing Mark
+ // GB 9b Prepend x
+ for (int i = FIRST_TYPE; i <= LAST_TYPE; i++) {
+ rules[i][EXTEND] = false;
+ rules[i][SPACINGMARK] = false;
+ rules[PREPEND][i] = false;
+ }
+ // GB 4 (Control | CR | LF) +
+ // GB 5 + (Control | CR | LF)
+ for (int i = FIRST_TYPE; i <= LAST_TYPE; i++)
+ for (int j = CR; j <= CONTROL; j++) {
+ rules[i][j] = true;
+ rules[j][i] = true;
+ }
+ // GB 3 CR x LF
+ rules[CR][LF] = false;
+ // GB 10 Any + Any -> default
+ }
+
+ // Hangul syllables
+ private static final int SYLLABLE_BASE = 0xAC00;
+ private static final int LCOUNT = 19;
+ private static final int VCOUNT = 21;
+ private static final int TCOUNT = 28;
+ private static final int NCOUNT = VCOUNT * TCOUNT; // 588
+ private static final int SCOUNT = LCOUNT * NCOUNT; // 11172
+
+ // #tr29: SpacingMark exceptions: The following (which have
+ // General_Category = Spacing_Mark and would otherwise be included)
+ // are specifically excluded
+ private static boolean isExcludedSpacingMark(int cp) {
+ return cp == 0x102B || cp == 0x102C || cp == 0x1038 ||
+ cp >= 0x1062 && cp <= 0x1064 ||
+ cp >= 0x1062 && cp <= 0x106D ||
+ cp == 0x1083 ||
+ cp >= 0x1087 && cp <= 0x108C ||
+ cp == 0x108F ||
+ cp >= 0x109A && cp <= 0x109C ||
+ cp == 0x1A61 || cp == 0x1A63 || cp == 0x1A64 ||
+ cp == 0xAA7B || cp == 0xAA7D;
+ }
+
+ @SuppressWarnings("fallthrough")
+ private static int getType(int cp) {
+ int type = Character.getType(cp);
+ switch(type) {
+ case Character.CONTROL:
+ if (cp == 0x000D)
+ return CR;
+ if (cp == 0x000A)
+ return LF;
+ return CONTROL;
+ case Character.UNASSIGNED:
+ // NOTE: #tr29 lists "Unassigned and Default_Ignorable_Code_Point" as Control
+ // but GraphemeBreakTest.txt lists u+0378/reserved-0378 as "Other"
+ // so type it as "Other" to make the test happy
+ if (cp == 0x0378)
+ return OTHER;
+
+ case Character.LINE_SEPARATOR:
+ case Character.PARAGRAPH_SEPARATOR:
+ case Character.SURROGATE:
+ return CONTROL;
+ case Character.FORMAT:
+ if (cp == 0x200C || cp == 0x200D)
+ return EXTEND;
+ return CONTROL;
+ case Character.NON_SPACING_MARK:
+ case Character.ENCLOSING_MARK:
+ // NOTE:
+ // #tr29 "plus a few General_Category = Spacing_Mark needed for
+ // canonical equivalence."
+ // but for "extended grapheme clusters" support, there is no
+ // need actually to diff "extend" and "spackmark" given GB9, GB9a
+ return EXTEND;
+ case Character.COMBINING_SPACING_MARK:
+ if (isExcludedSpacingMark(cp))
+ return OTHER;
+ // NOTE:
+ // 0x11720 and 0x11721 are mentioned in #tr29 as
+ // OTHER_LETTER but it appears their category has been updated to
+ // COMBING_SPACING_MARK already (verified in ver.8)
+ return SPACINGMARK;
+ case Character.OTHER_SYMBOL:
+ if (cp >= 0x1F1E6 && cp <= 0x1F1FF)
+ return RI;
+ return OTHER;
+ case Character.MODIFIER_LETTER:
+ // WARNING:
+ // not mentioned in #tr29 but listed in GraphemeBreakProperty.txt
+ if (cp == 0xFF9E || cp == 0xFF9F)
+ return EXTEND;
+ return OTHER;
+ case Character.OTHER_LETTER:
+ if (cp == 0x0E33 || cp == 0x0EB3)
+ return SPACINGMARK;
+ // hangul jamo
+ if (cp >= 0x1100 && cp <= 0x11FF) {
+ if (cp <= 0x115F)
+ return L;
+ if (cp <= 0x11A7)
+ return V;
+ return T;
+ }
+ // hangul syllables
+ int sindex = cp - SYLLABLE_BASE;
+ if (sindex >= 0 && sindex < SCOUNT) {
+
+ if (sindex % TCOUNT == 0)
+ return LV;
+ return LVT;
+ }
+ // hangul jamo_extended A
+ if (cp >= 0xA960 && cp <= 0xA97C)
+ return L;
+ // hangul jamo_extended B
+ if (cp >= 0xD7B0 && cp <= 0xD7C6)
+ return V;
+ if (cp >= 0xD7CB && cp <= 0xD7FB)
+ return T;
+ }
+ return OTHER;
+ }
+}
--- a/jdk/src/java.base/share/classes/java/util/regex/Pattern.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/java/util/regex/Pattern.java Mon Feb 15 09:44:42 2016 -0800
@@ -109,6 +109,8 @@
* ({@link java.lang.Character#MIN_CODE_POINT Character.MIN_CODE_POINT}
* <= {@code 0x}<i>h...h</i> <=
* {@link java.lang.Character#MAX_CODE_POINT Character.MAX_CODE_POINT})</td></tr>
+ * <tr><td valign="top" headers="construct characters"><code>\N{</code><i>name</i><code>}</code></td>
+ * <td headers="matches">The character with Unicode character name <i>'name'</i></td></tr>
* <tr><td valign="top" headers="matches">{@code \t}</td>
* <td headers="matches">The tab character (<code>'\u0009'</code>)</td></tr>
* <tr><td valign="top" headers="construct characters">{@code \n}</td>
@@ -243,6 +245,8 @@
* <td headers="matches">The end of a line</td></tr>
* <tr><td valign="top" headers="construct bounds">{@code \b}</td>
* <td headers="matches">A word boundary</td></tr>
+ * <tr><td valign="top" headers="construct bounds">{@code \b{g}}</td>
+ * <td headers="matches">A Unicode extended grapheme cluster boundary</td></tr>
* <tr><td valign="top" headers="construct bounds">{@code \B}</td>
* <td headers="matches">A non-word boundary</td></tr>
* <tr><td valign="top" headers="construct bounds">{@code \A}</td>
@@ -263,6 +267,11 @@
* </code></td></tr>
*
* <tr><th> </th></tr>
+ * <tr align="left"><th colspan="2" id="grapheme">Unicode Extended Grapheme matcher</th></tr>
+ * <tr><td valign="top" headers="construct grapheme">{@code \X}</td>
+ * <td headers="matches">Any Unicode extended grapheme cluster</td></tr>
+ *
+ * <tr><th> </th></tr>
* <tr align="left"><th colspan="2" id="greedy">Greedy quantifiers</th></tr>
*
* <tr><td valign="top" headers="construct greedy"><i>X</i>{@code ?}</td>
@@ -546,12 +555,21 @@
* {@code "\\u2014"}, while not equal, compile into the same pattern, which
* matches the character with hexadecimal value {@code 0x2014}.
* <p>
- * A Unicode character can also be represented in a regular-expression by
- * using its <b>Hex notation</b>(hexadecimal code point value) directly as described in construct
- * <code>\x{...}</code>, for example a supplementary character U+2011F
- * can be specified as <code>\x{2011F}</code>, instead of two consecutive
- * Unicode escape sequences of the surrogate pair
- * <code>\uD840</code><code>\uDD1F</code>.
+ * A Unicode character can also be represented by using its <b>Hex notation</b>
+ * (hexadecimal code point value) directly as described in construct
+ * <code>\x{...}</code>, for example a supplementary character U+2011F can be
+ * specified as <code>\x{2011F}</code>, instead of two consecutive Unicode escape
+ * sequences of the surrogate pair <code>\uD840</code><code>\uDD1F</code>.
+ * <p>
+ * <b>Unicode character names</b> are supported by the named character construct
+ * <code>\N{</code>...<code>}</code>, for example, <code>\N{WHITE SMILING FACE}</code>
+ * specifies character <code>\u263A</code>. The character names supported
+ * by this class are the valid Unicode character names matched by
+ * {@link java.lang.Character#codePointOf(String) Character.codePointOf(name)}.
+ * <p>
+ * <a href="http://www.unicode.org/reports/tr18/#Default_Grapheme_Clusters">
+ * <b>Unicode extended grapheme clusters</b></a> are supported by the grapheme
+ * cluster matcher {@code \X} and the corresponding boundary matcher {@code \b{g}}.
* <p>
* Unicode scripts, blocks, categories and binary properties are written with
* the {@code \p} and {@code \P} constructs as in Perl.
@@ -679,22 +697,12 @@
* <p> Perl constructs not supported by this class: </p>
*
* <ul>
- * <li><p> Predefined character classes (Unicode character)
- * <p><code>\X </code>Match Unicode
- * <a href="http://www.unicode.org/reports/tr18/#Default_Grapheme_Clusters">
- * <i>extended grapheme cluster</i></a>
- * </p></li>
- *
* <li><p> The backreference constructs, <code>\g{</code><i>n</i><code>}</code> for
* the <i>n</i><sup>th</sup><a href="#cg">capturing group</a> and
* <code>\g{</code><i>name</i><code>}</code> for
* <a href="#groupname">named-capturing group</a>.
* </p></li>
*
- * <li><p> The named character construct, <code>\N{</code><i>name</i><code>}</code>
- * for a Unicode character by its name.
- * </p></li>
- *
* <li><p> The conditional constructs
* {@code (?(}<i>condition</i>{@code )}<i>X</i>{@code )} and
* {@code (?(}<i>condition</i>{@code )}<i>X</i>{@code |}<i>Y</i>{@code )},
@@ -2357,7 +2365,9 @@
case 'K':
case 'L':
case 'M':
+ break;
case 'N':
+ return N();
case 'O':
case 'P':
case 'Q':
@@ -2383,6 +2393,11 @@
: new Ctype(ASCII.WORD).complement();
return -1;
case 'X':
+ if (inclass) break;
+ if (create) {
+ root = new XGrapheme();
+ }
+ return -1;
case 'Y':
break;
case 'Z':
@@ -2398,7 +2413,19 @@
return '\007';
case 'b':
if (inclass) break;
- if (create) root = new Bound(Bound.BOTH, has(UNICODE_CHARACTER_CLASS));
+ if (create) {
+ if (peek() == '{') {
+ if (skip() == 'g') {
+ if (read() == '}') {
+ root = new GraphemeBound();
+ return -1;
+ }
+ break; // error missing trailing }
+ }
+ unread(); unread();
+ }
+ root = new Bound(Bound.BOTH, has(UNICODE_CHARACTER_CLASS));
+ }
return -1;
case 'c':
return c();
@@ -3275,10 +3302,25 @@
return n;
}
+ private int N() {
+ if (read() == '{') {
+ int i = cursor;
+ while (cursor < patternLength && read() != '}') {}
+ if (cursor > patternLength)
+ throw error("Unclosed character name escape sequence");
+ String name = new String(temp, i, cursor - i - 1);
+ try {
+ return Character.codePointOf(name);
+ } catch (IllegalArgumentException x) {
+ throw error("Unknown character name [" + name + "]");
+ }
+ }
+ throw error("Illegal character name escape sequence");
+ }
+
//
// Utility methods for code point support
//
-
private static final int countChars(CharSequence seq, int index,
int lengthInCodePoints) {
// optimization
@@ -3958,6 +4000,62 @@
}
/**
+ * Node class that matches an unicode extended grapheme cluster
+ */
+ static class XGrapheme extends Node {
+ boolean match(Matcher matcher, int i, CharSequence seq) {
+ if (i < matcher.to) {
+ int ch0 = Character.codePointAt(seq, i);
+ i += Character.charCount(ch0);
+ while (i < matcher.to) {
+ int ch1 = Character.codePointAt(seq, i);
+ if (Grapheme.isBoundary(ch0, ch1))
+ break;
+ ch0 = ch1;
+ i += Character.charCount(ch1);
+ }
+ return next.match(matcher, i, seq);
+ }
+ matcher.hitEnd = true;
+ return false;
+ }
+
+ boolean study(TreeInfo info) {
+ info.minLength++;
+ info.deterministic = false;
+ return next.study(info);
+ }
+ }
+
+ /**
+ * Node class that handles grapheme boundaries
+ */
+ static class GraphemeBound extends Node {
+ boolean match(Matcher matcher, int i, CharSequence seq) {
+ int startIndex = matcher.from;
+ int endIndex = matcher.to;
+ if (matcher.transparentBounds) {
+ startIndex = 0;
+ endIndex = matcher.getTextLength();
+ }
+ if (i == startIndex) {
+ return next.match(matcher, i, seq);
+ }
+ if (i < endIndex) {
+ if (Character.isSurrogatePair(seq.charAt(i-1), seq.charAt(i)) ||
+ !Grapheme.isBoundary(Character.codePointBefore(seq, i),
+ Character.codePointAt(seq, i))) {
+ return false;
+ }
+ } else {
+ matcher.hitEnd = true;
+ matcher.requireEnd = true;
+ }
+ return next.match(matcher, i, seq);
+ }
+ }
+
+ /**
* Base class for all Slice nodes
*/
static class SliceNode extends Node {
--- a/jdk/src/java.base/share/classes/jdk/internal/logger/BootstrapLogger.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/jdk/internal/logger/BootstrapLogger.java Mon Feb 15 09:44:42 2016 -0800
@@ -47,7 +47,7 @@
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
-import sun.misc.InnocuousThread;
+import jdk.internal.misc.InnocuousThread;
import jdk.internal.misc.VM;
import sun.util.logging.PlatformLogger;
import jdk.internal.logger.LazyLoggers.LazyLoggerAccessor;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/jdk/internal/misc/InnocuousThread.java Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2013, 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 jdk.internal.misc;
+
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.ProtectionDomain;
+import java.security.PrivilegedAction;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * A thread that has no permissions, is not a member of any user-defined
+ * ThreadGroup and supports the ability to erase ThreadLocals.
+ */
+public final class InnocuousThread extends Thread {
+ private static final jdk.internal.misc.Unsafe UNSAFE;
+ private static final long THREAD_LOCALS;
+ private static final long INHERITABLE_THREAD_LOCALS;
+ private static final ThreadGroup INNOCUOUSTHREADGROUP;
+ private static final AccessControlContext ACC;
+ private static final long INHERITEDACCESSCONTROLCONTEXT;
+ private static final long CONTEXTCLASSLOADER;
+
+ private static final AtomicInteger threadNumber = new AtomicInteger(1);
+
+ public InnocuousThread(Runnable target) {
+ this(INNOCUOUSTHREADGROUP, target,
+ "InnocuousThread-" + threadNumber.getAndIncrement());
+ }
+
+ public InnocuousThread(Runnable target, String name) {
+ this(INNOCUOUSTHREADGROUP, target, name);
+ }
+
+ public InnocuousThread(ThreadGroup group, Runnable target, String name) {
+ super(group, target, name, 0L, false);
+ UNSAFE.putOrderedObject(this, INHERITEDACCESSCONTROLCONTEXT, ACC);
+ UNSAFE.putOrderedObject(this, CONTEXTCLASSLOADER, ClassLoader.getSystemClassLoader());
+ }
+
+ @Override
+ public void setUncaughtExceptionHandler(UncaughtExceptionHandler x) {
+ // silently fail
+ }
+
+ @Override
+ public void setContextClassLoader(ClassLoader cl) {
+ // Allow clearing of the TCCL to remove the reference to the system classloader.
+ if (cl == null)
+ super.setContextClassLoader(null);
+ else
+ throw new SecurityException("setContextClassLoader");
+ }
+
+ /**
+ * Drops all thread locals (and inherited thread locals).
+ */
+ public final void eraseThreadLocals() {
+ UNSAFE.putObject(this, THREAD_LOCALS, null);
+ UNSAFE.putObject(this, INHERITABLE_THREAD_LOCALS, null);
+ }
+
+ // ensure run method is run only once
+ private volatile boolean hasRun;
+
+ @Override
+ public void run() {
+ if (Thread.currentThread() == this && !hasRun) {
+ hasRun = true;
+ super.run();
+ }
+ }
+
+ // Use Unsafe to access Thread group and ThreadGroup parent fields
+ static {
+ try {
+ ACC = new AccessControlContext(new ProtectionDomain[] {
+ new ProtectionDomain(null, null)
+ });
+
+ // Find and use topmost ThreadGroup as parent of new group
+ UNSAFE = jdk.internal.misc.Unsafe.getUnsafe();
+ Class<?> tk = Thread.class;
+ Class<?> gk = ThreadGroup.class;
+
+ THREAD_LOCALS = UNSAFE.objectFieldOffset
+ (tk.getDeclaredField("threadLocals"));
+ INHERITABLE_THREAD_LOCALS = UNSAFE.objectFieldOffset
+ (tk.getDeclaredField("inheritableThreadLocals"));
+ INHERITEDACCESSCONTROLCONTEXT = UNSAFE.objectFieldOffset
+ (tk.getDeclaredField("inheritedAccessControlContext"));
+ CONTEXTCLASSLOADER = UNSAFE.objectFieldOffset
+ (tk.getDeclaredField("contextClassLoader"));
+
+ long tg = UNSAFE.objectFieldOffset(tk.getDeclaredField("group"));
+ long gp = UNSAFE.objectFieldOffset(gk.getDeclaredField("parent"));
+ ThreadGroup group = (ThreadGroup)
+ UNSAFE.getObject(Thread.currentThread(), tg);
+
+ while (group != null) {
+ ThreadGroup parent = (ThreadGroup)UNSAFE.getObject(group, gp);
+ if (parent == null)
+ break;
+ group = parent;
+ }
+ final ThreadGroup root = group;
+ INNOCUOUSTHREADGROUP = AccessController.doPrivileged(
+ (PrivilegedAction<ThreadGroup>) () ->
+ { return new ThreadGroup(root, "InnocuousThreadGroup"); });
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
+}
--- a/jdk/src/java.base/share/classes/jdk/internal/ref/CleanerImpl.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/jdk/internal/ref/CleanerImpl.java Mon Feb 15 09:44:42 2016 -0800
@@ -33,7 +33,7 @@
import java.util.concurrent.ThreadFactory;
import java.util.function.Function;
-import sun.misc.InnocuousThread;
+import jdk.internal.misc.InnocuousThread;
/**
* CleanerImpl manages a set of object references and corresponding cleaning actions.
--- a/jdk/src/java.base/share/classes/jdk/internal/vm/annotation/ReservedStackAccess.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/jdk/internal/vm/annotation/ReservedStackAccess.java Mon Feb 15 09:44:42 2016 -0800
@@ -45,7 +45,7 @@
* throw a delayed StackOverflowError when the thread exits the annotated
* method.
*
- * @since 1.9
+ * @since 9
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
--- a/jdk/src/java.base/share/classes/sun/misc/InnocuousThread.java Thu Feb 11 13:58:43 2016 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2013, 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 sun.misc;
-
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.ProtectionDomain;
-import java.security.PrivilegedAction;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * A thread that has no permissions, is not a member of any user-defined
- * ThreadGroup and supports the ability to erase ThreadLocals.
- */
-public final class InnocuousThread extends Thread {
- private static final jdk.internal.misc.Unsafe UNSAFE;
- private static final long THREAD_LOCALS;
- private static final long INHERITABLE_THREAD_LOCALS;
- private static final ThreadGroup INNOCUOUSTHREADGROUP;
- private static final AccessControlContext ACC;
- private static final long INHERITEDACCESSCONTROLCONTEXT;
- private static final long CONTEXTCLASSLOADER;
-
- private static final AtomicInteger threadNumber = new AtomicInteger(1);
-
- public InnocuousThread(Runnable target) {
- this(INNOCUOUSTHREADGROUP, target,
- "InnocuousThread-" + threadNumber.getAndIncrement());
- }
-
- public InnocuousThread(Runnable target, String name) {
- this(INNOCUOUSTHREADGROUP, target, name);
- }
-
- public InnocuousThread(ThreadGroup group, Runnable target, String name) {
- super(group, target, name, 0L, false);
- UNSAFE.putOrderedObject(this, INHERITEDACCESSCONTROLCONTEXT, ACC);
- UNSAFE.putOrderedObject(this, CONTEXTCLASSLOADER, ClassLoader.getSystemClassLoader());
- }
-
- @Override
- public void setUncaughtExceptionHandler(UncaughtExceptionHandler x) {
- // silently fail
- }
-
- @Override
- public void setContextClassLoader(ClassLoader cl) {
- // Allow clearing of the TCCL to remove the reference to the system classloader.
- if (cl == null)
- super.setContextClassLoader(null);
- else
- throw new SecurityException("setContextClassLoader");
- }
-
- /**
- * Drops all thread locals (and inherited thread locals).
- */
- public final void eraseThreadLocals() {
- UNSAFE.putObject(this, THREAD_LOCALS, null);
- UNSAFE.putObject(this, INHERITABLE_THREAD_LOCALS, null);
- }
-
- // ensure run method is run only once
- private volatile boolean hasRun;
-
- @Override
- public void run() {
- if (Thread.currentThread() == this && !hasRun) {
- hasRun = true;
- super.run();
- }
- }
-
- // Use Unsafe to access Thread group and ThreadGroup parent fields
- static {
- try {
- ACC = new AccessControlContext(new ProtectionDomain[] {
- new ProtectionDomain(null, null)
- });
-
- // Find and use topmost ThreadGroup as parent of new group
- UNSAFE = jdk.internal.misc.Unsafe.getUnsafe();
- Class<?> tk = Thread.class;
- Class<?> gk = ThreadGroup.class;
-
- THREAD_LOCALS = UNSAFE.objectFieldOffset
- (tk.getDeclaredField("threadLocals"));
- INHERITABLE_THREAD_LOCALS = UNSAFE.objectFieldOffset
- (tk.getDeclaredField("inheritableThreadLocals"));
- INHERITEDACCESSCONTROLCONTEXT = UNSAFE.objectFieldOffset
- (tk.getDeclaredField("inheritedAccessControlContext"));
- CONTEXTCLASSLOADER = UNSAFE.objectFieldOffset
- (tk.getDeclaredField("contextClassLoader"));
-
- long tg = UNSAFE.objectFieldOffset(tk.getDeclaredField("group"));
- long gp = UNSAFE.objectFieldOffset(gk.getDeclaredField("parent"));
- ThreadGroup group = (ThreadGroup)
- UNSAFE.getObject(Thread.currentThread(), tg);
-
- while (group != null) {
- ThreadGroup parent = (ThreadGroup)UNSAFE.getObject(group, gp);
- if (parent == null)
- break;
- group = parent;
- }
- final ThreadGroup root = group;
- INNOCUOUSTHREADGROUP = AccessController.doPrivileged(
- (PrivilegedAction<ThreadGroup>) () ->
- { return new ThreadGroup(root, "InnocuousThreadGroup"); });
- } catch (Exception e) {
- throw new Error(e);
- }
- }
-}
--- a/jdk/src/java.base/share/classes/sun/misc/LRUCache.java Thu Feb 11 13:58:43 2016 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2003, 2011, 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 sun.misc;
-
-/**
- * Utility class for small LRU caches.
- *
- * @author Mark Reinhold
- */
-public abstract class LRUCache<N,V> {
-
- private V[] oa = null;
- private final int size;
-
- public LRUCache(int size) {
- this.size = size;
- }
-
- protected abstract V create(N name);
-
- protected abstract boolean hasName(V ob, N name);
-
- public static void moveToFront(Object[] oa, int i) {
- Object ob = oa[i];
- for (int j = i; j > 0; j--)
- oa[j] = oa[j - 1];
- oa[0] = ob;
- }
-
- public V forName(N name) {
- if (oa == null) {
- @SuppressWarnings("unchecked")
- V[] temp = (V[])new Object[size];
- oa = temp;
- } else {
- for (int i = 0; i < oa.length; i++) {
- V ob = oa[i];
- if (ob == null)
- continue;
- if (hasName(ob, name)) {
- if (i > 0)
- moveToFront(oa, i);
- return ob;
- }
- }
- }
-
- // Create a new object
- V ob = create(name);
- oa[oa.length - 1] = ob;
- moveToFront(oa, oa.length - 1);
- return ob;
- }
-
-}
--- a/jdk/src/java.base/share/classes/sun/net/www/http/KeepAliveCache.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/sun/net/www/http/KeepAliveCache.java Mon Feb 15 09:44:42 2016 -0800
@@ -30,7 +30,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.net.URL;
-import sun.misc.InnocuousThread;
+import jdk.internal.misc.InnocuousThread;
/**
* A class that implements a cache of idle Http connections for keep-alive
--- a/jdk/src/java.base/share/classes/sun/net/www/http/KeepAliveStream.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/sun/net/www/http/KeepAliveStream.java Mon Feb 15 09:44:42 2016 -0800
@@ -27,9 +27,9 @@
import java.io.*;
-import sun.misc.InnocuousThread;
import sun.net.ProgressSource;
import sun.net.www.MeteredStream;
+import jdk.internal.misc.InnocuousThread;
/**
* A stream that has the property of being able to be kept alive for
--- a/jdk/src/java.base/share/classes/sun/nio/ch/Invoker.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/Invoker.java Mon Feb 15 09:44:42 2016 -0800
@@ -29,6 +29,7 @@
import java.util.concurrent.*;
import java.security.AccessController;
import sun.security.action.GetIntegerAction;
+import jdk.internal.misc.InnocuousThread;
/**
* Defines static methods to invoke a completion handler or arbitrary task.
@@ -134,9 +135,9 @@
// clear thread locals when in default thread pool
if (System.getSecurityManager() != null) {
Thread me = Thread.currentThread();
- if (me instanceof sun.misc.InnocuousThread) {
+ if (me instanceof InnocuousThread) {
GroupAndInvokeCount thisGroupAndInvokeCount = myGroupAndInvokeCount.get();
- ((sun.misc.InnocuousThread)me).eraseThreadLocals();
+ ((InnocuousThread)me).eraseThreadLocals();
if (thisGroupAndInvokeCount != null) {
myGroupAndInvokeCount.set(thisGroupAndInvokeCount);
}
--- a/jdk/src/java.base/share/classes/sun/nio/ch/ThreadPool.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/ThreadPool.java Mon Feb 15 09:44:42 2016 -0800
@@ -30,6 +30,7 @@
import java.security.PrivilegedAction;
import sun.security.action.GetPropertyAction;
import sun.security.action.GetIntegerAction;
+import jdk.internal.misc.InnocuousThread;
/**
* Encapsulates a thread pool associated with a channel group.
@@ -81,7 +82,7 @@
} else {
return (Runnable r) -> {
PrivilegedAction<Thread> action = () -> {
- Thread t = new sun.misc.InnocuousThread(r);
+ Thread t = new InnocuousThread(r);
t.setDaemon(true);
return t;
};
--- a/jdk/src/java.base/share/classes/sun/security/pkcs12/PKCS12KeyStore.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/classes/sun/security/pkcs12/PKCS12KeyStore.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -394,19 +394,19 @@
// decode secret key
} else {
- SecretKeyFactory sKeyFactory =
- SecretKeyFactory.getInstance(keyAlgo);
byte[] keyBytes = in.getOctetString();
SecretKeySpec secretKeySpec =
new SecretKeySpec(keyBytes, keyAlgo);
// Special handling required for PBE: needs a PBEKeySpec
if (keyAlgo.startsWith("PBE")) {
+ SecretKeyFactory sKeyFactory =
+ SecretKeyFactory.getInstance(keyAlgo);
KeySpec pbeKeySpec =
sKeyFactory.getKeySpec(secretKeySpec, PBEKeySpec.class);
key = sKeyFactory.generateSecret(pbeKeySpec);
} else {
- key = sKeyFactory.generateSecret(secretKeySpec);
+ key = secretKeySpec;
}
if (debug != null) {
--- a/jdk/src/java.base/share/native/libjimage/ImageNativeSubstrate.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/native/libjimage/ImageNativeSubstrate.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -1,26 +1,32 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
*
- * 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.
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * 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).
+ * - Neither the name of Oracle nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
*
- * 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.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <string.h>
--- a/jdk/src/java.base/share/native/libjimage/endian.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/native/libjimage/endian.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -1,26 +1,32 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
*
- * 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.
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * 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).
+ * - Neither the name of Oracle nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
*
- * 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.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "endian.hpp"
--- a/jdk/src/java.base/share/native/libjimage/endian.hpp Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/native/libjimage/endian.hpp Mon Feb 15 09:44:42 2016 -0800
@@ -1,26 +1,32 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
*
- * 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.
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * 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).
+ * - Neither the name of Oracle nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
*
- * 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.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LIBJIMAGE_ENDIAN_HPP
--- a/jdk/src/java.base/share/native/libjimage/imageDecompressor.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/native/libjimage/imageDecompressor.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -1,26 +1,32 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
*
- * 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.
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * 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).
+ * - Neither the name of Oracle nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
*
- * 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.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "jni.h"
--- a/jdk/src/java.base/share/native/libjimage/imageDecompressor.hpp Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/native/libjimage/imageDecompressor.hpp Mon Feb 15 09:44:42 2016 -0800
@@ -1,26 +1,32 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
*
- * 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.
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * 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).
+ * - Neither the name of Oracle nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
*
- * 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.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LIBJIMAGE_IMAGEDECOMPRESSOR_HPP
--- a/jdk/src/java.base/share/native/libjimage/imageFile.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/native/libjimage/imageFile.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -1,26 +1,32 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
*
- * 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.
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * 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).
+ * - Neither the name of Oracle nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
*
- * 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.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <assert.h>
--- a/jdk/src/java.base/share/native/libjimage/imageFile.hpp Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/native/libjimage/imageFile.hpp Mon Feb 15 09:44:42 2016 -0800
@@ -1,26 +1,32 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
*
- * 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.
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * 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).
+ * - Neither the name of Oracle nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
*
- * 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.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LIBJIMAGE_IMAGEFILE_HPP
--- a/jdk/src/java.base/share/native/libjimage/inttypes.hpp Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/native/libjimage/inttypes.hpp Mon Feb 15 09:44:42 2016 -0800
@@ -1,26 +1,32 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
*
- * 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.
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * 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).
+ * - Neither the name of Oracle nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
*
- * 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.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LIBJIMAGE_INTTYPES_HPP
--- a/jdk/src/java.base/share/native/libjimage/jimage.cpp Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/native/libjimage/jimage.cpp Mon Feb 15 09:44:42 2016 -0800
@@ -1,26 +1,32 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
*
- * 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.
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * 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).
+ * - Neither the name of Oracle nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
*
- * 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.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <string.h>
--- a/jdk/src/java.base/share/native/libjimage/jimage.hpp Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/native/libjimage/jimage.hpp Mon Feb 15 09:44:42 2016 -0800
@@ -1,26 +1,32 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
*
- * 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.
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * 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).
+ * - Neither the name of Oracle nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
*
- * 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.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "jni.h"
--- a/jdk/src/java.base/share/native/libjimage/osSupport.hpp Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.base/share/native/libjimage/osSupport.hpp Mon Feb 15 09:44:42 2016 -0800
@@ -1,26 +1,32 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
*
- * 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.
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * 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).
+ * - Neither the name of Oracle nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
*
- * 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.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LIBJIMAGE_OSSUPPORT_HPP
--- a/jdk/src/java.desktop/share/classes/sun/awt/im/InputMethodManager.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.desktop/share/classes/sun/awt/im/InputMethodManager.java Mon Feb 15 09:44:42 2016 -0800
@@ -55,7 +55,6 @@
import java.util.prefs.Preferences;
import sun.awt.InputMethodSupport;
import sun.awt.SunToolkit;
-import sun.misc.InnocuousThread;
import sun.misc.ManagedLocalsThread;
/**
--- a/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java Mon Feb 15 09:44:42 2016 -0800
@@ -54,7 +54,6 @@
import sun.awt.SunToolkit;
import sun.awt.util.ThreadGroupUtils;
import sun.java2d.FontSupport;
-import sun.misc.InnocuousThread;
import sun.misc.ManagedLocalsThread;
import sun.util.logging.PlatformLogger;
--- a/jdk/src/java.desktop/share/classes/sun/java2d/opengl/OGLRenderQueue.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/opengl/OGLRenderQueue.java Mon Feb 15 09:44:42 2016 -0800
@@ -28,7 +28,6 @@
import sun.awt.util.ThreadGroupUtils;
import sun.java2d.pipe.RenderBuffer;
import sun.java2d.pipe.RenderQueue;
-import sun.misc.InnocuousThread;
import sun.misc.ManagedLocalsThread;
import static sun.java2d.pipe.BufferedOpCodes.*;
--- a/jdk/src/java.logging/share/classes/java/util/logging/SimpleFormatter.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.logging/share/classes/java/util/logging/SimpleFormatter.java Mon Feb 15 09:44:42 2016 -0800
@@ -135,7 +135,7 @@
* SEVERE: several message with an exception
* </pre></li>
* <li> {@code java.util.logging.SimpleFormatter.format="%1$tb %1$td, %1$tY %1$tl:%1$tM:%1$tS.%1$tN %1$Tp %2$s%n%4$s: %5$s%6$s%n"}
- * <p>Since JDK 1.9, {@code java.util.logging} uses {@link
+ * <p>Since JDK 9, {@code java.util.logging} uses {@link
* java.time.Clock#systemUTC() java.time} to create more precise time
* stamps.
* The format above can be used to add a {@code .%1$tN} to the
--- a/jdk/src/java.logging/share/classes/java/util/logging/XMLFormatter.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/src/java.logging/share/classes/java/util/logging/XMLFormatter.java Mon Feb 15 09:44:42 2016 -0800
@@ -41,7 +41,7 @@
* but it is recommended that it normally be used with UTF-8. The
* character encoding can be set on the output Handler.
*
- * @implSpec Since JDK 1.9, instances of {@linkplain LogRecord} contain
+ * @implSpec Since JDK 9, instances of {@linkplain LogRecord} contain
* an {@link LogRecord#getInstant() Instant} which can have nanoseconds below
* the millisecond resolution.
* The DTD specification has been updated to allow for an optional
@@ -84,7 +84,7 @@
* Creates a new instance of XMLFormatter.
*
* @implSpec
- * Since JDK 1.9, the XMLFormatter will print out the record {@linkplain
+ * Since JDK 9, the XMLFormatter will print out the record {@linkplain
* LogRecord#getInstant() event time} as an Instant. This instant
* has the best resolution available on the system. The {@code <date>}
* element will contain the instant as formatted by the {@link
--- a/jdk/test/ProblemList.txt Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/test/ProblemList.txt Mon Feb 15 09:44:42 2016 -0800
@@ -165,6 +165,9 @@
# 8147985
sun/management/jmxremote/bootstrap/JMXInterfaceBindingTest.java generic-all
+# 8145919
+sun/management/jmxremote/bootstrap/RmiSslBootstrapTest.sh generic-all
+
############################################################################
# jdk_net
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/Character/CharacterName.java Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ *
+ * 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.
+ */
+
+/**
+ * @test
+ * @bug 8147531
+ * @summary Check j.l.Character.getName and codePointOf
+ */
+
+import java.util.Locale;
+
+public class CharacterName {
+
+ public static void main(String[] args) {
+ for (int cp = 0; cp < Character.MAX_CODE_POINT; cp++) {
+ if (!Character.isValidCodePoint(cp)) {
+ try {
+ Character.getName(cp);
+ } catch (IllegalArgumentException x) {
+ continue;
+ }
+ throw new RuntimeException("Invalid failed: " + cp);
+ } else if (Character.getType(cp) == Character.UNASSIGNED) {
+ if (Character.getName(cp) != null)
+ throw new RuntimeException("Unsigned failed: " + cp);
+ } else {
+ String name = Character.getName(cp);
+ if (cp != Character.codePointOf(name) ||
+ cp != Character.codePointOf(name.toLowerCase(Locale.ENGLISH)))
+ throw new RuntimeException("Roundtrip failed: " + cp);
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/regex/GraphemeBreakProperty.txt Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,1336 @@
+# GraphemeBreakProperty-8.0.0.txt
+# Date: 2015-02-13, 13:47:14 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2015 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see http://www.unicode.org/reports/tr44/
+
+# ================================================
+
+# Property: Grapheme_Cluster_Break
+
+# All code points not explicitly listed for Grapheme_Cluster_Break
+# have the value Other (XX).
+
+# @missing: 0000..10FFFF; Other
+
+# ================================================
+
+000D ; CR # Cc <control-000D>
+
+# Total code points: 1
+
+# ================================================
+
+000A ; LF # Cc <control-000A>
+
+# Total code points: 1
+
+# ================================================
+
+0000..0009 ; Control # Cc [10] <control-0000>..<control-0009>
+000B..000C ; Control # Cc [2] <control-000B>..<control-000C>
+000E..001F ; Control # Cc [18] <control-000E>..<control-001F>
+007F..009F ; Control # Cc [33] <control-007F>..<control-009F>
+00AD ; Control # Cf SOFT HYPHEN
+0600..0605 ; Control # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
+061C ; Control # Cf ARABIC LETTER MARK
+06DD ; Control # Cf ARABIC END OF AYAH
+070F ; Control # Cf SYRIAC ABBREVIATION MARK
+180E ; Control # Cf MONGOLIAN VOWEL SEPARATOR
+200B ; Control # Cf ZERO WIDTH SPACE
+200E..200F ; Control # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+2028 ; Control # Zl LINE SEPARATOR
+2029 ; Control # Zp PARAGRAPH SEPARATOR
+202A..202E ; Control # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+2060..2064 ; Control # Cf [5] WORD JOINER..INVISIBLE PLUS
+2065 ; Control # Cn <reserved-2065>
+2066..206F ; Control # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
+D800..DFFF ; Control # Cs [2048] <surrogate-D800>..<surrogate-DFFF>
+FEFF ; Control # Cf ZERO WIDTH NO-BREAK SPACE
+FFF0..FFF8 ; Control # Cn [9] <reserved-FFF0>..<reserved-FFF8>
+FFF9..FFFB ; Control # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
+110BD ; Control # Cf KAITHI NUMBER SIGN
+1BCA0..1BCA3 ; Control # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+1D173..1D17A ; Control # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+E0000 ; Control # Cn <reserved-E0000>
+E0001 ; Control # Cf LANGUAGE TAG
+E0002..E001F ; Control # Cn [30] <reserved-E0002>..<reserved-E001F>
+E0020..E007F ; Control # Cf [96] TAG SPACE..CANCEL TAG
+E0080..E00FF ; Control # Cn [128] <reserved-E0080>..<reserved-E00FF>
+E01F0..E0FFF ; Control # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
+
+# Total code points: 6030
+
+# ================================================
+
+0300..036F ; Extend # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+0483..0487 ; Extend # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+0488..0489 ; Extend # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+0591..05BD ; Extend # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+05BF ; Extend # Mn HEBREW POINT RAFE
+05C1..05C2 ; Extend # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5 ; Extend # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7 ; Extend # Mn HEBREW POINT QAMATS QATAN
+0610..061A ; Extend # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+064B..065F ; Extend # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
+0670 ; Extend # Mn ARABIC LETTER SUPERSCRIPT ALEF
+06D6..06DC ; Extend # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DF..06E4 ; Extend # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E7..06E8 ; Extend # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06EA..06ED ; Extend # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+0711 ; Extend # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0730..074A ; Extend # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+07A6..07B0 ; Extend # Mn [11] THAANA ABAFILI..THAANA SUKUN
+07EB..07F3 ; Extend # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+0816..0819 ; Extend # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+081B..0823 ; Extend # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0825..0827 ; Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0829..082D ; Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+0859..085B ; Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
+08E3..0902 ; Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
+093A ; Extend # Mn DEVANAGARI VOWEL SIGN OE
+093C ; Extend # Mn DEVANAGARI SIGN NUKTA
+0941..0948 ; Extend # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+094D ; Extend # Mn DEVANAGARI SIGN VIRAMA
+0951..0957 ; Extend # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
+0962..0963 ; Extend # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0981 ; Extend # Mn BENGALI SIGN CANDRABINDU
+09BC ; Extend # Mn BENGALI SIGN NUKTA
+09BE ; Extend # Mc BENGALI VOWEL SIGN AA
+09C1..09C4 ; Extend # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09CD ; Extend # Mn BENGALI SIGN VIRAMA
+09D7 ; Extend # Mc BENGALI AU LENGTH MARK
+09E2..09E3 ; Extend # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+0A01..0A02 ; Extend # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A3C ; Extend # Mn GURMUKHI SIGN NUKTA
+0A41..0A42 ; Extend # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48 ; Extend # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D ; Extend # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A51 ; Extend # Mn GURMUKHI SIGN UDAAT
+0A70..0A71 ; Extend # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A75 ; Extend # Mn GURMUKHI SIGN YAKASH
+0A81..0A82 ; Extend # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0ABC ; Extend # Mn GUJARATI SIGN NUKTA
+0AC1..0AC5 ; Extend # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8 ; Extend # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0ACD ; Extend # Mn GUJARATI SIGN VIRAMA
+0AE2..0AE3 ; Extend # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0B01 ; Extend # Mn ORIYA SIGN CANDRABINDU
+0B3C ; Extend # Mn ORIYA SIGN NUKTA
+0B3E ; Extend # Mc ORIYA VOWEL SIGN AA
+0B3F ; Extend # Mn ORIYA VOWEL SIGN I
+0B41..0B44 ; Extend # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B4D ; Extend # Mn ORIYA SIGN VIRAMA
+0B56 ; Extend # Mn ORIYA AI LENGTH MARK
+0B57 ; Extend # Mc ORIYA AU LENGTH MARK
+0B62..0B63 ; Extend # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B82 ; Extend # Mn TAMIL SIGN ANUSVARA
+0BBE ; Extend # Mc TAMIL VOWEL SIGN AA
+0BC0 ; Extend # Mn TAMIL VOWEL SIGN II
+0BCD ; Extend # Mn TAMIL SIGN VIRAMA
+0BD7 ; Extend # Mc TAMIL AU LENGTH MARK
+0C00 ; Extend # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE
+0C3E..0C40 ; Extend # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C46..0C48 ; Extend # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D ; Extend # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56 ; Extend # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C62..0C63 ; Extend # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C81 ; Extend # Mn KANNADA SIGN CANDRABINDU
+0CBC ; Extend # Mn KANNADA SIGN NUKTA
+0CBF ; Extend # Mn KANNADA VOWEL SIGN I
+0CC2 ; Extend # Mc KANNADA VOWEL SIGN UU
+0CC6 ; Extend # Mn KANNADA VOWEL SIGN E
+0CCC..0CCD ; Extend # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CD5..0CD6 ; Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CE2..0CE3 ; Extend # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0D01 ; Extend # Mn MALAYALAM SIGN CANDRABINDU
+0D3E ; Extend # Mc MALAYALAM VOWEL SIGN AA
+0D41..0D44 ; Extend # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D4D ; Extend # Mn MALAYALAM SIGN VIRAMA
+0D57 ; Extend # Mc MALAYALAM AU LENGTH MARK
+0D62..0D63 ; Extend # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0DCA ; Extend # Mn SINHALA SIGN AL-LAKUNA
+0DCF ; Extend # Mc SINHALA VOWEL SIGN AELA-PILLA
+0DD2..0DD4 ; Extend # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; Extend # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DDF ; Extend # Mc SINHALA VOWEL SIGN GAYANUKITTA
+0E31 ; Extend # Mn THAI CHARACTER MAI HAN-AKAT
+0E34..0E3A ; Extend # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E47..0E4E ; Extend # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0EB1 ; Extend # Mn LAO VOWEL SIGN MAI KAN
+0EB4..0EB9 ; Extend # Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC ; Extend # Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0EC8..0ECD ; Extend # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA
+0F18..0F19 ; Extend # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F35 ; Extend # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37 ; Extend # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39 ; Extend # Mn TIBETAN MARK TSA -PHRU
+0F71..0F7E ; Extend # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F80..0F84 ; Extend # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F86..0F87 ; Extend # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F8D..0F97 ; Extend # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC ; Extend # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6 ; Extend # Mn TIBETAN SYMBOL PADMA GDAN
+102D..1030 ; Extend # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1032..1037 ; Extend # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+1039..103A ; Extend # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+103D..103E ; Extend # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+1058..1059 ; Extend # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105E..1060 ; Extend # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1071..1074 ; Extend # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1082 ; Extend # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1085..1086 ; Extend # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+108D ; Extend # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+109D ; Extend # Mn MYANMAR VOWEL SIGN AITON AI
+135D..135F ; Extend # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
+1712..1714 ; Extend # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1732..1734 ; Extend # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+1752..1753 ; Extend # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1772..1773 ; Extend # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+17B4..17B5 ; Extend # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B7..17BD ; Extend # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17C6 ; Extend # Mn KHMER SIGN NIKAHIT
+17C9..17D3 ; Extend # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17DD ; Extend # Mn KHMER SIGN ATTHACAN
+180B..180D ; Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+18A9 ; Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+1920..1922 ; Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1927..1928 ; Extend # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1932 ; Extend # Mn LIMBU SMALL LETTER ANUSVARA
+1939..193B ; Extend # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1A17..1A18 ; Extend # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A1B ; Extend # Mn BUGINESE VOWEL SIGN AE
+1A56 ; Extend # Mn TAI THAM CONSONANT SIGN MEDIAL LA
+1A58..1A5E ; Extend # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A60 ; Extend # Mn TAI THAM SIGN SAKOT
+1A62 ; Extend # Mn TAI THAM VOWEL SIGN MAI SAT
+1A65..1A6C ; Extend # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A73..1A7C ; Extend # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F ; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1AB0..1ABD ; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1ABE ; Extend # Me COMBINING PARENTHESES OVERLAY
+1B00..1B03 ; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B34 ; Extend # Mn BALINESE SIGN REREKAN
+1B36..1B3A ; Extend # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3C ; Extend # Mn BALINESE VOWEL SIGN LA LENGA
+1B42 ; Extend # Mn BALINESE VOWEL SIGN PEPET
+1B6B..1B73 ; Extend # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B80..1B81 ; Extend # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1BA2..1BA5 ; Extend # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA8..1BA9 ; Extend # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAB..1BAD ; Extend # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
+1BE6 ; Extend # Mn BATAK SIGN TOMPI
+1BE8..1BE9 ; Extend # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
+1BED ; Extend # Mn BATAK VOWEL SIGN KARO O
+1BEF..1BF1 ; Extend # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
+1C2C..1C33 ; Extend # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C36..1C37 ; Extend # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1CD0..1CD2 ; Extend # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD4..1CE0 ; Extend # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE2..1CE8 ; Extend # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CED ; Extend # Mn VEDIC SIGN TIRYAK
+1CF4 ; Extend # Mn VEDIC TONE CANDRA ABOVE
+1CF8..1CF9 ; Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
+1DC0..1DF5 ; Extend # Mn [54] COMBINING DOTTED GRAVE ACCENT..COMBINING UP TACK ABOVE
+1DFC..1DFF ; Extend # Mn [4] COMBINING DOUBLE INVERTED BREVE BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+200C..200D ; Extend # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+20D0..20DC ; Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20DD..20E0 ; Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1 ; Extend # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E2..20E4 ; Extend # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5..20F0 ; Extend # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+2CEF..2CF1 ; Extend # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2D7F ; Extend # Mn TIFINAGH CONSONANT JOINER
+2DE0..2DFF ; Extend # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+302A..302D ; Extend # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
+302E..302F ; Extend # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3099..309A ; Extend # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+A66F ; Extend # Mn COMBINING CYRILLIC VZMET
+A670..A672 ; Extend # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+A674..A67D ; Extend # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
+A69E..A69F ; Extend # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+A6F0..A6F1 ; Extend # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A802 ; Extend # Mn SYLOTI NAGRI SIGN DVISVARA
+A806 ; Extend # Mn SYLOTI NAGRI SIGN HASANTA
+A80B ; Extend # Mn SYLOTI NAGRI SIGN ANUSVARA
+A825..A826 ; Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A8C4 ; Extend # Mn SAURASHTRA SIGN VIRAMA
+A8E0..A8F1 ; Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A926..A92D ; Extend # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+A947..A951 ; Extend # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A980..A982 ; Extend # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A9B3 ; Extend # Mn JAVANESE SIGN CECAK TELU
+A9B6..A9B9 ; Extend # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BC ; Extend # Mn JAVANESE VOWEL SIGN PEPET
+A9E5 ; Extend # Mn MYANMAR SIGN SHAN SAW
+AA29..AA2E ; Extend # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA31..AA32 ; Extend # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA35..AA36 ; Extend # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA43 ; Extend # Mn CHAM CONSONANT SIGN FINAL NG
+AA4C ; Extend # Mn CHAM CONSONANT SIGN FINAL M
+AA7C ; Extend # Mn MYANMAR SIGN TAI LAING TONE-2
+AAB0 ; Extend # Mn TAI VIET MAI KANG
+AAB2..AAB4 ; Extend # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB7..AAB8 ; Extend # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AABE..AABF ; Extend # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC1 ; Extend # Mn TAI VIET TONE MAI THO
+AAEC..AAED ; Extend # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+AAF6 ; Extend # Mn MEETEI MAYEK VIRAMA
+ABE5 ; Extend # Mn MEETEI MAYEK VOWEL SIGN ANAP
+ABE8 ; Extend # Mn MEETEI MAYEK VOWEL SIGN UNAP
+ABED ; Extend # Mn MEETEI MAYEK APUN IYEK
+FB1E ; Extend # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FE00..FE0F ; Extend # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE20..FE2F ; Extend # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+101FD ; Extend # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+102E0 ; Extend # Mn COPTIC EPACT THOUSANDS MARK
+10376..1037A ; Extend # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
+10A01..10A03 ; Extend # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06 ; Extend # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F ; Extend # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A38..10A3A ; Extend # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F ; Extend # Mn KHAROSHTHI VIRAMA
+10AE5..10AE6 ; Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
+11001 ; Extend # Mn BRAHMI SIGN ANUSVARA
+11038..11046 ; Extend # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
+1107F..11081 ; Extend # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA
+110B3..110B6 ; Extend # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B9..110BA ; Extend # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+11100..11102 ; Extend # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+11127..1112B ; Extend # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+1112D..11134 ; Extend # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
+11173 ; Extend # Mn MAHAJANI SIGN NUKTA
+11180..11181 ; Extend # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+111B6..111BE ; Extend # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+111CA..111CC ; Extend # Mn [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK
+1122F..11231 ; Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
+11234 ; Extend # Mn KHOJKI SIGN ANUSVARA
+11236..11237 ; Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+112DF ; Extend # Mn KHUDAWADI SIGN ANUSVARA
+112E3..112EA ; Extend # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
+11300..11301 ; Extend # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
+1133C ; Extend # Mn GRANTHA SIGN NUKTA
+1133E ; Extend # Mc GRANTHA VOWEL SIGN AA
+11340 ; Extend # Mn GRANTHA VOWEL SIGN II
+11357 ; Extend # Mc GRANTHA AU LENGTH MARK
+11366..1136C ; Extend # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
+11370..11374 ; Extend # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+114B0 ; Extend # Mc TIRHUTA VOWEL SIGN AA
+114B3..114B8 ; Extend # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
+114BA ; Extend # Mn TIRHUTA VOWEL SIGN SHORT E
+114BD ; Extend # Mc TIRHUTA VOWEL SIGN SHORT O
+114BF..114C0 ; Extend # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
+114C2..114C3 ; Extend # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
+115AF ; Extend # Mc SIDDHAM VOWEL SIGN AA
+115B2..115B5 ; Extend # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
+115BC..115BD ; Extend # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
+115BF..115C0 ; Extend # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
+115DC..115DD ; Extend # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+11633..1163A ; Extend # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
+1163D ; Extend # Mn MODI SIGN ANUSVARA
+1163F..11640 ; Extend # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
+116AB ; Extend # Mn TAKRI SIGN ANUSVARA
+116AD ; Extend # Mn TAKRI VOWEL SIGN AA
+116B0..116B5 ; Extend # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+116B7 ; Extend # Mn TAKRI SIGN NUKTA
+1171D..1171F ; Extend # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11722..11725 ; Extend # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11727..1172B ; Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+16AF0..16AF4 ; Extend # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
+16B30..16B36 ; Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
+16F8F..16F92 ; Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+1BC9D..1BC9E ; Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
+1D165 ; Extend # Mc MUSICAL SYMBOL COMBINING STEM
+1D167..1D169 ; Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16E..1D172 ; Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5
+1D17B..1D182 ; Extend # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B ; Extend # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD ; Extend # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D242..1D244 ; Extend # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+1DA00..1DA36 ; Extend # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
+1DA3B..1DA6C ; Extend # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
+1DA75 ; Extend # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+1DA84 ; Extend # Mn SIGNWRITING LOCATION HEAD NECK
+1DA9B..1DA9F ; Extend # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
+1DAA1..1DAAF ; Extend # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+1E8D0..1E8D6 ; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 1610
+
+# ================================================
+
+1F1E6..1F1FF ; Regional_Indicator # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
+
+# Total code points: 26
+
+# ================================================
+
+0903 ; SpacingMark # Mc DEVANAGARI SIGN VISARGA
+093B ; SpacingMark # Mc DEVANAGARI VOWEL SIGN OOE
+093E..0940 ; SpacingMark # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0949..094C ; SpacingMark # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094E..094F ; SpacingMark # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
+0982..0983 ; SpacingMark # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+09BF..09C0 ; SpacingMark # Mc [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II
+09C7..09C8 ; SpacingMark # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC ; SpacingMark # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+0A03 ; SpacingMark # Mc GURMUKHI SIGN VISARGA
+0A3E..0A40 ; SpacingMark # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A83 ; SpacingMark # Mc GUJARATI SIGN VISARGA
+0ABE..0AC0 ; SpacingMark # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC9 ; SpacingMark # Mc GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC ; SpacingMark # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0B02..0B03 ; SpacingMark # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B40 ; SpacingMark # Mc ORIYA VOWEL SIGN II
+0B47..0B48 ; SpacingMark # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C ; SpacingMark # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0BBF ; SpacingMark # Mc TAMIL VOWEL SIGN I
+0BC1..0BC2 ; SpacingMark # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8 ; SpacingMark # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC ; SpacingMark # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0C01..0C03 ; SpacingMark # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C41..0C44 ; SpacingMark # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C82..0C83 ; SpacingMark # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0CBE ; SpacingMark # Mc KANNADA VOWEL SIGN AA
+0CC0..0CC1 ; SpacingMark # Mc [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U
+0CC3..0CC4 ; SpacingMark # Mc [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR
+0CC7..0CC8 ; SpacingMark # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; SpacingMark # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0D02..0D03 ; SpacingMark # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D3F..0D40 ; SpacingMark # Mc [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II
+0D46..0D48 ; SpacingMark # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C ; SpacingMark # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D82..0D83 ; SpacingMark # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0DD0..0DD1 ; SpacingMark # Mc [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD8..0DDE ; SpacingMark # Mc [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0DF2..0DF3 ; SpacingMark # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0E33 ; SpacingMark # Lo THAI CHARACTER SARA AM
+0EB3 ; SpacingMark # Lo LAO VOWEL SIGN AM
+0F3E..0F3F ; SpacingMark # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F7F ; SpacingMark # Mc TIBETAN SIGN RNAM BCAD
+1031 ; SpacingMark # Mc MYANMAR VOWEL SIGN E
+103B..103C ; SpacingMark # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+1056..1057 ; SpacingMark # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1084 ; SpacingMark # Mc MYANMAR VOWEL SIGN SHAN E
+17B6 ; SpacingMark # Mc KHMER VOWEL SIGN AA
+17BE..17C5 ; SpacingMark # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C7..17C8 ; SpacingMark # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+1923..1926 ; SpacingMark # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1929..192B ; SpacingMark # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931 ; SpacingMark # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1933..1938 ; SpacingMark # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1A19..1A1A ; SpacingMark # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
+1A55 ; SpacingMark # Mc TAI THAM CONSONANT SIGN MEDIAL RA
+1A57 ; SpacingMark # Mc TAI THAM CONSONANT SIGN LA TANG LAI
+1A6D..1A72 ; SpacingMark # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1B04 ; SpacingMark # Mc BALINESE SIGN BISAH
+1B35 ; SpacingMark # Mc BALINESE VOWEL SIGN TEDUNG
+1B3B ; SpacingMark # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3D..1B41 ; SpacingMark # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B43..1B44 ; SpacingMark # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
+1B82 ; SpacingMark # Mc SUNDANESE SIGN PANGWISAD
+1BA1 ; SpacingMark # Mc SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA6..1BA7 ; SpacingMark # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BAA ; SpacingMark # Mc SUNDANESE SIGN PAMAAEH
+1BE7 ; SpacingMark # Mc BATAK VOWEL SIGN E
+1BEA..1BEC ; SpacingMark # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
+1BEE ; SpacingMark # Mc BATAK VOWEL SIGN U
+1BF2..1BF3 ; SpacingMark # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
+1C24..1C2B ; SpacingMark # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C34..1C35 ; SpacingMark # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1CE1 ; SpacingMark # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CF2..1CF3 ; SpacingMark # Mc [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA
+A823..A824 ; SpacingMark # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A827 ; SpacingMark # Mc SYLOTI NAGRI VOWEL SIGN OO
+A880..A881 ; SpacingMark # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A8B4..A8C3 ; SpacingMark # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A952..A953 ; SpacingMark # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+A983 ; SpacingMark # Mc JAVANESE SIGN WIGNYAN
+A9B4..A9B5 ; SpacingMark # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9BA..A9BB ; SpacingMark # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BD..A9C0 ; SpacingMark # Mc [4] JAVANESE CONSONANT SIGN KERET..JAVANESE PANGKON
+AA2F..AA30 ; SpacingMark # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA33..AA34 ; SpacingMark # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA4D ; SpacingMark # Mc CHAM CONSONANT SIGN FINAL H
+AAEB ; SpacingMark # Mc MEETEI MAYEK VOWEL SIGN II
+AAEE..AAEF ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
+AAF5 ; SpacingMark # Mc MEETEI MAYEK VOWEL SIGN VISARGA
+ABE3..ABE4 ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE6..ABE7 ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE9..ABEA ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK
+11000 ; SpacingMark # Mc BRAHMI SIGN CANDRABINDU
+11002 ; SpacingMark # Mc BRAHMI SIGN VISARGA
+11082 ; SpacingMark # Mc KAITHI SIGN VISARGA
+110B0..110B2 ; SpacingMark # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B7..110B8 ; SpacingMark # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+1112C ; SpacingMark # Mc CHAKMA VOWEL SIGN E
+11182 ; SpacingMark # Mc SHARADA SIGN VISARGA
+111B3..111B5 ; SpacingMark # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
+111BF..111C0 ; SpacingMark # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
+1122C..1122E ; SpacingMark # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
+11232..11233 ; SpacingMark # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
+11235 ; SpacingMark # Mc KHOJKI SIGN VIRAMA
+112E0..112E2 ; SpacingMark # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
+11302..11303 ; SpacingMark # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
+1133F ; SpacingMark # Mc GRANTHA VOWEL SIGN I
+11341..11344 ; SpacingMark # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
+11347..11348 ; SpacingMark # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
+1134B..1134D ; SpacingMark # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
+11362..11363 ; SpacingMark # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
+114B1..114B2 ; SpacingMark # Mc [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II
+114B9 ; SpacingMark # Mc TIRHUTA VOWEL SIGN E
+114BB..114BC ; SpacingMark # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O
+114BE ; SpacingMark # Mc TIRHUTA VOWEL SIGN AU
+114C1 ; SpacingMark # Mc TIRHUTA SIGN VISARGA
+115B0..115B1 ; SpacingMark # Mc [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II
+115B8..115BB ; SpacingMark # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
+115BE ; SpacingMark # Mc SIDDHAM SIGN VISARGA
+11630..11632 ; SpacingMark # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
+1163B..1163C ; SpacingMark # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
+1163E ; SpacingMark # Mc MODI SIGN VISARGA
+116AC ; SpacingMark # Mc TAKRI SIGN VISARGA
+116AE..116AF ; SpacingMark # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
+116B6 ; SpacingMark # Mc TAKRI SIGN VIRAMA
+11720..11721 ; SpacingMark # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+11726 ; SpacingMark # Mc AHOM VOWEL SIGN E
+16F51..16F7E ; SpacingMark # Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG
+1D166 ; SpacingMark # Mc MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D16D ; SpacingMark # Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT
+
+# Total code points: 330
+
+# ================================================
+
+1100..115F ; L # Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER
+A960..A97C ; L # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+
+# Total code points: 125
+
+# ================================================
+
+1160..11A7 ; V # Lo [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE
+D7B0..D7C6 ; V # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+
+# Total code points: 95
+
+# ================================================
+
+11A8..11FF ; T # Lo [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN
+D7CB..D7FB ; T # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+
+# Total code points: 137
+
+# ================================================
+
+AC00 ; LV # Lo HANGUL SYLLABLE GA
+AC1C ; LV # Lo HANGUL SYLLABLE GAE
+AC38 ; LV # Lo HANGUL SYLLABLE GYA
+AC54 ; LV # Lo HANGUL SYLLABLE GYAE
+AC70 ; LV # Lo HANGUL SYLLABLE GEO
+AC8C ; LV # Lo HANGUL SYLLABLE GE
+ACA8 ; LV # Lo HANGUL SYLLABLE GYEO
+ACC4 ; LV # Lo HANGUL SYLLABLE GYE
+ACE0 ; LV # Lo HANGUL SYLLABLE GO
+ACFC ; LV # Lo HANGUL SYLLABLE GWA
+AD18 ; LV # Lo HANGUL SYLLABLE GWAE
+AD34 ; LV # Lo HANGUL SYLLABLE GOE
+AD50 ; LV # Lo HANGUL SYLLABLE GYO
+AD6C ; LV # Lo HANGUL SYLLABLE GU
+AD88 ; LV # Lo HANGUL SYLLABLE GWEO
+ADA4 ; LV # Lo HANGUL SYLLABLE GWE
+ADC0 ; LV # Lo HANGUL SYLLABLE GWI
+ADDC ; LV # Lo HANGUL SYLLABLE GYU
+ADF8 ; LV # Lo HANGUL SYLLABLE GEU
+AE14 ; LV # Lo HANGUL SYLLABLE GYI
+AE30 ; LV # Lo HANGUL SYLLABLE GI
+AE4C ; LV # Lo HANGUL SYLLABLE GGA
+AE68 ; LV # Lo HANGUL SYLLABLE GGAE
+AE84 ; LV # Lo HANGUL SYLLABLE GGYA
+AEA0 ; LV # Lo HANGUL SYLLABLE GGYAE
+AEBC ; LV # Lo HANGUL SYLLABLE GGEO
+AED8 ; LV # Lo HANGUL SYLLABLE GGE
+AEF4 ; LV # Lo HANGUL SYLLABLE GGYEO
+AF10 ; LV # Lo HANGUL SYLLABLE GGYE
+AF2C ; LV # Lo HANGUL SYLLABLE GGO
+AF48 ; LV # Lo HANGUL SYLLABLE GGWA
+AF64 ; LV # Lo HANGUL SYLLABLE GGWAE
+AF80 ; LV # Lo HANGUL SYLLABLE GGOE
+AF9C ; LV # Lo HANGUL SYLLABLE GGYO
+AFB8 ; LV # Lo HANGUL SYLLABLE GGU
+AFD4 ; LV # Lo HANGUL SYLLABLE GGWEO
+AFF0 ; LV # Lo HANGUL SYLLABLE GGWE
+B00C ; LV # Lo HANGUL SYLLABLE GGWI
+B028 ; LV # Lo HANGUL SYLLABLE GGYU
+B044 ; LV # Lo HANGUL SYLLABLE GGEU
+B060 ; LV # Lo HANGUL SYLLABLE GGYI
+B07C ; LV # Lo HANGUL SYLLABLE GGI
+B098 ; LV # Lo HANGUL SYLLABLE NA
+B0B4 ; LV # Lo HANGUL SYLLABLE NAE
+B0D0 ; LV # Lo HANGUL SYLLABLE NYA
+B0EC ; LV # Lo HANGUL SYLLABLE NYAE
+B108 ; LV # Lo HANGUL SYLLABLE NEO
+B124 ; LV # Lo HANGUL SYLLABLE NE
+B140 ; LV # Lo HANGUL SYLLABLE NYEO
+B15C ; LV # Lo HANGUL SYLLABLE NYE
+B178 ; LV # Lo HANGUL SYLLABLE NO
+B194 ; LV # Lo HANGUL SYLLABLE NWA
+B1B0 ; LV # Lo HANGUL SYLLABLE NWAE
+B1CC ; LV # Lo HANGUL SYLLABLE NOE
+B1E8 ; LV # Lo HANGUL SYLLABLE NYO
+B204 ; LV # Lo HANGUL SYLLABLE NU
+B220 ; LV # Lo HANGUL SYLLABLE NWEO
+B23C ; LV # Lo HANGUL SYLLABLE NWE
+B258 ; LV # Lo HANGUL SYLLABLE NWI
+B274 ; LV # Lo HANGUL SYLLABLE NYU
+B290 ; LV # Lo HANGUL SYLLABLE NEU
+B2AC ; LV # Lo HANGUL SYLLABLE NYI
+B2C8 ; LV # Lo HANGUL SYLLABLE NI
+B2E4 ; LV # Lo HANGUL SYLLABLE DA
+B300 ; LV # Lo HANGUL SYLLABLE DAE
+B31C ; LV # Lo HANGUL SYLLABLE DYA
+B338 ; LV # Lo HANGUL SYLLABLE DYAE
+B354 ; LV # Lo HANGUL SYLLABLE DEO
+B370 ; LV # Lo HANGUL SYLLABLE DE
+B38C ; LV # Lo HANGUL SYLLABLE DYEO
+B3A8 ; LV # Lo HANGUL SYLLABLE DYE
+B3C4 ; LV # Lo HANGUL SYLLABLE DO
+B3E0 ; LV # Lo HANGUL SYLLABLE DWA
+B3FC ; LV # Lo HANGUL SYLLABLE DWAE
+B418 ; LV # Lo HANGUL SYLLABLE DOE
+B434 ; LV # Lo HANGUL SYLLABLE DYO
+B450 ; LV # Lo HANGUL SYLLABLE DU
+B46C ; LV # Lo HANGUL SYLLABLE DWEO
+B488 ; LV # Lo HANGUL SYLLABLE DWE
+B4A4 ; LV # Lo HANGUL SYLLABLE DWI
+B4C0 ; LV # Lo HANGUL SYLLABLE DYU
+B4DC ; LV # Lo HANGUL SYLLABLE DEU
+B4F8 ; LV # Lo HANGUL SYLLABLE DYI
+B514 ; LV # Lo HANGUL SYLLABLE DI
+B530 ; LV # Lo HANGUL SYLLABLE DDA
+B54C ; LV # Lo HANGUL SYLLABLE DDAE
+B568 ; LV # Lo HANGUL SYLLABLE DDYA
+B584 ; LV # Lo HANGUL SYLLABLE DDYAE
+B5A0 ; LV # Lo HANGUL SYLLABLE DDEO
+B5BC ; LV # Lo HANGUL SYLLABLE DDE
+B5D8 ; LV # Lo HANGUL SYLLABLE DDYEO
+B5F4 ; LV # Lo HANGUL SYLLABLE DDYE
+B610 ; LV # Lo HANGUL SYLLABLE DDO
+B62C ; LV # Lo HANGUL SYLLABLE DDWA
+B648 ; LV # Lo HANGUL SYLLABLE DDWAE
+B664 ; LV # Lo HANGUL SYLLABLE DDOE
+B680 ; LV # Lo HANGUL SYLLABLE DDYO
+B69C ; LV # Lo HANGUL SYLLABLE DDU
+B6B8 ; LV # Lo HANGUL SYLLABLE DDWEO
+B6D4 ; LV # Lo HANGUL SYLLABLE DDWE
+B6F0 ; LV # Lo HANGUL SYLLABLE DDWI
+B70C ; LV # Lo HANGUL SYLLABLE DDYU
+B728 ; LV # Lo HANGUL SYLLABLE DDEU
+B744 ; LV # Lo HANGUL SYLLABLE DDYI
+B760 ; LV # Lo HANGUL SYLLABLE DDI
+B77C ; LV # Lo HANGUL SYLLABLE RA
+B798 ; LV # Lo HANGUL SYLLABLE RAE
+B7B4 ; LV # Lo HANGUL SYLLABLE RYA
+B7D0 ; LV # Lo HANGUL SYLLABLE RYAE
+B7EC ; LV # Lo HANGUL SYLLABLE REO
+B808 ; LV # Lo HANGUL SYLLABLE RE
+B824 ; LV # Lo HANGUL SYLLABLE RYEO
+B840 ; LV # Lo HANGUL SYLLABLE RYE
+B85C ; LV # Lo HANGUL SYLLABLE RO
+B878 ; LV # Lo HANGUL SYLLABLE RWA
+B894 ; LV # Lo HANGUL SYLLABLE RWAE
+B8B0 ; LV # Lo HANGUL SYLLABLE ROE
+B8CC ; LV # Lo HANGUL SYLLABLE RYO
+B8E8 ; LV # Lo HANGUL SYLLABLE RU
+B904 ; LV # Lo HANGUL SYLLABLE RWEO
+B920 ; LV # Lo HANGUL SYLLABLE RWE
+B93C ; LV # Lo HANGUL SYLLABLE RWI
+B958 ; LV # Lo HANGUL SYLLABLE RYU
+B974 ; LV # Lo HANGUL SYLLABLE REU
+B990 ; LV # Lo HANGUL SYLLABLE RYI
+B9AC ; LV # Lo HANGUL SYLLABLE RI
+B9C8 ; LV # Lo HANGUL SYLLABLE MA
+B9E4 ; LV # Lo HANGUL SYLLABLE MAE
+BA00 ; LV # Lo HANGUL SYLLABLE MYA
+BA1C ; LV # Lo HANGUL SYLLABLE MYAE
+BA38 ; LV # Lo HANGUL SYLLABLE MEO
+BA54 ; LV # Lo HANGUL SYLLABLE ME
+BA70 ; LV # Lo HANGUL SYLLABLE MYEO
+BA8C ; LV # Lo HANGUL SYLLABLE MYE
+BAA8 ; LV # Lo HANGUL SYLLABLE MO
+BAC4 ; LV # Lo HANGUL SYLLABLE MWA
+BAE0 ; LV # Lo HANGUL SYLLABLE MWAE
+BAFC ; LV # Lo HANGUL SYLLABLE MOE
+BB18 ; LV # Lo HANGUL SYLLABLE MYO
+BB34 ; LV # Lo HANGUL SYLLABLE MU
+BB50 ; LV # Lo HANGUL SYLLABLE MWEO
+BB6C ; LV # Lo HANGUL SYLLABLE MWE
+BB88 ; LV # Lo HANGUL SYLLABLE MWI
+BBA4 ; LV # Lo HANGUL SYLLABLE MYU
+BBC0 ; LV # Lo HANGUL SYLLABLE MEU
+BBDC ; LV # Lo HANGUL SYLLABLE MYI
+BBF8 ; LV # Lo HANGUL SYLLABLE MI
+BC14 ; LV # Lo HANGUL SYLLABLE BA
+BC30 ; LV # Lo HANGUL SYLLABLE BAE
+BC4C ; LV # Lo HANGUL SYLLABLE BYA
+BC68 ; LV # Lo HANGUL SYLLABLE BYAE
+BC84 ; LV # Lo HANGUL SYLLABLE BEO
+BCA0 ; LV # Lo HANGUL SYLLABLE BE
+BCBC ; LV # Lo HANGUL SYLLABLE BYEO
+BCD8 ; LV # Lo HANGUL SYLLABLE BYE
+BCF4 ; LV # Lo HANGUL SYLLABLE BO
+BD10 ; LV # Lo HANGUL SYLLABLE BWA
+BD2C ; LV # Lo HANGUL SYLLABLE BWAE
+BD48 ; LV # Lo HANGUL SYLLABLE BOE
+BD64 ; LV # Lo HANGUL SYLLABLE BYO
+BD80 ; LV # Lo HANGUL SYLLABLE BU
+BD9C ; LV # Lo HANGUL SYLLABLE BWEO
+BDB8 ; LV # Lo HANGUL SYLLABLE BWE
+BDD4 ; LV # Lo HANGUL SYLLABLE BWI
+BDF0 ; LV # Lo HANGUL SYLLABLE BYU
+BE0C ; LV # Lo HANGUL SYLLABLE BEU
+BE28 ; LV # Lo HANGUL SYLLABLE BYI
+BE44 ; LV # Lo HANGUL SYLLABLE BI
+BE60 ; LV # Lo HANGUL SYLLABLE BBA
+BE7C ; LV # Lo HANGUL SYLLABLE BBAE
+BE98 ; LV # Lo HANGUL SYLLABLE BBYA
+BEB4 ; LV # Lo HANGUL SYLLABLE BBYAE
+BED0 ; LV # Lo HANGUL SYLLABLE BBEO
+BEEC ; LV # Lo HANGUL SYLLABLE BBE
+BF08 ; LV # Lo HANGUL SYLLABLE BBYEO
+BF24 ; LV # Lo HANGUL SYLLABLE BBYE
+BF40 ; LV # Lo HANGUL SYLLABLE BBO
+BF5C ; LV # Lo HANGUL SYLLABLE BBWA
+BF78 ; LV # Lo HANGUL SYLLABLE BBWAE
+BF94 ; LV # Lo HANGUL SYLLABLE BBOE
+BFB0 ; LV # Lo HANGUL SYLLABLE BBYO
+BFCC ; LV # Lo HANGUL SYLLABLE BBU
+BFE8 ; LV # Lo HANGUL SYLLABLE BBWEO
+C004 ; LV # Lo HANGUL SYLLABLE BBWE
+C020 ; LV # Lo HANGUL SYLLABLE BBWI
+C03C ; LV # Lo HANGUL SYLLABLE BBYU
+C058 ; LV # Lo HANGUL SYLLABLE BBEU
+C074 ; LV # Lo HANGUL SYLLABLE BBYI
+C090 ; LV # Lo HANGUL SYLLABLE BBI
+C0AC ; LV # Lo HANGUL SYLLABLE SA
+C0C8 ; LV # Lo HANGUL SYLLABLE SAE
+C0E4 ; LV # Lo HANGUL SYLLABLE SYA
+C100 ; LV # Lo HANGUL SYLLABLE SYAE
+C11C ; LV # Lo HANGUL SYLLABLE SEO
+C138 ; LV # Lo HANGUL SYLLABLE SE
+C154 ; LV # Lo HANGUL SYLLABLE SYEO
+C170 ; LV # Lo HANGUL SYLLABLE SYE
+C18C ; LV # Lo HANGUL SYLLABLE SO
+C1A8 ; LV # Lo HANGUL SYLLABLE SWA
+C1C4 ; LV # Lo HANGUL SYLLABLE SWAE
+C1E0 ; LV # Lo HANGUL SYLLABLE SOE
+C1FC ; LV # Lo HANGUL SYLLABLE SYO
+C218 ; LV # Lo HANGUL SYLLABLE SU
+C234 ; LV # Lo HANGUL SYLLABLE SWEO
+C250 ; LV # Lo HANGUL SYLLABLE SWE
+C26C ; LV # Lo HANGUL SYLLABLE SWI
+C288 ; LV # Lo HANGUL SYLLABLE SYU
+C2A4 ; LV # Lo HANGUL SYLLABLE SEU
+C2C0 ; LV # Lo HANGUL SYLLABLE SYI
+C2DC ; LV # Lo HANGUL SYLLABLE SI
+C2F8 ; LV # Lo HANGUL SYLLABLE SSA
+C314 ; LV # Lo HANGUL SYLLABLE SSAE
+C330 ; LV # Lo HANGUL SYLLABLE SSYA
+C34C ; LV # Lo HANGUL SYLLABLE SSYAE
+C368 ; LV # Lo HANGUL SYLLABLE SSEO
+C384 ; LV # Lo HANGUL SYLLABLE SSE
+C3A0 ; LV # Lo HANGUL SYLLABLE SSYEO
+C3BC ; LV # Lo HANGUL SYLLABLE SSYE
+C3D8 ; LV # Lo HANGUL SYLLABLE SSO
+C3F4 ; LV # Lo HANGUL SYLLABLE SSWA
+C410 ; LV # Lo HANGUL SYLLABLE SSWAE
+C42C ; LV # Lo HANGUL SYLLABLE SSOE
+C448 ; LV # Lo HANGUL SYLLABLE SSYO
+C464 ; LV # Lo HANGUL SYLLABLE SSU
+C480 ; LV # Lo HANGUL SYLLABLE SSWEO
+C49C ; LV # Lo HANGUL SYLLABLE SSWE
+C4B8 ; LV # Lo HANGUL SYLLABLE SSWI
+C4D4 ; LV # Lo HANGUL SYLLABLE SSYU
+C4F0 ; LV # Lo HANGUL SYLLABLE SSEU
+C50C ; LV # Lo HANGUL SYLLABLE SSYI
+C528 ; LV # Lo HANGUL SYLLABLE SSI
+C544 ; LV # Lo HANGUL SYLLABLE A
+C560 ; LV # Lo HANGUL SYLLABLE AE
+C57C ; LV # Lo HANGUL SYLLABLE YA
+C598 ; LV # Lo HANGUL SYLLABLE YAE
+C5B4 ; LV # Lo HANGUL SYLLABLE EO
+C5D0 ; LV # Lo HANGUL SYLLABLE E
+C5EC ; LV # Lo HANGUL SYLLABLE YEO
+C608 ; LV # Lo HANGUL SYLLABLE YE
+C624 ; LV # Lo HANGUL SYLLABLE O
+C640 ; LV # Lo HANGUL SYLLABLE WA
+C65C ; LV # Lo HANGUL SYLLABLE WAE
+C678 ; LV # Lo HANGUL SYLLABLE OE
+C694 ; LV # Lo HANGUL SYLLABLE YO
+C6B0 ; LV # Lo HANGUL SYLLABLE U
+C6CC ; LV # Lo HANGUL SYLLABLE WEO
+C6E8 ; LV # Lo HANGUL SYLLABLE WE
+C704 ; LV # Lo HANGUL SYLLABLE WI
+C720 ; LV # Lo HANGUL SYLLABLE YU
+C73C ; LV # Lo HANGUL SYLLABLE EU
+C758 ; LV # Lo HANGUL SYLLABLE YI
+C774 ; LV # Lo HANGUL SYLLABLE I
+C790 ; LV # Lo HANGUL SYLLABLE JA
+C7AC ; LV # Lo HANGUL SYLLABLE JAE
+C7C8 ; LV # Lo HANGUL SYLLABLE JYA
+C7E4 ; LV # Lo HANGUL SYLLABLE JYAE
+C800 ; LV # Lo HANGUL SYLLABLE JEO
+C81C ; LV # Lo HANGUL SYLLABLE JE
+C838 ; LV # Lo HANGUL SYLLABLE JYEO
+C854 ; LV # Lo HANGUL SYLLABLE JYE
+C870 ; LV # Lo HANGUL SYLLABLE JO
+C88C ; LV # Lo HANGUL SYLLABLE JWA
+C8A8 ; LV # Lo HANGUL SYLLABLE JWAE
+C8C4 ; LV # Lo HANGUL SYLLABLE JOE
+C8E0 ; LV # Lo HANGUL SYLLABLE JYO
+C8FC ; LV # Lo HANGUL SYLLABLE JU
+C918 ; LV # Lo HANGUL SYLLABLE JWEO
+C934 ; LV # Lo HANGUL SYLLABLE JWE
+C950 ; LV # Lo HANGUL SYLLABLE JWI
+C96C ; LV # Lo HANGUL SYLLABLE JYU
+C988 ; LV # Lo HANGUL SYLLABLE JEU
+C9A4 ; LV # Lo HANGUL SYLLABLE JYI
+C9C0 ; LV # Lo HANGUL SYLLABLE JI
+C9DC ; LV # Lo HANGUL SYLLABLE JJA
+C9F8 ; LV # Lo HANGUL SYLLABLE JJAE
+CA14 ; LV # Lo HANGUL SYLLABLE JJYA
+CA30 ; LV # Lo HANGUL SYLLABLE JJYAE
+CA4C ; LV # Lo HANGUL SYLLABLE JJEO
+CA68 ; LV # Lo HANGUL SYLLABLE JJE
+CA84 ; LV # Lo HANGUL SYLLABLE JJYEO
+CAA0 ; LV # Lo HANGUL SYLLABLE JJYE
+CABC ; LV # Lo HANGUL SYLLABLE JJO
+CAD8 ; LV # Lo HANGUL SYLLABLE JJWA
+CAF4 ; LV # Lo HANGUL SYLLABLE JJWAE
+CB10 ; LV # Lo HANGUL SYLLABLE JJOE
+CB2C ; LV # Lo HANGUL SYLLABLE JJYO
+CB48 ; LV # Lo HANGUL SYLLABLE JJU
+CB64 ; LV # Lo HANGUL SYLLABLE JJWEO
+CB80 ; LV # Lo HANGUL SYLLABLE JJWE
+CB9C ; LV # Lo HANGUL SYLLABLE JJWI
+CBB8 ; LV # Lo HANGUL SYLLABLE JJYU
+CBD4 ; LV # Lo HANGUL SYLLABLE JJEU
+CBF0 ; LV # Lo HANGUL SYLLABLE JJYI
+CC0C ; LV # Lo HANGUL SYLLABLE JJI
+CC28 ; LV # Lo HANGUL SYLLABLE CA
+CC44 ; LV # Lo HANGUL SYLLABLE CAE
+CC60 ; LV # Lo HANGUL SYLLABLE CYA
+CC7C ; LV # Lo HANGUL SYLLABLE CYAE
+CC98 ; LV # Lo HANGUL SYLLABLE CEO
+CCB4 ; LV # Lo HANGUL SYLLABLE CE
+CCD0 ; LV # Lo HANGUL SYLLABLE CYEO
+CCEC ; LV # Lo HANGUL SYLLABLE CYE
+CD08 ; LV # Lo HANGUL SYLLABLE CO
+CD24 ; LV # Lo HANGUL SYLLABLE CWA
+CD40 ; LV # Lo HANGUL SYLLABLE CWAE
+CD5C ; LV # Lo HANGUL SYLLABLE COE
+CD78 ; LV # Lo HANGUL SYLLABLE CYO
+CD94 ; LV # Lo HANGUL SYLLABLE CU
+CDB0 ; LV # Lo HANGUL SYLLABLE CWEO
+CDCC ; LV # Lo HANGUL SYLLABLE CWE
+CDE8 ; LV # Lo HANGUL SYLLABLE CWI
+CE04 ; LV # Lo HANGUL SYLLABLE CYU
+CE20 ; LV # Lo HANGUL SYLLABLE CEU
+CE3C ; LV # Lo HANGUL SYLLABLE CYI
+CE58 ; LV # Lo HANGUL SYLLABLE CI
+CE74 ; LV # Lo HANGUL SYLLABLE KA
+CE90 ; LV # Lo HANGUL SYLLABLE KAE
+CEAC ; LV # Lo HANGUL SYLLABLE KYA
+CEC8 ; LV # Lo HANGUL SYLLABLE KYAE
+CEE4 ; LV # Lo HANGUL SYLLABLE KEO
+CF00 ; LV # Lo HANGUL SYLLABLE KE
+CF1C ; LV # Lo HANGUL SYLLABLE KYEO
+CF38 ; LV # Lo HANGUL SYLLABLE KYE
+CF54 ; LV # Lo HANGUL SYLLABLE KO
+CF70 ; LV # Lo HANGUL SYLLABLE KWA
+CF8C ; LV # Lo HANGUL SYLLABLE KWAE
+CFA8 ; LV # Lo HANGUL SYLLABLE KOE
+CFC4 ; LV # Lo HANGUL SYLLABLE KYO
+CFE0 ; LV # Lo HANGUL SYLLABLE KU
+CFFC ; LV # Lo HANGUL SYLLABLE KWEO
+D018 ; LV # Lo HANGUL SYLLABLE KWE
+D034 ; LV # Lo HANGUL SYLLABLE KWI
+D050 ; LV # Lo HANGUL SYLLABLE KYU
+D06C ; LV # Lo HANGUL SYLLABLE KEU
+D088 ; LV # Lo HANGUL SYLLABLE KYI
+D0A4 ; LV # Lo HANGUL SYLLABLE KI
+D0C0 ; LV # Lo HANGUL SYLLABLE TA
+D0DC ; LV # Lo HANGUL SYLLABLE TAE
+D0F8 ; LV # Lo HANGUL SYLLABLE TYA
+D114 ; LV # Lo HANGUL SYLLABLE TYAE
+D130 ; LV # Lo HANGUL SYLLABLE TEO
+D14C ; LV # Lo HANGUL SYLLABLE TE
+D168 ; LV # Lo HANGUL SYLLABLE TYEO
+D184 ; LV # Lo HANGUL SYLLABLE TYE
+D1A0 ; LV # Lo HANGUL SYLLABLE TO
+D1BC ; LV # Lo HANGUL SYLLABLE TWA
+D1D8 ; LV # Lo HANGUL SYLLABLE TWAE
+D1F4 ; LV # Lo HANGUL SYLLABLE TOE
+D210 ; LV # Lo HANGUL SYLLABLE TYO
+D22C ; LV # Lo HANGUL SYLLABLE TU
+D248 ; LV # Lo HANGUL SYLLABLE TWEO
+D264 ; LV # Lo HANGUL SYLLABLE TWE
+D280 ; LV # Lo HANGUL SYLLABLE TWI
+D29C ; LV # Lo HANGUL SYLLABLE TYU
+D2B8 ; LV # Lo HANGUL SYLLABLE TEU
+D2D4 ; LV # Lo HANGUL SYLLABLE TYI
+D2F0 ; LV # Lo HANGUL SYLLABLE TI
+D30C ; LV # Lo HANGUL SYLLABLE PA
+D328 ; LV # Lo HANGUL SYLLABLE PAE
+D344 ; LV # Lo HANGUL SYLLABLE PYA
+D360 ; LV # Lo HANGUL SYLLABLE PYAE
+D37C ; LV # Lo HANGUL SYLLABLE PEO
+D398 ; LV # Lo HANGUL SYLLABLE PE
+D3B4 ; LV # Lo HANGUL SYLLABLE PYEO
+D3D0 ; LV # Lo HANGUL SYLLABLE PYE
+D3EC ; LV # Lo HANGUL SYLLABLE PO
+D408 ; LV # Lo HANGUL SYLLABLE PWA
+D424 ; LV # Lo HANGUL SYLLABLE PWAE
+D440 ; LV # Lo HANGUL SYLLABLE POE
+D45C ; LV # Lo HANGUL SYLLABLE PYO
+D478 ; LV # Lo HANGUL SYLLABLE PU
+D494 ; LV # Lo HANGUL SYLLABLE PWEO
+D4B0 ; LV # Lo HANGUL SYLLABLE PWE
+D4CC ; LV # Lo HANGUL SYLLABLE PWI
+D4E8 ; LV # Lo HANGUL SYLLABLE PYU
+D504 ; LV # Lo HANGUL SYLLABLE PEU
+D520 ; LV # Lo HANGUL SYLLABLE PYI
+D53C ; LV # Lo HANGUL SYLLABLE PI
+D558 ; LV # Lo HANGUL SYLLABLE HA
+D574 ; LV # Lo HANGUL SYLLABLE HAE
+D590 ; LV # Lo HANGUL SYLLABLE HYA
+D5AC ; LV # Lo HANGUL SYLLABLE HYAE
+D5C8 ; LV # Lo HANGUL SYLLABLE HEO
+D5E4 ; LV # Lo HANGUL SYLLABLE HE
+D600 ; LV # Lo HANGUL SYLLABLE HYEO
+D61C ; LV # Lo HANGUL SYLLABLE HYE
+D638 ; LV # Lo HANGUL SYLLABLE HO
+D654 ; LV # Lo HANGUL SYLLABLE HWA
+D670 ; LV # Lo HANGUL SYLLABLE HWAE
+D68C ; LV # Lo HANGUL SYLLABLE HOE
+D6A8 ; LV # Lo HANGUL SYLLABLE HYO
+D6C4 ; LV # Lo HANGUL SYLLABLE HU
+D6E0 ; LV # Lo HANGUL SYLLABLE HWEO
+D6FC ; LV # Lo HANGUL SYLLABLE HWE
+D718 ; LV # Lo HANGUL SYLLABLE HWI
+D734 ; LV # Lo HANGUL SYLLABLE HYU
+D750 ; LV # Lo HANGUL SYLLABLE HEU
+D76C ; LV # Lo HANGUL SYLLABLE HYI
+D788 ; LV # Lo HANGUL SYLLABLE HI
+
+# Total code points: 399
+
+# ================================================
+
+AC01..AC1B ; LVT # Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH
+AC1D..AC37 ; LVT # Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH
+AC39..AC53 ; LVT # Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH
+AC55..AC6F ; LVT # Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH
+AC71..AC8B ; LVT # Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH
+AC8D..ACA7 ; LVT # Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH
+ACA9..ACC3 ; LVT # Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH
+ACC5..ACDF ; LVT # Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH
+ACE1..ACFB ; LVT # Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH
+ACFD..AD17 ; LVT # Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH
+AD19..AD33 ; LVT # Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH
+AD35..AD4F ; LVT # Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH
+AD51..AD6B ; LVT # Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH
+AD6D..AD87 ; LVT # Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH
+AD89..ADA3 ; LVT # Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH
+ADA5..ADBF ; LVT # Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH
+ADC1..ADDB ; LVT # Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH
+ADDD..ADF7 ; LVT # Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH
+ADF9..AE13 ; LVT # Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH
+AE15..AE2F ; LVT # Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH
+AE31..AE4B ; LVT # Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH
+AE4D..AE67 ; LVT # Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH
+AE69..AE83 ; LVT # Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH
+AE85..AE9F ; LVT # Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH
+AEA1..AEBB ; LVT # Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH
+AEBD..AED7 ; LVT # Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH
+AED9..AEF3 ; LVT # Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH
+AEF5..AF0F ; LVT # Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH
+AF11..AF2B ; LVT # Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH
+AF2D..AF47 ; LVT # Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH
+AF49..AF63 ; LVT # Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH
+AF65..AF7F ; LVT # Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH
+AF81..AF9B ; LVT # Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH
+AF9D..AFB7 ; LVT # Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH
+AFB9..AFD3 ; LVT # Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH
+AFD5..AFEF ; LVT # Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH
+AFF1..B00B ; LVT # Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH
+B00D..B027 ; LVT # Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH
+B029..B043 ; LVT # Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH
+B045..B05F ; LVT # Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH
+B061..B07B ; LVT # Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH
+B07D..B097 ; LVT # Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH
+B099..B0B3 ; LVT # Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH
+B0B5..B0CF ; LVT # Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH
+B0D1..B0EB ; LVT # Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH
+B0ED..B107 ; LVT # Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH
+B109..B123 ; LVT # Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH
+B125..B13F ; LVT # Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH
+B141..B15B ; LVT # Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH
+B15D..B177 ; LVT # Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH
+B179..B193 ; LVT # Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH
+B195..B1AF ; LVT # Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH
+B1B1..B1CB ; LVT # Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH
+B1CD..B1E7 ; LVT # Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH
+B1E9..B203 ; LVT # Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH
+B205..B21F ; LVT # Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH
+B221..B23B ; LVT # Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH
+B23D..B257 ; LVT # Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH
+B259..B273 ; LVT # Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH
+B275..B28F ; LVT # Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH
+B291..B2AB ; LVT # Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH
+B2AD..B2C7 ; LVT # Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH
+B2C9..B2E3 ; LVT # Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH
+B2E5..B2FF ; LVT # Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH
+B301..B31B ; LVT # Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH
+B31D..B337 ; LVT # Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH
+B339..B353 ; LVT # Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH
+B355..B36F ; LVT # Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH
+B371..B38B ; LVT # Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH
+B38D..B3A7 ; LVT # Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH
+B3A9..B3C3 ; LVT # Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH
+B3C5..B3DF ; LVT # Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH
+B3E1..B3FB ; LVT # Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH
+B3FD..B417 ; LVT # Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH
+B419..B433 ; LVT # Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH
+B435..B44F ; LVT # Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH
+B451..B46B ; LVT # Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH
+B46D..B487 ; LVT # Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH
+B489..B4A3 ; LVT # Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH
+B4A5..B4BF ; LVT # Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH
+B4C1..B4DB ; LVT # Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH
+B4DD..B4F7 ; LVT # Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH
+B4F9..B513 ; LVT # Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH
+B515..B52F ; LVT # Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH
+B531..B54B ; LVT # Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH
+B54D..B567 ; LVT # Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH
+B569..B583 ; LVT # Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH
+B585..B59F ; LVT # Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH
+B5A1..B5BB ; LVT # Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH
+B5BD..B5D7 ; LVT # Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH
+B5D9..B5F3 ; LVT # Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH
+B5F5..B60F ; LVT # Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH
+B611..B62B ; LVT # Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH
+B62D..B647 ; LVT # Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH
+B649..B663 ; LVT # Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH
+B665..B67F ; LVT # Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH
+B681..B69B ; LVT # Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH
+B69D..B6B7 ; LVT # Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH
+B6B9..B6D3 ; LVT # Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH
+B6D5..B6EF ; LVT # Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH
+B6F1..B70B ; LVT # Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH
+B70D..B727 ; LVT # Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH
+B729..B743 ; LVT # Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH
+B745..B75F ; LVT # Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH
+B761..B77B ; LVT # Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH
+B77D..B797 ; LVT # Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH
+B799..B7B3 ; LVT # Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH
+B7B5..B7CF ; LVT # Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH
+B7D1..B7EB ; LVT # Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH
+B7ED..B807 ; LVT # Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH
+B809..B823 ; LVT # Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH
+B825..B83F ; LVT # Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH
+B841..B85B ; LVT # Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH
+B85D..B877 ; LVT # Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH
+B879..B893 ; LVT # Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH
+B895..B8AF ; LVT # Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH
+B8B1..B8CB ; LVT # Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH
+B8CD..B8E7 ; LVT # Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH
+B8E9..B903 ; LVT # Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH
+B905..B91F ; LVT # Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH
+B921..B93B ; LVT # Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH
+B93D..B957 ; LVT # Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH
+B959..B973 ; LVT # Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH
+B975..B98F ; LVT # Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH
+B991..B9AB ; LVT # Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH
+B9AD..B9C7 ; LVT # Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH
+B9C9..B9E3 ; LVT # Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH
+B9E5..B9FF ; LVT # Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH
+BA01..BA1B ; LVT # Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH
+BA1D..BA37 ; LVT # Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH
+BA39..BA53 ; LVT # Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH
+BA55..BA6F ; LVT # Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH
+BA71..BA8B ; LVT # Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH
+BA8D..BAA7 ; LVT # Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH
+BAA9..BAC3 ; LVT # Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH
+BAC5..BADF ; LVT # Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH
+BAE1..BAFB ; LVT # Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH
+BAFD..BB17 ; LVT # Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH
+BB19..BB33 ; LVT # Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH
+BB35..BB4F ; LVT # Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH
+BB51..BB6B ; LVT # Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH
+BB6D..BB87 ; LVT # Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH
+BB89..BBA3 ; LVT # Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH
+BBA5..BBBF ; LVT # Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH
+BBC1..BBDB ; LVT # Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH
+BBDD..BBF7 ; LVT # Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH
+BBF9..BC13 ; LVT # Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH
+BC15..BC2F ; LVT # Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH
+BC31..BC4B ; LVT # Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH
+BC4D..BC67 ; LVT # Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH
+BC69..BC83 ; LVT # Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH
+BC85..BC9F ; LVT # Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH
+BCA1..BCBB ; LVT # Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH
+BCBD..BCD7 ; LVT # Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH
+BCD9..BCF3 ; LVT # Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH
+BCF5..BD0F ; LVT # Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH
+BD11..BD2B ; LVT # Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH
+BD2D..BD47 ; LVT # Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH
+BD49..BD63 ; LVT # Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH
+BD65..BD7F ; LVT # Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH
+BD81..BD9B ; LVT # Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH
+BD9D..BDB7 ; LVT # Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH
+BDB9..BDD3 ; LVT # Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH
+BDD5..BDEF ; LVT # Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH
+BDF1..BE0B ; LVT # Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH
+BE0D..BE27 ; LVT # Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH
+BE29..BE43 ; LVT # Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH
+BE45..BE5F ; LVT # Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH
+BE61..BE7B ; LVT # Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH
+BE7D..BE97 ; LVT # Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH
+BE99..BEB3 ; LVT # Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH
+BEB5..BECF ; LVT # Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH
+BED1..BEEB ; LVT # Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH
+BEED..BF07 ; LVT # Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH
+BF09..BF23 ; LVT # Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH
+BF25..BF3F ; LVT # Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH
+BF41..BF5B ; LVT # Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH
+BF5D..BF77 ; LVT # Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH
+BF79..BF93 ; LVT # Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH
+BF95..BFAF ; LVT # Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH
+BFB1..BFCB ; LVT # Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH
+BFCD..BFE7 ; LVT # Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH
+BFE9..C003 ; LVT # Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH
+C005..C01F ; LVT # Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH
+C021..C03B ; LVT # Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH
+C03D..C057 ; LVT # Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH
+C059..C073 ; LVT # Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH
+C075..C08F ; LVT # Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH
+C091..C0AB ; LVT # Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH
+C0AD..C0C7 ; LVT # Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH
+C0C9..C0E3 ; LVT # Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH
+C0E5..C0FF ; LVT # Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH
+C101..C11B ; LVT # Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH
+C11D..C137 ; LVT # Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH
+C139..C153 ; LVT # Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH
+C155..C16F ; LVT # Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH
+C171..C18B ; LVT # Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH
+C18D..C1A7 ; LVT # Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH
+C1A9..C1C3 ; LVT # Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH
+C1C5..C1DF ; LVT # Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH
+C1E1..C1FB ; LVT # Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH
+C1FD..C217 ; LVT # Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH
+C219..C233 ; LVT # Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH
+C235..C24F ; LVT # Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH
+C251..C26B ; LVT # Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH
+C26D..C287 ; LVT # Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH
+C289..C2A3 ; LVT # Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH
+C2A5..C2BF ; LVT # Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH
+C2C1..C2DB ; LVT # Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH
+C2DD..C2F7 ; LVT # Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH
+C2F9..C313 ; LVT # Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH
+C315..C32F ; LVT # Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH
+C331..C34B ; LVT # Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH
+C34D..C367 ; LVT # Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH
+C369..C383 ; LVT # Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH
+C385..C39F ; LVT # Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH
+C3A1..C3BB ; LVT # Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH
+C3BD..C3D7 ; LVT # Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH
+C3D9..C3F3 ; LVT # Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH
+C3F5..C40F ; LVT # Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH
+C411..C42B ; LVT # Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH
+C42D..C447 ; LVT # Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH
+C449..C463 ; LVT # Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH
+C465..C47F ; LVT # Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH
+C481..C49B ; LVT # Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH
+C49D..C4B7 ; LVT # Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH
+C4B9..C4D3 ; LVT # Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH
+C4D5..C4EF ; LVT # Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH
+C4F1..C50B ; LVT # Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH
+C50D..C527 ; LVT # Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH
+C529..C543 ; LVT # Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH
+C545..C55F ; LVT # Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH
+C561..C57B ; LVT # Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH
+C57D..C597 ; LVT # Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH
+C599..C5B3 ; LVT # Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH
+C5B5..C5CF ; LVT # Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH
+C5D1..C5EB ; LVT # Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH
+C5ED..C607 ; LVT # Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH
+C609..C623 ; LVT # Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH
+C625..C63F ; LVT # Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH
+C641..C65B ; LVT # Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH
+C65D..C677 ; LVT # Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH
+C679..C693 ; LVT # Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH
+C695..C6AF ; LVT # Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH
+C6B1..C6CB ; LVT # Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH
+C6CD..C6E7 ; LVT # Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH
+C6E9..C703 ; LVT # Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH
+C705..C71F ; LVT # Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH
+C721..C73B ; LVT # Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH
+C73D..C757 ; LVT # Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH
+C759..C773 ; LVT # Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH
+C775..C78F ; LVT # Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH
+C791..C7AB ; LVT # Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH
+C7AD..C7C7 ; LVT # Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH
+C7C9..C7E3 ; LVT # Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH
+C7E5..C7FF ; LVT # Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH
+C801..C81B ; LVT # Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH
+C81D..C837 ; LVT # Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH
+C839..C853 ; LVT # Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH
+C855..C86F ; LVT # Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH
+C871..C88B ; LVT # Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH
+C88D..C8A7 ; LVT # Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH
+C8A9..C8C3 ; LVT # Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH
+C8C5..C8DF ; LVT # Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH
+C8E1..C8FB ; LVT # Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH
+C8FD..C917 ; LVT # Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH
+C919..C933 ; LVT # Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH
+C935..C94F ; LVT # Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH
+C951..C96B ; LVT # Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH
+C96D..C987 ; LVT # Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH
+C989..C9A3 ; LVT # Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH
+C9A5..C9BF ; LVT # Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH
+C9C1..C9DB ; LVT # Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH
+C9DD..C9F7 ; LVT # Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH
+C9F9..CA13 ; LVT # Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH
+CA15..CA2F ; LVT # Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH
+CA31..CA4B ; LVT # Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH
+CA4D..CA67 ; LVT # Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH
+CA69..CA83 ; LVT # Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH
+CA85..CA9F ; LVT # Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH
+CAA1..CABB ; LVT # Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH
+CABD..CAD7 ; LVT # Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH
+CAD9..CAF3 ; LVT # Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH
+CAF5..CB0F ; LVT # Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH
+CB11..CB2B ; LVT # Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH
+CB2D..CB47 ; LVT # Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH
+CB49..CB63 ; LVT # Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH
+CB65..CB7F ; LVT # Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH
+CB81..CB9B ; LVT # Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH
+CB9D..CBB7 ; LVT # Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH
+CBB9..CBD3 ; LVT # Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH
+CBD5..CBEF ; LVT # Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH
+CBF1..CC0B ; LVT # Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH
+CC0D..CC27 ; LVT # Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH
+CC29..CC43 ; LVT # Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH
+CC45..CC5F ; LVT # Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH
+CC61..CC7B ; LVT # Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH
+CC7D..CC97 ; LVT # Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH
+CC99..CCB3 ; LVT # Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH
+CCB5..CCCF ; LVT # Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH
+CCD1..CCEB ; LVT # Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH
+CCED..CD07 ; LVT # Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH
+CD09..CD23 ; LVT # Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH
+CD25..CD3F ; LVT # Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH
+CD41..CD5B ; LVT # Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH
+CD5D..CD77 ; LVT # Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH
+CD79..CD93 ; LVT # Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH
+CD95..CDAF ; LVT # Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH
+CDB1..CDCB ; LVT # Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH
+CDCD..CDE7 ; LVT # Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH
+CDE9..CE03 ; LVT # Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH
+CE05..CE1F ; LVT # Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH
+CE21..CE3B ; LVT # Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH
+CE3D..CE57 ; LVT # Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH
+CE59..CE73 ; LVT # Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH
+CE75..CE8F ; LVT # Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH
+CE91..CEAB ; LVT # Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH
+CEAD..CEC7 ; LVT # Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH
+CEC9..CEE3 ; LVT # Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH
+CEE5..CEFF ; LVT # Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH
+CF01..CF1B ; LVT # Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH
+CF1D..CF37 ; LVT # Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH
+CF39..CF53 ; LVT # Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH
+CF55..CF6F ; LVT # Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH
+CF71..CF8B ; LVT # Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH
+CF8D..CFA7 ; LVT # Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH
+CFA9..CFC3 ; LVT # Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH
+CFC5..CFDF ; LVT # Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH
+CFE1..CFFB ; LVT # Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH
+CFFD..D017 ; LVT # Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH
+D019..D033 ; LVT # Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH
+D035..D04F ; LVT # Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH
+D051..D06B ; LVT # Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH
+D06D..D087 ; LVT # Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH
+D089..D0A3 ; LVT # Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH
+D0A5..D0BF ; LVT # Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH
+D0C1..D0DB ; LVT # Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH
+D0DD..D0F7 ; LVT # Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH
+D0F9..D113 ; LVT # Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH
+D115..D12F ; LVT # Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH
+D131..D14B ; LVT # Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH
+D14D..D167 ; LVT # Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH
+D169..D183 ; LVT # Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH
+D185..D19F ; LVT # Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH
+D1A1..D1BB ; LVT # Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH
+D1BD..D1D7 ; LVT # Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH
+D1D9..D1F3 ; LVT # Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH
+D1F5..D20F ; LVT # Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH
+D211..D22B ; LVT # Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH
+D22D..D247 ; LVT # Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH
+D249..D263 ; LVT # Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH
+D265..D27F ; LVT # Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH
+D281..D29B ; LVT # Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH
+D29D..D2B7 ; LVT # Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH
+D2B9..D2D3 ; LVT # Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH
+D2D5..D2EF ; LVT # Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH
+D2F1..D30B ; LVT # Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH
+D30D..D327 ; LVT # Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH
+D329..D343 ; LVT # Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH
+D345..D35F ; LVT # Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH
+D361..D37B ; LVT # Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH
+D37D..D397 ; LVT # Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH
+D399..D3B3 ; LVT # Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH
+D3B5..D3CF ; LVT # Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH
+D3D1..D3EB ; LVT # Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH
+D3ED..D407 ; LVT # Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH
+D409..D423 ; LVT # Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH
+D425..D43F ; LVT # Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH
+D441..D45B ; LVT # Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH
+D45D..D477 ; LVT # Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH
+D479..D493 ; LVT # Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH
+D495..D4AF ; LVT # Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH
+D4B1..D4CB ; LVT # Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH
+D4CD..D4E7 ; LVT # Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH
+D4E9..D503 ; LVT # Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH
+D505..D51F ; LVT # Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH
+D521..D53B ; LVT # Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH
+D53D..D557 ; LVT # Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH
+D559..D573 ; LVT # Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH
+D575..D58F ; LVT # Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH
+D591..D5AB ; LVT # Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH
+D5AD..D5C7 ; LVT # Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH
+D5C9..D5E3 ; LVT # Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH
+D5E5..D5FF ; LVT # Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH
+D601..D61B ; LVT # Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH
+D61D..D637 ; LVT # Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH
+D639..D653 ; LVT # Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH
+D655..D66F ; LVT # Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH
+D671..D68B ; LVT # Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH
+D68D..D6A7 ; LVT # Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH
+D6A9..D6C3 ; LVT # Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH
+D6C5..D6DF ; LVT # Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH
+D6E1..D6FB ; LVT # Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH
+D6FD..D717 ; LVT # Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH
+D719..D733 ; LVT # Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH
+D735..D74F ; LVT # Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH
+D751..D76B ; LVT # Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH
+D76D..D787 ; LVT # Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH
+D789..D7A3 ; LVT # Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH
+
+# Total code points: 10773
+
+# EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/regex/GraphemeBreakTest.txt Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,429 @@
+# GraphemeBreakTest-8.0.0.txt
+# Date: 2015-02-13, 13:47:15 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2015 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see http://www.unicode.org/reports/tr44/
+#
+# Default Grapheme Break Test
+#
+# Format:
+# <string> (# <comment>)?
+# <string> contains hex Unicode code points, with
+# ÷ wherever there is a break opportunity, and
+# × wherever there is not.
+# <comment> the format can change, but currently it shows:
+# - the sample character name
+# - (x) the Grapheme_Cluster_Break property value for the sample character
+# - [x] the rule that determines whether there is a break or not
+#
+# These samples may be extended or changed in the future.
+#
+÷ 0020 ÷ 0020 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0020 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0020 ÷ 000D ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0020 × 0308 ÷ 000D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0020 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0020 × 0308 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0020 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0020 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0020 × 0308 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0020 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0020 × 0308 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0020 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0020 × 0308 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0020 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0020 × 0308 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0020 ÷ 11A8 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0020 × 0308 ÷ 11A8 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0020 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0020 × 0308 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0020 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0020 × 0308 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0020 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0020 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0020 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0020 ÷ D800 ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 0020 × 0308 ÷ D800 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 000D ÷ 0020 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] SPACE (Other) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 000D ÷ 000D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 000D × 000A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 000D ÷ 0001 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 000D ÷ 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 000D ÷ 0903 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 000D ÷ 0308 × 0903 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 000D ÷ 1100 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 000D ÷ 1160 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 000D ÷ 11A8 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 000D ÷ AC00 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 000D ÷ AC01 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 000D ÷ 0378 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 000D ÷ D800 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ D800 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 000A ÷ 0020 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] SPACE (Other) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 000A ÷ 000D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 000A ÷ 000A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 000A ÷ 0001 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 000A ÷ 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 000A ÷ 0903 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 000A ÷ 0308 × 0903 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 000A ÷ 1100 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 000A ÷ 1160 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 000A ÷ 11A8 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 000A ÷ AC00 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 000A ÷ AC01 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 000A ÷ 0378 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 000A ÷ D800 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ D800 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 0001 ÷ 0020 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] SPACE (Other) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0001 ÷ 000D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0001 ÷ 000A ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0001 ÷ 0001 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0001 ÷ 0300 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0001 ÷ 0308 × 0300 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0001 ÷ 0903 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0001 ÷ 0308 × 0903 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0001 ÷ 1100 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0001 ÷ 1160 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0001 ÷ 11A8 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0001 ÷ AC00 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0001 ÷ AC01 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0001 ÷ 0378 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0001 ÷ D800 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ D800 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 0300 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0300 × 0308 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0300 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0300 × 0308 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0300 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0300 × 0308 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0300 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0300 × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0300 × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0300 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0300 × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0300 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0300 × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0300 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0300 × 0308 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0300 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0300 × 0308 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0300 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0300 × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0300 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0300 × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0300 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0300 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0300 × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0300 ÷ D800 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 0300 × 0308 ÷ D800 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 0903 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0903 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0903 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0903 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0903 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0903 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0903 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0903 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0903 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0903 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0903 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0903 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0903 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0903 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0903 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0903 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0903 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0903 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0903 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0903 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0903 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0903 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0903 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0903 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0903 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0903 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0903 ÷ D800 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 0903 × 0308 ÷ D800 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 1100 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 1100 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 1100 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1100 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1100 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1100 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1100 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 1100 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 1100 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1100 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1100 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1100 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 1100 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 1100 × 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 1100 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 1100 ÷ 11A8 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 1100 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 1100 × AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 1100 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 1100 × AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1100 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1100 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 1100 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 1100 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 1100 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 1100 ÷ D800 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 1100 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 1160 ÷ 0020 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 1160 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 1160 ÷ 000D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1160 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1160 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1160 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1160 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 1160 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 1160 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1160 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1160 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1160 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1160 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 1160 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 1160 × 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 1160 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 1160 × 11A8 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 1160 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 1160 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 1160 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 1160 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1160 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1160 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 1160 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 1160 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 1160 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 1160 ÷ D800 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 1160 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 11A8 ÷ 0020 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 11A8 ÷ 000D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 11A8 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 11A8 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 11A8 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 11A8 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 11A8 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 11A8 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 11A8 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 11A8 × 11A8 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 11A8 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 11A8 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 11A8 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 11A8 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 11A8 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 11A8 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 11A8 ÷ D800 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 11A8 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ AC00 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ AC00 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ AC00 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ AC00 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ AC00 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ AC00 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ AC00 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ AC00 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ AC00 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ AC00 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ AC00 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ AC00 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ AC00 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ AC00 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ AC00 × 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ AC00 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ AC00 × 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ AC00 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ AC00 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ AC00 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ AC00 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ AC00 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ AC00 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ AC00 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ AC00 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ AC00 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ AC00 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ AC00 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ AC01 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ AC01 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ AC01 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ AC01 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ AC01 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ AC01 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ AC01 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ AC01 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ AC01 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ AC01 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ AC01 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ AC01 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ AC01 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ AC01 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ AC01 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ AC01 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ AC01 × 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ AC01 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ AC01 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ AC01 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ AC01 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ AC01 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ AC01 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ AC01 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ AC01 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ AC01 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ AC01 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ AC01 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 1F1E6 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 1F1E6 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F1E6 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F1E6 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1F1E6 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1F1E6 × 0308 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1F1E6 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 1F1E6 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 1F1E6 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 1F1E6 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 1F1E6 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1F1E6 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 1F1E6 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 1F1E6 ÷ D800 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ D800 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 0378 ÷ 0020 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0378 × 0308 ÷ 0020 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0378 ÷ 000D ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0378 × 0308 ÷ 000D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0378 ÷ 000A ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0378 × 0308 ÷ 000A ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0378 ÷ 0001 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0378 × 0308 ÷ 0001 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0378 × 0300 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0378 × 0308 × 0300 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0378 × 0903 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0378 × 0308 × 0903 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0378 ÷ 1100 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0378 × 0308 ÷ 1100 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0378 ÷ 1160 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0378 × 0308 ÷ 1160 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0378 ÷ 11A8 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0378 × 0308 ÷ 11A8 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0378 ÷ AC00 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0378 × 0308 ÷ AC00 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0378 ÷ AC01 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0378 × 0308 ÷ AC01 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0378 ÷ 1F1E6 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0378 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0378 ÷ 0378 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0378 × 0308 ÷ 0378 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0378 ÷ D800 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 0378 × 0308 ÷ D800 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ D800 ÷ 0020 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] SPACE (Other) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ D800 ÷ 000D ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ D800 ÷ 000A ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ D800 ÷ 0001 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ D800 ÷ 0300 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ D800 ÷ 0308 × 0300 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ D800 ÷ 0903 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ D800 ÷ 0308 × 0903 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ D800 ÷ 1100 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ D800 ÷ 1160 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ D800 ÷ 11A8 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ D800 ÷ AC00 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ D800 ÷ AC01 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ D800 ÷ 1F1E6 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ D800 ÷ 0378 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ D800 ÷ D800 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ D800 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 0061 ÷ 1F1E6 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
+÷ 1F1F7 × 1F1FA ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER R (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER U (Regional_Indicator) ÷ [0.3]
+÷ 1F1F7 × 1F1FA × 1F1F8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER R (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER U (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER S (Regional_Indicator) ÷ [0.3]
+÷ 1F1F7 × 1F1FA × 1F1F8 × 1F1EA ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER R (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER U (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER S (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER E (Regional_Indicator) ÷ [0.3]
+÷ 1F1F7 × 1F1FA ÷ 200B ÷ 1F1F8 × 1F1EA ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER R (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER U (Regional_Indicator) ÷ [5.0] ZERO WIDTH SPACE (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER S (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER E (Regional_Indicator) ÷ [0.3]
+÷ 1F1E6 × 1F1E7 × 1F1E8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER B (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER C (Regional_Indicator) ÷ [0.3]
+÷ 1F1E6 × 200D ÷ 1F1E7 × 1F1E8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] ZERO WIDTH JOINER (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER B (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER C (Regional_Indicator) ÷ [0.3]
+÷ 1F1E6 × 1F1E7 × 200D ÷ 1F1E8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER B (Regional_Indicator) × [9.0] ZERO WIDTH JOINER (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (Regional_Indicator) ÷ [0.3]
+÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (Extend) ÷ [999.0] ARABIC LETTER NOON (Other) ÷ [0.3]
+÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (Other) × [9.0] ZERO WIDTH JOINER (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+
+#
+# Lines: 402
+#
+# EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/regex/GraphemeTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,286 @@
+/*
+ * 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 7071819
+ * @summary tests Unicode Extended Grapheme support
+ * @run main GraphemeTest
+ */
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Scanner;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+public class GraphemeTest {
+
+ public static void main(String[] args) throws Throwable {
+ testProps(Paths.get(System.getProperty("test.src", "."),
+ "GraphemeBreakProperty.txt"));
+ testBreak(Paths.get(System.getProperty("test.src", "."),
+ "GraphemeBreakTest.txt"));
+ }
+
+ private static void testProps(Path path) throws IOException {
+ Files.lines(path)
+ .filter( ln -> ln.length() != 0 && !ln.startsWith("#") )
+ .forEach(ln -> {
+ String[] strs = ln.split("\\s+");
+ int off = strs[0].indexOf("..");
+ int cp0, cp1;
+ String expected = strs[2];
+ if (off != -1) {
+ cp0 = Integer.parseInt(strs[0], 0, off, 16);
+ cp1 = Integer.parseInt(strs[0], off + 2, strs[0].length(), 16);
+ } else {
+ cp0 = cp1 = Integer.parseInt(strs[0], 16);
+ }
+ for (int cp = cp0; cp <= cp1; cp++) {
+ // NOTE:
+ // #tr29 "plus a few General_Category = Spacing_Mark needed for
+ // canonical equivalence."
+ // For "extended grapheme clusters" support, there is no
+ // need actually to diff "extend" and "spackmark" given GB9, GB9a.
+ if (!expected.equals(types[getType(cp)])) {
+ if ("Extend".equals(expected) &&
+ "SpacingMark".equals(types[getType(cp)]))
+ System.out.printf("[%x] [%s][%d] -> [%s]%n",
+ cp, expected, Character.getType(cp), types[getType(cp)]);
+ else
+ throw new RuntimeException(String.format(
+ "cp=[%x], expeced:[%s] result:[%s]%n",
+ cp, expected, types[getType(cp)]));
+ }
+ }
+ });
+ }
+
+ private static void testBreak(Path path) throws IOException {
+ Files.lines(path)
+ .filter( ln -> ln.length() != 0 && !ln.startsWith("#") )
+ .forEach(ln -> {
+ String str = ln.replaceAll("\\s+|\\([a-zA-Z]+\\)|\\[[a-zA-Z]]+\\]|#.*", "");
+ // System.out.println(str);
+ String[] cstrs = str.split("\u00f7|\u00d7");
+ int prevCp = -1;
+ char prevBk = '\u00f7';
+ int offBk = 0;
+ for (String cstr : cstrs) {
+ if (cstr.length() == 0) // first empty str
+ continue;
+ int cp = Integer.parseInt(cstr, 16);
+ if (prevCp == -1) {
+ prevCp = cp;
+ } else {
+ // test against the rules directly
+ if (rules[getType(prevCp)][getType(cp)] != (prevBk == '\u00f7')) {
+ throw new RuntimeException(String.format(
+ "NG %x[%d] %x[%d] -> %b [%s]%n",
+ prevCp, getType(prevCp), cp, getType(cp),
+ rules[getType(prevCp)][getType(cp)],
+ ln));
+ }
+ }
+ prevCp = cp;
+ offBk += (cstr.length() + 1);
+ prevBk = str.charAt(offBk);
+ }
+ });
+ }
+
+ private static final String[] types = {
+ "Other", "CR", "LF", "Control", "Extend", "Regional_Indicator",
+ "Prepend", "SpacingMark",
+ "L", "V", "T", "LV", "LVT" };
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // types
+ private static final int OTHER = 0;
+ private static final int CR = 1;
+ private static final int LF = 2;
+ private static final int CONTROL = 3;
+ private static final int EXTEND = 4;
+ private static final int RI = 5;
+ private static final int PREPEND = 6;
+ private static final int SPACINGMARK = 7;
+ private static final int L = 8;
+ private static final int V = 9;
+ private static final int T = 10;
+ private static final int LV = 11;
+ private static final int LVT = 12;
+
+ private static final int FIRST_TYPE = 0;
+ private static final int LAST_TYPE = 12;
+
+ private static boolean[][] rules;
+ static {
+ rules = new boolean[LAST_TYPE + 1][LAST_TYPE + 1];
+ // default, any + any
+ for (int i = FIRST_TYPE; i <= LAST_TYPE; i++)
+ for (int j = FIRST_TYPE; j <= LAST_TYPE; j++)
+ rules[i][j] = true;
+ // GB 6 L x (L | V | LV | VT)
+ rules[L][L] = false;
+ rules[L][V] = false;
+ rules[L][LV] = false;
+ rules[L][LVT] = false;
+ // GB 7 (LV | V) x (V | T)
+ rules[LV][V] = false;
+ rules[LV][T] = false;
+ rules[V][V] = false;
+ rules[V][T] = false;
+ // GB 8 (LVT | T) x T
+ rules[LVT][T] = false;
+ rules[T][T] = false;
+ // GB 8a RI x RI
+ rules[RI][RI] = false;
+ // GB 9 x Extend
+ // GB 9a x Spacing Mark
+ // GB 9b Prepend x
+ for (int i = FIRST_TYPE; i <= LAST_TYPE; i++) {
+ rules[i][EXTEND] = false;
+ rules[i][SPACINGMARK] = false;
+ rules[PREPEND][i] = false;
+ }
+ // GB 4 (Control | CR | LF) +
+ // GB 5 + (Control | CR | LF)
+ for (int i = FIRST_TYPE; i <= LAST_TYPE; i++)
+ for (int j = CR; j <= CONTROL; j++) {
+ rules[i][j] = true;
+ rules[j][i] = true;
+ }
+ // GB 3 CR x LF
+ rules[CR][LF] = false;
+ // GB 10 Any + Any -> default
+ }
+
+ // Hangul syllables
+ private static final int SYLLABLE_BASE = 0xAC00;
+ private static final int LCOUNT = 19;
+ private static final int VCOUNT = 21;
+ private static final int TCOUNT = 28;
+ private static final int NCOUNT = VCOUNT * TCOUNT; // 588
+ private static final int SCOUNT = LCOUNT * NCOUNT; // 11172
+
+ // #tr29: SpacingMark exceptions: The following (which have
+ // General_Category = Spacing_Mark and would otherwise be included)
+ // are specifically excluded
+ private static boolean isExcludedSpacingMark(int cp) {
+ return cp == 0x102B || cp == 0x102C || cp == 0x1038 ||
+ cp >= 0x1062 && cp <= 0x1064 ||
+ cp >= 0x1062 && cp <= 0x106D ||
+ cp == 0x1083 ||
+ cp >= 0x1087 && cp <= 0x108C ||
+ cp == 0x108F ||
+ cp >= 0x109A && cp <= 0x109C ||
+ cp == 0x1A61 || cp == 0x1A63 || cp == 0x1A64 ||
+ cp == 0xAA7B || cp == 0xAA7D;
+ }
+
+ private static int getType(int cp) {
+ int type = Character.getType(cp);
+ switch(type) {
+ case Character.CONTROL:
+ if (cp == 0x000D)
+ return CR;
+ if (cp == 0x000A)
+ return LF;
+ return CONTROL;
+ case Character.UNASSIGNED:
+ // NOTE: #tr29 lists "Unassigned and Default_Ignorable_Code_Point" as Control
+ // but GraphemeBreakTest.txt lists u+0378/reserved-0378 as "Other"
+ // so type it as "Other" to make the test happy
+ if (cp == 0x0378)
+ return OTHER;
+ case Character.LINE_SEPARATOR:
+ case Character.PARAGRAPH_SEPARATOR:
+ case Character.SURROGATE:
+ return CONTROL;
+ case Character.FORMAT:
+ if (cp == 0x200C || cp == 0x200D)
+ return EXTEND;
+ return CONTROL;
+ case Character.NON_SPACING_MARK:
+ case Character.ENCLOSING_MARK:
+ // NOTE:
+ // #tr29 "plus a few General_Category = Spacing_Mark needed for
+ // canonical equivalence."
+ // but for "extended grapheme clusters" support, there is no
+ // need actually to diff "extend" and "spackmark" given GB9, GB9a
+ return EXTEND;
+ case Character.COMBINING_SPACING_MARK:
+ if (isExcludedSpacingMark(cp))
+ return OTHER;
+ // NOTE:
+ // 0x11720 and 0x11721 are mentioned in #tr29 as
+ // OTHER_LETTER but it appears their category has been updated to
+ // COMBING_SPACING_MARK already (verified in ver.8)
+ return SPACINGMARK;
+ case Character.OTHER_SYMBOL:
+ if (cp >= 0x1F1E6 && cp <= 0x1F1FF)
+ return RI;
+ return OTHER;
+ case Character.MODIFIER_LETTER:
+ // WARNING:
+ // not mentioned in #tr29 but listed in GraphemeBreakProperty.txt
+ if (cp == 0xFF9E || cp == 0xFF9F)
+ return EXTEND;
+ return OTHER;
+ case Character.OTHER_LETTER:
+ if (cp == 0x0E33 || cp == 0x0EB3)
+ return SPACINGMARK;
+ // hangul jamo
+ if (cp >= 0x1100 && cp <= 0x11FF) {
+ if (cp <= 0x115F)
+ return L;
+ if (cp <= 0x11A7)
+ return V;
+ return T;
+ }
+ // hangul syllables
+ int sindex = cp - SYLLABLE_BASE;
+ if (sindex >= 0 && sindex < SCOUNT) {
+
+ if (sindex % TCOUNT == 0)
+ return LV;
+ return LVT;
+ }
+ // hangul jamo_extended A
+ if (cp >= 0xA960 && cp <= 0xA97C)
+ return L;
+ // hangul jamo_extended B
+ if (cp >= 0xD7B0 && cp <= 0xD7C6)
+ return V;
+ if (cp >= 0xD7CB && cp <= 0xD7FB)
+ return T;
+ }
+ return OTHER;
+ }
+}
--- a/jdk/test/java/util/regex/RegExTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/jdk/test/java/util/regex/RegExTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -32,7 +32,7 @@
* 6358731 6178785 6284152 6231989 6497148 6486934 6233084 6504326 6635133
* 6350801 6676425 6878475 6919132 6931676 6948903 6990617 7014645 7039066
* 7067045 7014640 7189363 8007395 8013252 8013254 8012646 8023647 6559590
- * 8027645 8035076 8039124 8035975 8074678 6854417 8143854
+ * 8027645 8035076 8039124 8035975 8074678 6854417 8143854 8147531 7071819
* @library /lib/testlibrary
* @build jdk.testlibrary.*
* @run main RegExTest
@@ -42,7 +42,9 @@
import java.util.function.Function;
import java.util.regex.*;
import java.util.Random;
+import java.util.Scanner;
import java.io.*;
+import java.nio.file.*;
import java.util.*;
import java.nio.CharBuffer;
import java.util.function.Predicate;
@@ -151,6 +153,7 @@
unicodePropertiesTest();
unicodeHexNotationTest();
unicodeClassesTest();
+ unicodeCharacterNameTest();
horizontalAndVerticalWSTest();
linebreakTest();
branchTest();
@@ -158,6 +161,7 @@
groupCurlyBackoffTest();
patternAsPredicate();
invalidFlags();
+ grapheme();
if (failure) {
throw new
@@ -4372,6 +4376,65 @@
report("unicodePredefinedClasses");
}
+ private static void unicodeCharacterNameTest() throws Exception {
+
+ for (int cp = 0; cp < Character.MAX_CODE_POINT; cp++) {
+ if (!Character.isValidCodePoint(cp) ||
+ Character.getType(cp) == Character.UNASSIGNED)
+ continue;
+ String str = new String(Character.toChars(cp));
+ // single
+ String p = "\\N{" + Character.getName(cp) + "}";
+ if (!Pattern.compile(p).matcher(str).matches()) {
+ failCount++;
+ }
+ // class[c]
+ p = "[\\N{" + Character.getName(cp) + "}]";
+ if (!Pattern.compile(p).matcher(str).matches()) {
+ failCount++;
+ }
+ }
+
+ // range
+ for (int i = 0; i < 10; i++) {
+ int start = generator.nextInt(20);
+ int end = start + generator.nextInt(200);
+ String p = "[\\N{" + Character.getName(start) + "}-\\N{" + Character.getName(end) + "}]";
+ String str;
+ for (int cp = start; cp < end; cp++) {
+ str = new String(Character.toChars(cp));
+ if (!Pattern.compile(p).matcher(str).matches()) {
+ failCount++;
+ }
+ }
+ str = new String(Character.toChars(end + 10));
+ if (Pattern.compile(p).matcher(str).matches()) {
+ failCount++;
+ }
+ }
+
+ // slice
+ for (int i = 0; i < 10; i++) {
+ int n = generator.nextInt(256);
+ int[] buf = new int[n];
+ StringBuffer sb = new StringBuffer(1024);
+ for (int j = 0; j < n; j++) {
+ int cp = generator.nextInt(1000);
+ if (!Character.isValidCodePoint(cp) ||
+ Character.getType(cp) == Character.UNASSIGNED)
+ cp = 0x4e00; // just use 4e00
+ sb.append("\\N{" + Character.getName(cp) + "}");
+ buf[j] = cp;
+ }
+ String p = sb.toString();
+ String str = new String(buf, 0, buf.length);
+ if (!Pattern.compile(p).matcher(str).matches()) {
+ failCount++;
+ }
+ }
+ report("unicodeCharacterName");
+ }
+
private static void horizontalAndVerticalWSTest() throws Exception {
String hws = new String (new char[] {
0x09, 0x20, 0xa0, 0x1680, 0x180e,
@@ -4545,4 +4608,58 @@
}
report("Invalid compile flags");
}
+
+ private static void grapheme() throws Exception {
+ Files.lines(Paths.get(System.getProperty("test.src", "."),
+ "GraphemeBreakTest.txt"))
+ .filter( ln -> ln.length() != 0 && !ln.startsWith("#") )
+ .forEach( ln -> {
+ ln = ln.replaceAll("\\s+|\\([a-zA-Z]+\\)|\\[[a-zA-Z]]+\\]|#.*", "");
+ // System.out.println(str);
+ String[] strs = ln.split("\u00f7|\u00d7");
+ StringBuilder src = new StringBuilder();
+ ArrayList<String> graphemes = new ArrayList<>();
+ StringBuilder buf = new StringBuilder();
+ int offBk = 0;
+ for (String str : strs) {
+ if (str.length() == 0) // first empty str
+ continue;
+ int cp = Integer.parseInt(str, 16);
+ src.appendCodePoint(cp);
+ buf.appendCodePoint(cp);
+ offBk += (str.length() + 1);
+ if (ln.charAt(offBk) == '\u00f7') { // DIV
+ graphemes.add(buf.toString());
+ buf = new StringBuilder();
+ }
+ }
+ Pattern p = Pattern.compile("\\X");
+ Matcher m = p.matcher(src.toString());
+ Scanner s = new Scanner(src.toString()).useDelimiter("\\b{g}");
+ for (String g : graphemes) {
+ // System.out.printf(" grapheme:=[%s]%n", g);
+ // (1) test \\X directly
+ if (!m.find() || !m.group().equals(g)) {
+ System.out.println("Failed \\X [" + ln + "] : " + g);
+ failCount++;
+ }
+ // (2) test \\b{g} + \\X via Scanner
+ boolean hasNext = s.hasNext(p);
+ // if (!s.hasNext() || !s.next().equals(next)) {
+ if (!s.hasNext(p) || !s.next(p).equals(g)) {
+ System.out.println("Failed b{g} [" + ln + "] : " + g);
+ failCount++;
+ }
+ }
+ });
+ // some sanity checks
+ if (!Pattern.compile("\\X{10}").matcher("abcdefghij").matches() ||
+ !Pattern.compile("\\b{g}(?:\\X\\b{g}){5}\\b{g}").matcher("abcde").matches() ||
+ !Pattern.compile("(?:\\X\\b{g}){2}").matcher("\ud800\udc00\ud801\udc02").matches())
+ failCount++;
+ // make sure "\b{n}" still works
+ if (!Pattern.compile("\\b{1}hello\\b{1} \\b{1}world\\b{1}").matcher("hello world").matches())
+ failCount++;
+ report("Unicode extended grapheme cluster");
+ }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/pkcs12/P12SecretKey.java Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,87 @@
+/*
+ * 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8149411
+ * @summary Get AES key from keystore (uses SecretKeySpec not SecretKeyFactory)
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.security.KeyStore;
+import java.security.cert.CertificateException;
+import java.util.Arrays;
+
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+
+public class P12SecretKey {
+
+ private static final String ALIAS = "alias";
+
+ public static void main(String[] args) throws Exception {
+ P12SecretKey testp12 = new P12SecretKey();
+ String keystoreType = "pkcs12";
+ if (args != null && args.length > 0) {
+ keystoreType = args[0];
+ }
+ testp12.run(keystoreType);
+ }
+
+ private void run(String keystoreType) throws Exception {
+ char[] pw = "password".toCharArray();
+ KeyStore ks = KeyStore.getInstance(keystoreType);
+ ks.load(null, pw);
+
+ KeyGenerator kg = KeyGenerator.getInstance("AES");
+ kg.init(128);
+ SecretKey key = kg.generateKey();
+
+ KeyStore.SecretKeyEntry ske = new KeyStore.SecretKeyEntry(key);
+ KeyStore.ProtectionParameter kspp = new KeyStore.PasswordProtection(pw);
+ ks.setEntry(ALIAS, ske, kspp);
+
+ File ksFile = File.createTempFile("test", ".test");
+ try (FileOutputStream fos = new FileOutputStream(ksFile)) {
+ ks.store(fos, pw);
+ fos.flush();
+ }
+
+ // now see if we can get it back
+ try (FileInputStream fis = new FileInputStream(ksFile)) {
+ KeyStore ks2 = KeyStore.getInstance(keystoreType);
+ ks2.load(fis, pw);
+ KeyStore.Entry entry = ks2.getEntry(ALIAS, kspp);
+ SecretKey keyIn = ((KeyStore.SecretKeyEntry)entry).getSecretKey();
+ if (Arrays.equals(key.getEncoded(), keyIn.getEncoded())) {
+ System.err.println("OK: worked just fine with " + keystoreType +
+ " keystore");
+ } else {
+ System.err.println("ERROR: keys are NOT equal after storing in "
+ + keystoreType + " keystore");
+ }
+ }
+ }
+}
--- a/langtools/.hgtags Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/.hgtags Mon Feb 15 09:44:42 2016 -0800
@@ -347,3 +347,4 @@
6149fc30cd710eb3484dc9863d8837ecaedb96b6 jdk-9+102
94cfc50c1b8a74fd7b0ed2e9e4f4a9dab4f2c6a1 jdk-9+103
3f60a4808377a276f6398ff19e61c1b9086f4d97 jdk-9+104
+81bd82222f8a1f2b291a44a49e063973caa4e73b jdk-9+105
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2013, 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
@@ -218,11 +218,6 @@
STATIC("static"),
/**
- * Warn about proprietary API that may be removed in a future release.
- */
- SUNAPI("sunapi", true),
-
- /**
* Warn about issues relating to use of try blocks (i.e. try-with-resources)
*/
TRY("try"),
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -83,7 +83,6 @@
private final JCDiagnostic.Factory diags;
private boolean warnOnSyntheticConflicts;
private boolean suppressAbortOnBadClassFile;
- private boolean enableSunApiLintControl;
private final JavaFileManager fileManager;
private final Source source;
private final Profile profile;
@@ -131,10 +130,8 @@
allowStrictMethodClashCheck = source.allowStrictMethodClashCheck();
allowPrivateSafeVarargs = source.allowPrivateSafeVarargs();
allowDiamondWithAnonymousClassCreation = source.allowDiamondWithAnonymousClassCreation();
- complexInference = options.isSet("complexinference");
warnOnSyntheticConflicts = options.isSet("warnOnSyntheticConflicts");
suppressAbortOnBadClassFile = options.isSet("suppressAbortOnBadClassFile");
- enableSunApiLintControl = options.isSet("enableSunApiLintControl");
warnOnAccessToSensitiveMembers = options.isSet("warnOnAccessToSensitiveMembers");
Target target = Target.instance(context);
@@ -144,14 +141,13 @@
boolean verboseDeprecated = lint.isEnabled(LintCategory.DEPRECATION);
boolean verboseUnchecked = lint.isEnabled(LintCategory.UNCHECKED);
- boolean verboseSunApi = lint.isEnabled(LintCategory.SUNAPI);
boolean enforceMandatoryWarnings = true;
deprecationHandler = new MandatoryWarningHandler(log, verboseDeprecated,
enforceMandatoryWarnings, "deprecated", LintCategory.DEPRECATION);
uncheckedHandler = new MandatoryWarningHandler(log, verboseUnchecked,
enforceMandatoryWarnings, "unchecked", LintCategory.UNCHECKED);
- sunApiHandler = new MandatoryWarningHandler(log, verboseSunApi,
+ sunApiHandler = new MandatoryWarningHandler(log, false,
enforceMandatoryWarnings, "sunapi", null);
deferredLintHandler = DeferredLintHandler.instance(context);
@@ -177,10 +173,6 @@
*/
boolean allowDiamondWithAnonymousClassCreation;
- /** Switch: -complexinference option set?
- */
- boolean complexInference;
-
/** Character for synthetic names
*/
char syntheticNameChar;
@@ -248,15 +240,6 @@
log.warning(LintCategory.VARARGS, pos, key, args);
}
- /** Warn about using proprietary API.
- * @param pos Position to be used for error reporting.
- * @param msg A string describing the problem.
- */
- public void warnSunApi(DiagnosticPosition pos, String msg, Object... args) {
- if (!lint.isSuppressed(LintCategory.SUNAPI))
- sunApiHandler.report(pos, msg, args);
- }
-
public void warnStatic(DiagnosticPosition pos, String msg, Object... args) {
if (lint.isEnabled(LintCategory.STATIC))
log.warning(LintCategory.STATIC, pos, msg, args);
@@ -3226,13 +3209,8 @@
void checkSunAPI(final DiagnosticPosition pos, final Symbol s) {
if ((s.flags() & PROPRIETARY) != 0) {
- deferredLintHandler.report(new DeferredLintHandler.LintLogger() {
- public void report() {
- if (enableSunApiLintControl)
- warnSunApi(pos, "sun.proprietary", s);
- else
- log.mandatoryWarning(pos, "sun.proprietary", s);
- }
+ deferredLintHandler.report(() -> {
+ log.mandatoryWarning(pos, "sun.proprietary", s);
});
}
}
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -94,7 +94,6 @@
public final boolean allowMethodHandles;
public final boolean allowFunctionalInterfaceMostSpecific;
public final boolean checkVarargsAccessAfterResolution;
- private final boolean debugResolve;
private final boolean compactMethodDiags;
final EnumSet<VerboseResolutionMode> verboseResolutionMode;
@@ -120,7 +119,6 @@
diags = JCDiagnostic.Factory.instance(context);
Source source = Source.instance(context);
Options options = Options.instance(context);
- debugResolve = options.isSet("debugresolve");
compactMethodDiags = options.isSet(Option.XDIAGS, "compact") ||
options.isUnset(Option.XDIAGS) && options.isUnset("rawDiagnostics");
verboseResolutionMode = VerboseResolutionMode.getVerboseResolutionMode(options);
@@ -3897,8 +3895,6 @@
super(HIDDEN, sym, "access error");
this.env = env;
this.site = site;
- if (debugResolve)
- log.error("proc.messager", sym + " @ " + site + " is inaccessible.");
}
@Override
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 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
@@ -55,8 +55,6 @@
import com.sun.tools.javac.code.Lint;
import com.sun.tools.javac.code.Source;
-import com.sun.tools.javac.file.FSInfo;
-import com.sun.tools.javac.file.Locations;
import com.sun.tools.javac.main.Option;
import com.sun.tools.javac.main.OptionHelper;
import com.sun.tools.javac.main.OptionHelper.GrumpyHelper;
@@ -88,6 +86,27 @@
options = Options.instance(context);
classLoaderClass = options.get("procloader");
locations.update(log, Lint.instance(context), FSInfo.instance(context));
+
+ // Setting this option is an indication that close() should defer actually closing
+ // the file manager until after a specified period of inactivity.
+ // This is to accomodate clients which save references to Symbols created for use
+ // within doclets or annotation processors, and which then attempt to use those
+ // references after the tool exits, having closed any internally managed file manager.
+ // Ideally, such clients should run the tool via the javax.tools API, providing their
+ // own file manager, which can be closed by the client when all use of that file
+ // manager is complete.
+ // If the option has a numeric value, it will be interpreted as the duration,
+ // in seconds, of the period of inactivity to wait for, before the file manager
+ // is actually closed.
+ // See also deferredClose().
+ String s = options.get("fileManager.deferClose");
+ if (s != null) {
+ try {
+ deferredCloseTimeout = (int) (Float.parseFloat(s) * 1000);
+ } catch (NumberFormatException e) {
+ deferredCloseTimeout = 60 * 1000; // default: one minute, in millis
+ }
+ }
}
protected Locations createLocations() {
@@ -116,6 +135,42 @@
*/
public boolean autoClose;
+ /**
+ * Wait for a period of inactivity before calling close().
+ * The length of the period of inactivity is given by {@code deferredCloseTimeout}
+ */
+ protected void deferredClose() {
+ Thread t = new Thread(getClass().getName() + " DeferredClose") {
+ @Override
+ public void run() {
+ try {
+ synchronized (BaseFileManager.this) {
+ long now = System.currentTimeMillis();
+ while (now < lastUsedTime + deferredCloseTimeout) {
+ BaseFileManager.this.wait(lastUsedTime + deferredCloseTimeout - now);
+ now = System.currentTimeMillis();
+ }
+ deferredCloseTimeout = 0;
+ close();
+ }
+ } catch (InterruptedException e) {
+ } catch (IOException e) {
+ }
+ }
+ };
+ t.setDaemon(true);
+ t.start();
+ }
+
+ synchronized void updateLastUsedTime() {
+ if (deferredCloseTimeout > 0) { // avoid updating the time unnecessarily
+ lastUsedTime = System.currentTimeMillis();
+ }
+ }
+
+ private long lastUsedTime = System.currentTimeMillis();
+ protected long deferredCloseTimeout = 0;
+
protected Source getSource() {
String sourceName = options.get(Option.SOURCE);
Source source = null;
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2015, 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
@@ -525,8 +525,16 @@
*/
@Override @DefinedBy(Api.COMPILER)
public void close() throws IOException {
- for (FileSystem fs: fileSystems.values())
+ if (deferredCloseTimeout > 0) {
+ deferredClose();
+ return;
+ }
+
+ for (FileSystem fs: fileSystems.values()) {
fs.close();
+ }
+ fileSystems.clear();
+ contentCache.clear();
}
@Override @DefinedBy(Api.COMPILER)
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/PathFileObject.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/PathFileObject.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 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
@@ -432,11 +432,13 @@
@Override @DefinedBy(Api.COMPILER)
public InputStream openInputStream() throws IOException {
+ fileManager.updateLastUsedTime();
return Files.newInputStream(path);
}
@Override @DefinedBy(Api.COMPILER)
public OutputStream openOutputStream() throws IOException {
+ fileManager.updateLastUsedTime();
fileManager.flushCache(this);
ensureParentDirectoriesExist();
return Files.newOutputStream(path);
@@ -471,6 +473,7 @@
@Override @DefinedBy(Api.COMPILER)
public Writer openWriter() throws IOException {
+ fileManager.updateLastUsedTime();
fileManager.flushCache(this);
ensureParentDirectoriesExist();
return new OutputStreamWriter(Files.newOutputStream(path), fileManager.getEncodingName());
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -91,11 +91,6 @@
*/
boolean verbose;
- /** Switch: check class file for correct minor version, unrecognized
- * attributes.
- */
- boolean checkClassFile;
-
/** Switch: read constant pool and code sections. This switch is initially
* set to false but can be turned on from outside.
*/
@@ -230,7 +225,6 @@
Options options = Options.instance(context);
verbose = options.isSet(VERBOSE);
- checkClassFile = options.isSet("-checkclassfile");
Source source = Source.instance(context);
allowSimplifiedVarargs = source.allowSimplifiedVarargs();
@@ -1148,15 +1142,6 @@
attributeReaders.put(r.name, r);
}
- /** Report unrecognized attribute.
- */
- void unrecognized(Name attrName) {
- if (checkClassFile)
- printCCF("ccf.unrecognized.attribute", attrName);
- }
-
-
-
protected void readEnclosingMethodAttr(Symbol sym) {
// sym is a nested class with an "Enclosing Method" attribute
// remove sym from it's current owners scope and place it in
@@ -1279,7 +1264,6 @@
if (r != null && r.accepts(kind))
r.read(sym, attrLen);
else {
- unrecognized(attrName);
bp = bp + attrLen;
}
}
@@ -2315,8 +2299,7 @@
int maxMinor = Version.MAX().minor;
if (majorVersion > maxMajor ||
majorVersion * 1000 + minorVersion <
- Version.MIN().major * 1000 + Version.MIN().minor)
- {
+ Version.MIN().major * 1000 + Version.MIN().minor) {
if (majorVersion == (maxMajor + 1))
log.warning("big.major.version",
currentClassFile,
@@ -2329,13 +2312,7 @@
Integer.toString(maxMajor),
Integer.toString(maxMinor));
}
- else if (checkClassFile &&
- majorVersion == maxMajor &&
- minorVersion > maxMinor)
- {
- printCCF("found.later.version",
- Integer.toString(minorVersion));
- }
+
indexPool();
if (signatureBuffer.length < bp) {
int ns = Integer.highestOneBit(bp) << 1;
@@ -2455,14 +2432,6 @@
return flags & ~ACC_SUPER; // SUPER and SYNCHRONIZED bits overloaded
}
- /** Output for "-checkclassfile" option.
- * @param key The key to look up the correct internationalized string.
- * @param arg An argument for substitution into the output string.
- */
- private void printCCF(String key, Object arg) {
- log.printLines(key, arg);
- }
-
/**
* A subclass of JavaFileObject for the sourcefile attribute found in a classfile.
* The attribute is only the last component of the original filename, so is unlikely
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -373,7 +373,6 @@
throw new Abort();
}
source = Source.instance(context);
- Target target = Target.instance(context);
attr = Attr.instance(context);
chk = Check.instance(context);
gen = Gen.instance(context);
@@ -393,7 +392,6 @@
stubOutput = options.isSet("-stubs");
relax = options.isSet("-relax");
printFlat = options.isSet("-printflat");
- attrParseOnly = options.isSet("-attrparseonly");
encoding = options.get(ENCODING);
lineDebugInfo = options.isUnset(G_CUSTOM) ||
options.isSet(G_CUSTOM, "lines");
@@ -405,7 +403,8 @@
verboseCompilePolicy = options.isSet("verboseCompilePolicy");
- if (attrParseOnly)
+ if (options.isSet("shouldStopPolicy") &&
+ CompileState.valueOf(options.get("shouldStopPolicy")) == CompileState.ATTR)
compilePolicy = CompilePolicy.ATTR_ONLY;
else
compilePolicy = CompilePolicy.decode(options.get("compilePolicy"));
@@ -452,10 +451,6 @@
*/
public boolean stubOutput;
- /** Generate attributed parse tree only.
- */
- public boolean attrParseOnly;
-
/** Switch: relax some constraints for producing the jsr14 prototype.
*/
boolean relax;
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2015, 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
@@ -766,10 +766,6 @@
// Run contributing processors that haven't run yet
psi.runContributingProcs(renv);
-
- // Debugging
- if (options.isSet("displayFilerState"))
- filer.displayState();
}
/**
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Mon Feb 15 09:44:42 2016 -0800
@@ -1,6 +1,6 @@
#
-# Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 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
@@ -1284,24 +1284,6 @@
compiler.note.unchecked.plural.additional=\
Some input files additionally use unchecked or unsafe operations.
-# 0: file name
-compiler.note.sunapi.filename=\
- {0} uses internal proprietary API that may be removed in a future release.
-
-compiler.note.sunapi.plural=\
- Some input files use internal proprietary API that may be removed in a future release.
-
-# The following string may appear after one of the above sunapi messages.
-compiler.note.sunapi.recompile=\
- Recompile with -Xlint:sunapi for details.
-
-# 0: file name
-compiler.note.sunapi.filename.additional=\
- {0} uses additional internal proprietary API that may be removed in a future release.
-
-compiler.note.sunapi.plural.additional=\
- Some input files additionally use internal proprietary API that may be removed in a future release.
-
# Notes related to annotation processing
# Print a client-generated note; assumed to be localized, no translation required
@@ -1375,13 +1357,6 @@
compiler.misc.verbose.classpath=\
[search path for class files: {0}]
-## extra output when using -checkclassfile (code/ClassReader)
-compiler.misc.ccf.found.later.version=\
- class file has later version than expected: {0}
-
-compiler.misc.ccf.unrecognized.attribute=\
- unrecognized attribute: {0}
-
## extra output when using -prompt (util/Log)
compiler.misc.resume.abort=\
R)esume, A)bort>
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 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
@@ -208,9 +208,6 @@
javac.opt.Xlint.desc.static=\
Warn about accessing a static member using an instance.
-javac.opt.Xlint.desc.sunapi=\
- Warn about proprietary API that may be removed in a future release.
-
javac.opt.Xlint.desc.try=\
Warn about issues relating to use of try blocks (i.e. try-with-resources).
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/options/Options.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/options/Options.java Mon Feb 15 09:44:42 2016 -0800
@@ -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
@@ -34,6 +34,7 @@
import java.util.Map;
import java.util.Set;
import java.util.HashSet;
+import java.util.StringJoiner;
import com.sun.tools.sjavac.Transformer;
import com.sun.tools.sjavac.Util;
@@ -225,10 +226,7 @@
}
String getResult() {
- String result = "";
- for (String s : args)
- result += s + " ";
- return result.trim();
+ return String.join(" ", args);
}
public void addAll(Collection<String> toAdd) {
@@ -337,10 +335,11 @@
// Helper method to join a list of source locations separated by
// File.pathSeparator
private static String concatenateSourceLocations(List<SourceLocation> locs) {
- String s = "";
- for (SourceLocation loc : locs)
- s += (s.isEmpty() ? "" : java.io.File.pathSeparator) + loc.getPath();
- return s;
+ StringJoiner joiner = new StringJoiner(java.io.File.pathSeparator);
+ for (SourceLocation loc : locs) {
+ joiner.add(loc.getPath().toString());
+ }
+ return joiner.toString();
}
// OptionHelper that records the traversed options in this Options instance.
--- a/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ExternalEditor.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ExternalEditor.java Mon Feb 15 09:44:42 2016 -0800
@@ -33,6 +33,7 @@
import java.nio.file.Path;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
+import java.util.Arrays;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
@@ -58,7 +59,7 @@
this.input = input;
}
- private void edit(String cmd, String initialText) {
+ private void edit(String[] cmd, String initialText) {
try {
setupWatch(initialText);
launch(cmd);
@@ -106,8 +107,10 @@
watchedThread.start();
}
- private void launch(String cmd) throws IOException {
- ProcessBuilder pb = new ProcessBuilder(cmd, tmpfile.toString());
+ private void launch(String[] cmd) throws IOException {
+ String[] params = Arrays.copyOf(cmd, cmd.length + 1);
+ params[cmd.length] = tmpfile.toString();
+ ProcessBuilder pb = new ProcessBuilder(params);
pb = pb.inheritIO();
try {
@@ -139,7 +142,7 @@
}
}
- static void edit(String cmd, Consumer<String> errorHandler, String initialText,
+ static void edit(String[] cmd, Consumer<String> errorHandler, String initialText,
Consumer<String> saveHandler, IOContext input) {
ExternalEditor ed = new ExternalEditor(errorHandler, saveHandler, input);
ed.edit(cmd, initialText);
--- a/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java Mon Feb 15 09:44:42 2016 -0800
@@ -35,6 +35,7 @@
import java.io.InputStream;
import java.io.PrintStream;
import java.io.Reader;
+import java.io.StreamTokenizer;
import java.io.StringReader;
import java.nio.charset.Charset;
import java.nio.file.AccessDeniedException;
@@ -152,7 +153,7 @@
private Feedback feedback = Feedback.Default;
private String cmdlineClasspath = null;
private String cmdlineStartup = null;
- private String editor = null;
+ private String[] editor = null;
// Commands and snippets which should be replayed
private List<String> replayableHistory;
@@ -537,7 +538,7 @@
arg = cmd.substring(idx + 1).trim();
cmd = cmd.substring(0, idx);
}
- Command[] candidates = findCommand(cmd, c -> c.kind != CommandKind.HELP_ONLY);
+ Command[] candidates = findCommand(cmd, c -> c.kind.isRealCommand);
if (candidates.length == 0) {
if (!rerunHistoryEntryById(cmd.substring(1))) {
hard("No such command or snippet id: %s", cmd);
@@ -579,18 +580,33 @@
public final String command;
public final String params;
public final String description;
+ public final String help;
public final Function<String,Boolean> run;
public final CompletionProvider completions;
public final CommandKind kind;
- public Command(String command, String params, String description, Function<String,Boolean> run, CompletionProvider completions) {
- this(command, params, description, run, completions, CommandKind.NORMAL);
+ // NORMAL Commands
+ public Command(String command, String params, String description, String help,
+ Function<String,Boolean> run, CompletionProvider completions) {
+ this(command, params, description, help,
+ run, completions, CommandKind.NORMAL);
}
- public Command(String command, String params, String description, Function<String,Boolean> run, CompletionProvider completions, CommandKind kind) {
+ // Documentation pseudo-commands
+ public Command(String command, String description, String help,
+ CommandKind kind) {
+ this(command, null, description, help,
+ arg -> { throw new IllegalStateException(); },
+ EMPTY_COMPLETION_PROVIDER,
+ kind);
+ }
+
+ public Command(String command, String params, String description, String help,
+ Function<String,Boolean> run, CompletionProvider completions, CommandKind kind) {
this.command = command;
this.params = params;
this.description = description;
+ this.help = help;
this.run = run;
this.completions = completions;
this.kind = kind;
@@ -603,10 +619,59 @@
}
enum CommandKind {
- NORMAL,
- REPLAY,
- HIDDEN,
- HELP_ONLY;
+ NORMAL(true, true, true),
+ REPLAY(true, true, true),
+ HIDDEN(true, false, false),
+ HELP_ONLY(false, true, false),
+ HELP_SUBJECT(false, false, false);
+
+ final boolean isRealCommand;
+ final boolean showInHelp;
+ final boolean shouldSuggestCompletions;
+ private CommandKind(boolean isRealCommand, boolean showInHelp, boolean shouldSuggestCompletions) {
+ this.isRealCommand = isRealCommand;
+ this.showInHelp = showInHelp;
+ this.shouldSuggestCompletions = shouldSuggestCompletions;
+ }
+ }
+
+ class ArgTokenizer extends StreamTokenizer {
+
+ ArgTokenizer(String arg) {
+ super(new StringReader(arg));
+ resetSyntax();
+ wordChars(0x00, 0xFF);
+ quoteChar('"');
+ quoteChar('\'');
+
+ whitespaceChars(0x09, 0x0D);
+ whitespaceChars(0x1C, 0x20);
+ whitespaceChars(0x85, 0x85);
+ whitespaceChars(0xA0, 0xA0);
+ whitespaceChars(0x1680, 0x1680);
+ whitespaceChars(0x180E, 0x180E);
+ whitespaceChars(0x2000, 0x200A);
+ whitespaceChars(0x202F, 0x202F);
+ whitespaceChars(0x205F, 0x205F);
+ whitespaceChars(0x3000, 0x3000);
+ }
+
+ String next() {
+ try {
+ nextToken();
+ } catch (Throwable t) {
+ return null;
+ }
+ return sval;
+ }
+
+ String val() {
+ return sval;
+ }
+
+ boolean isQuoted() {
+ return ttype == '\'' || ttype == '"';
+ }
}
static final class FixedCompletionProvider implements CompletionProvider {
@@ -722,86 +787,215 @@
// Table of commands -- with command forms, argument kinds, help message, implementation, ...
{
- registerCommand(new Command("/list", "[all|start|history|<name or id>]", "list the source you have typed",
- arg -> cmdList(arg),
- editKeywordCompletion()));
- registerCommand(new Command("/seteditor", "<executable>", "set the external editor command to use",
- arg -> cmdSetEditor(arg),
- EMPTY_COMPLETION_PROVIDER));
+ registerCommand(new Command("/list", "[all|start|<name or id>]", "list the source you have typed",
+ "Show the source of snippets, prefaced with the snippet id.\n\n" +
+ "/list\n" +
+ " -- List the currently active snippets of code that you typed or read with /open\n" +
+ "/list start\n" +
+ " -- List the automatically evaluated start-up snippets\n" +
+ "/list all\n" +
+ " -- List all snippets including failed, overwritten, dropped, and start-up\n" +
+ "/list <name>\n" +
+ " -- List snippets with the specified name (preference for active snippets)\n" +
+ "/list <id>\n" +
+ " -- List the snippet with the specified snippet id\n",
+ arg -> cmdList(arg),
+ editKeywordCompletion()));
+ registerCommand(new Command("/seteditor", "<command>", "set the external editor command to use",
+ "Specify the command to launch for the /edit command.\n" +
+ "The command is an operating system dependent string.\n" +
+ "The command may include space-separated arguments (such as flags).\n" +
+ "When /edit is used, temporary file to edit will be appended as the last argument.\n",
+ arg -> cmdSetEditor(arg),
+ EMPTY_COMPLETION_PROVIDER));
registerCommand(new Command("/edit", "<name or id>", "edit a source entry referenced by name or id",
- arg -> cmdEdit(arg),
- editCompletion()));
+ "Edit a snippet or snippets of source in an external editor.\n" +
+ "The editor to use is set with /seteditor.\n" +
+ "If no editor has been set, a simple editor will be launched.\n\n" +
+ "/edit <name>\n" +
+ " -- Edit the snippet or snippets with the specified name (preference for active snippets)\n" +
+ "/edit <id>\n" +
+ " -- Edit the snippet with the specified snippet id\n" +
+ "/edit\n" +
+ " -- Edit the currently active snippets of code that you typed or read with /open\n",
+ arg -> cmdEdit(arg),
+ editCompletion()));
registerCommand(new Command("/drop", "<name or id>", "delete a source entry referenced by name or id",
- arg -> cmdDrop(arg),
- editCompletion(),
- CommandKind.REPLAY));
- registerCommand(new Command("/save", "[all|history|start] <file>", "save: <none> - current source;\n" +
- " all - source including overwritten, failed, and start-up code;\n" +
- " history - editing history;\n" +
- " start - default start-up definitions",
- arg -> cmdSave(arg),
- saveCompletion()));
+ "Drop a snippet -- making it inactive.\n\n" +
+ "/drop <name>\n" +
+ " -- Drop the snippet with the specified name\n" +
+ "/drop <id>\n" +
+ " -- Drop the snippet with the specified snippet id\n",
+ arg -> cmdDrop(arg),
+ editCompletion(),
+ CommandKind.REPLAY));
+ registerCommand(new Command("/save", "[all|history|start] <file>", "Save snippet source to a file.",
+ "Save the specified snippets and/or commands to the specified file.\n\n" +
+ "/save <file>\n" +
+ " -- Save the source of current active snippets to the file\n" +
+ "/save all <file>\n" +
+ " -- Save the source of all snippets to the file\n" +
+ " Includes source including overwritten, failed, and start-up code\n" +
+ "/save history <file>\n" +
+ " -- Save the sequential history of all commands and snippets entered since jshell was launched\n" +
+ "/save start <file>\n" +
+ " -- Save the default start-up definitions to the file\n",
+ arg -> cmdSave(arg),
+ saveCompletion()));
registerCommand(new Command("/open", "<file>", "open a file as source input",
- arg -> cmdOpen(arg),
- FILE_COMPLETION_PROVIDER));
+ "Open a file and read its contents as snippets and commands.\n\n" +
+ "/open <file>\n" +
+ " -- Read the specified file as jshell input.\n",
+ arg -> cmdOpen(arg),
+ FILE_COMPLETION_PROVIDER));
registerCommand(new Command("/vars", null, "list the declared variables and their values",
- arg -> cmdVars(),
- EMPTY_COMPLETION_PROVIDER));
+ "List the type, name, and value of the current active jshell variables.\n",
+ arg -> cmdVars(),
+ EMPTY_COMPLETION_PROVIDER));
registerCommand(new Command("/methods", null, "list the declared methods and their signatures",
- arg -> cmdMethods(),
- EMPTY_COMPLETION_PROVIDER));
+ "List the name, parameter types, and return type of the current active jshell methods.\n",
+ arg -> cmdMethods(),
+ EMPTY_COMPLETION_PROVIDER));
registerCommand(new Command("/classes", null, "list the declared classes",
- arg -> cmdClasses(),
- EMPTY_COMPLETION_PROVIDER));
+ "List the current active jshell classes, interfaces, and enums.\n",
+ arg -> cmdClasses(),
+ EMPTY_COMPLETION_PROVIDER));
registerCommand(new Command("/imports", null, "list the imported items",
- arg -> cmdImports(),
- EMPTY_COMPLETION_PROVIDER));
- registerCommand(new Command("/exit", null, "exit the REPL",
- arg -> cmdExit(),
- EMPTY_COMPLETION_PROVIDER));
- registerCommand(new Command("/reset", null, "reset everything in the REPL",
- arg -> cmdReset(),
- EMPTY_COMPLETION_PROVIDER));
+ "List the current active jshell imports.\n",
+ arg -> cmdImports(),
+ EMPTY_COMPLETION_PROVIDER));
+ registerCommand(new Command("/exit", null, "exit jshell",
+ "Leave the jshell tool. No work is saved.\n" +
+ "Save any work before using this command\n",
+ arg -> cmdExit(),
+ EMPTY_COMPLETION_PROVIDER));
+ registerCommand(new Command("/reset", null, "reset jshell",
+ "Reset the jshell tool code and execution state:\n" +
+ " * All entered code is lost.\n" +
+ " * Start-up code is re-executed.\n" +
+ " * The execution state is restarted.\n" +
+ " * The classpath is cleared.\n" +
+ "Tool settings are maintained: /feedback, /prompt, and /seteditor\n" +
+ "Save any work before using this command\n",
+ arg -> cmdReset(),
+ EMPTY_COMPLETION_PROVIDER));
registerCommand(new Command("/reload", "[restore] [quiet]", "reset and replay relevant history -- current or previous (restore)",
- arg -> cmdReload(arg),
- reloadCompletion()));
+ "Reset the jshell tool code and execution state then replay each\n" +
+ "jshell valid command and valid snippet in the order they were entered.\n\n" +
+ "/reload\n" +
+ " -- Reset and replay the valid history since jshell was entered, or\n" +
+ " a /reset, or /reload command was executed -- whichever is most\n" +
+ " recent.\n" +
+ "/reload restore\n" +
+ " -- Reset and replay the valid history between the previous and most\n" +
+ " recent time that jshell was entered, or a /reset, or /reload\n" +
+ " command was executed. This can thus be used to restore a previous\n" +
+ " jshell tool sesson.\n" +
+ "/reload [restore] quiet\n" +
+ " -- With the 'quiet' argument the replay is not shown. Errors will display.\n",
+ arg -> cmdReload(arg),
+ reloadCompletion()));
registerCommand(new Command("/feedback", "<level>", "feedback information: off, concise, normal, verbose, default, or ?",
- arg -> cmdFeedback(arg),
- new FixedCompletionProvider("off", "concise", "normal", "verbose", "default", "?")));
+ "Set the level of feedback describing the effect of commands and snippets.\n\n" +
+ "/feedback off\n" +
+ " -- Give no feedback\n" +
+ "/feedback concise\n" +
+ " -- Brief and generally symbolic feedback\n" +
+ "/feedback normal\n" +
+ " -- Give a natural language description of the actions\n" +
+ "/feedback verbose\n" +
+ " -- Like normal but with side-effects described\n" +
+ "/feedback default\n" +
+ " -- Same as normal for user input, off for input from a file\n",
+ arg -> cmdFeedback(arg),
+ new FixedCompletionProvider("off", "concise", "normal", "verbose", "default", "?")));
registerCommand(new Command("/prompt", null, "toggle display of a prompt",
- arg -> cmdPrompt(),
- EMPTY_COMPLETION_PROVIDER));
+ "Toggle between displaying an input prompt and not displaying a prompt.\n" +
+ "Particularly useful when pasting large amounts of text.\n",
+ arg -> cmdPrompt(),
+ EMPTY_COMPLETION_PROVIDER));
registerCommand(new Command("/classpath", "<path>", "add a path to the classpath",
- arg -> cmdClasspath(arg),
- classPathCompletion(),
- CommandKind.REPLAY));
+ "Append a additional path to the classpath.\n",
+ arg -> cmdClasspath(arg),
+ classPathCompletion(),
+ CommandKind.REPLAY));
registerCommand(new Command("/history", null, "history of what you have typed",
- arg -> cmdHistory(),
- EMPTY_COMPLETION_PROVIDER));
+ "Display the history of snippet and command input since this jshell was launched.\n",
+ arg -> cmdHistory(),
+ EMPTY_COMPLETION_PROVIDER));
registerCommand(new Command("/setstart", "<file>", "read file and set as the new start-up definitions",
- arg -> cmdSetStart(arg),
- FILE_COMPLETION_PROVIDER));
- registerCommand(new Command("/debug", "", "toggle debugging of the REPL",
- arg -> cmdDebug(arg),
- EMPTY_COMPLETION_PROVIDER,
- CommandKind.HIDDEN));
- registerCommand(new Command("/help", "", "this help message",
- arg -> cmdHelp(),
- EMPTY_COMPLETION_PROVIDER));
- registerCommand(new Command("/?", "", "this help message",
- arg -> cmdHelp(),
- EMPTY_COMPLETION_PROVIDER));
+ "The contents of the specified file become the default start-up snippets and commands.\n",
+ arg -> cmdSetStart(arg),
+ FILE_COMPLETION_PROVIDER));
+ registerCommand(new Command("/debug", null, "toggle debugging of the jshell",
+ "Display debugging information for the jshelll implementation.\n" +
+ "0: Debugging off\n" +
+ "r: Debugging on\n" +
+ "g: General debugging on\n" +
+ "f: File manager debugging on\n" +
+ "c': Completion analysis debugging on\n" +
+ "d': Dependency debugging on\n" +
+ "e': Event debugging on\n",
+ arg -> cmdDebug(arg),
+ EMPTY_COMPLETION_PROVIDER,
+ CommandKind.HIDDEN));
+ registerCommand(new Command("/help", "[<command>|<subject>]", "get information about jshell",
+ "Display information about jshell.\n" +
+ "/help\n" +
+ " -- List the jshell commands and help subjects.\n" +
+ "/help <command>\n" +
+ " -- Display information about the specified comand. The slash must be included.\n" +
+ " Only the first few letters of the command are needed -- if more than one\n" +
+ " each will be displayed. Example: /help /li\n" +
+ "/help <subject>\n" +
+ " -- Display information about the specified help subject. Example: /help intro\n",
+ arg -> cmdHelp(arg),
+ EMPTY_COMPLETION_PROVIDER));
+ registerCommand(new Command("/?", "", "get information about jshell",
+ "Display information about jshell (abbreviation for /help).\n" +
+ "/?\n" +
+ " -- Display list of commands and help subjects.\n" +
+ "/? <command>\n" +
+ " -- Display information about the specified comand. The slash must be included.\n" +
+ " Only the first few letters of the command are needed -- if more than one\n" +
+ " match, each will be displayed. Example: /? /li\n" +
+ "/? <subject>\n" +
+ " -- Display information about the specified help subject. Example: /? intro\n",
+ arg -> cmdHelp(arg),
+ EMPTY_COMPLETION_PROVIDER));
registerCommand(new Command("/!", "", "re-run last snippet",
- arg -> cmdUseHistoryEntry(-1),
- EMPTY_COMPLETION_PROVIDER));
- registerCommand(new Command("/<id>", "", "re-run snippet by id",
- arg -> { throw new IllegalStateException(); },
- EMPTY_COMPLETION_PROVIDER,
- CommandKind.HELP_ONLY));
- registerCommand(new Command("/-<n>", "", "re-run n-th previous snippet",
- arg -> { throw new IllegalStateException(); },
- EMPTY_COMPLETION_PROVIDER,
- CommandKind.HELP_ONLY));
+ "Reevaluate the most recently entered snippet.\n",
+ arg -> cmdUseHistoryEntry(-1),
+ EMPTY_COMPLETION_PROVIDER));
+
+ // Documentation pseudo-commands
+
+ registerCommand(new Command("/<id>", "re-run snippet by id",
+ "",
+ CommandKind.HELP_ONLY));
+ registerCommand(new Command("/-<n>", "re-run n-th previous snippet",
+ "",
+ CommandKind.HELP_ONLY));
+ registerCommand(new Command("intro", "An introduction to the jshell tool",
+ "The jshell tool allows you to execute Java code, getting immediate results.\n" +
+ "You can enter a Java definition (variable, method, class, etc), like: int x = 8\n" +
+ "or a Java expression, like: x + x\n" +
+ "or a Java statement or import.\n" +
+ "These little chunks of Java code are called 'snippets'.\n\n" +
+ "There are also jshell commands that allow you to understand and\n" +
+ "control what you are doing, like: /list\n\n" +
+ "For a list of commands: /help",
+ CommandKind.HELP_SUBJECT));
+ registerCommand(new Command("shortcuts", "Describe shortcuts",
+ "Supported shortcuts include:\n\n" +
+ "<tab> -- After entering the first few letters of a Java identifier,\n" +
+ " a jshell command, or, in some cases, a jshell command argument,\n" +
+ " press the <tab> key to complete the input.\n" +
+ " If there is more than one completion, show possible completions.\n" +
+ "Shift-<tab> -- After the name and open parenthesis of a method or constructor invocation,\n" +
+ " hold the <shift> key and press the <tab> to see a synopsis of all\n" +
+ " matching methods/constructors.\n",
+ CommandKind.HELP_SUBJECT));
}
public List<Suggestion> commandCompletionSuggestions(String code, int cursor, int[] anchor) {
@@ -813,7 +1007,7 @@
result = commands.values()
.stream()
.distinct()
- .filter(cmd -> cmd.kind != CommandKind.HIDDEN && cmd.kind != CommandKind.HELP_ONLY)
+ .filter(cmd -> cmd.kind.shouldSuggestCompletions)
.map(cmd -> cmd.command)
.filter(key -> key.startsWith(prefix))
.map(key -> new Suggestion(key + " ", false));
@@ -856,7 +1050,11 @@
hard("/seteditor requires a path argument");
return false;
} else {
- editor = arg;
+ List<String> ed = new ArrayList<>();
+ ArgTokenizer at = new ArgTokenizer(arg);
+ String n;
+ while ((n = at.next()) != null) ed.add(n);
+ editor = ed.toArray(new String[ed.size()]);
fluff("Editor set to: %s", arg);
return true;
}
@@ -971,11 +1169,28 @@
return true;
}
- boolean cmdHelp() {
+ boolean cmdHelp(String arg) {
+ if (!arg.isEmpty()) {
+ StringBuilder sb = new StringBuilder();
+ commands.values().stream()
+ .filter(c -> c.command.startsWith(arg))
+ .forEach(c -> {
+ sb.append("\n");
+ sb.append(c.command);
+ sb.append("\n\n");
+ sb.append(c.help);
+ sb.append("\n");
+ });
+ if (sb.length() > 0) {
+ cmdout.print(sb);
+ return true;
+ }
+ cmdout.printf("No commands or subjects start with the provided argument: %s\n\n", arg);
+ }
int synopsisLen = 0;
Map<String, String> synopsis2Description = new LinkedHashMap<>();
for (Command cmd : new LinkedHashSet<>(commands.values())) {
- if (cmd.kind == CommandKind.HIDDEN)
+ if (!cmd.kind.showInHelp)
continue;
StringBuilder synopsis = new StringBuilder();
synopsis.append(cmd.command);
@@ -994,9 +1209,13 @@
cmdout.println(e.getValue().replace("\n", indentedNewLine));
}
cmdout.println();
- cmdout.println("Supported shortcuts include:");
- cmdout.println("<tab> -- show possible completions for the current text");
- cmdout.println("Shift-<tab> -- for current method or constructor invocation, show a synopsis of the method/constructor");
+ cmdout.println("For more information type '/help' followed by the name of command or a subject.");
+ cmdout.println("For example '/help /list' or '/help intro'. Subjects:\n");
+ commands.values().stream()
+ .filter(c -> c.kind == CommandKind.HELP_SUBJECT)
+ .forEach(c -> {
+ cmdout.printf("%-12s -- %s\n", c.command, c.description);
+ });
return true;
}
@@ -1033,8 +1252,16 @@
return null;
}
+ private boolean inStartUp(Snippet sn) {
+ return mapSnippet.get(sn).space == startNamespace;
+ }
+
+ private boolean isActive(Snippet sn) {
+ return state.status(sn).isActive;
+ }
+
private boolean mainActive(Snippet sn) {
- return notInStartUp(sn) && state.status(sn).isActive;
+ return !inStartUp(sn) && isActive(sn);
}
private boolean matchingDeclaration(Snippet sn, String name) {
@@ -1054,6 +1281,10 @@
if (allowAll && arg.equals("all")) {
// all snippets including start-up, failed, and overwritten
return snippets.stream();
+ } else if (allowAll && arg.equals("start")) {
+ // start-up snippets
+ return snippets.stream()
+ .filter(this::inStartUp);
} else if (arg.isEmpty()) {
// Default is all active user snippets
return snippets.stream()
@@ -1063,7 +1294,7 @@
nonEmptyStream(
() -> snippets.stream(),
// look for active user declarations matching the name
- sn -> mainActive(sn) && matchingDeclaration(sn, arg),
+ sn -> isActive(sn) && matchingDeclaration(sn, arg),
// else, look for any declarations matching the name
sn -> matchingDeclaration(sn, arg),
// else, look for an id of this name
@@ -1839,10 +2070,6 @@
return feedback;
}
- boolean notInStartUp(Snippet sn) {
- return mapSnippet.get(sn).space != startNamespace;
- }
-
/** The current version number as a string.
*/
static String version() {
--- a/langtools/test/Makefile Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/Makefile Mon Feb 15 09:44:42 2016 -0800
@@ -278,7 +278,7 @@
@mkdir -p $(JTREG_OUTPUT_DIR)
JT_JAVA=$(JT_JAVA) $(JTREG) \
-J-Xmx512m \
- -vmoption:-Xmx1024m \
+ -vmoption:-Xmx768m \
-a -ignore:quiet $(if $(JTREG_VERBOSE),-v:$(JTREG_VERBOSE)) \
-r:$(JTREG_OUTPUT_DIR)/JTreport \
-w:$(JTREG_OUTPUT_DIR)/JTwork \
--- a/langtools/test/jdk/jshell/ToolBasicTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/jdk/jshell/ToolBasicTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8143037 8142447 8144095 8140265 8144906
+ * @bug 8143037 8142447 8144095 8140265 8144906 8146138 8147887 8147886
* @requires os.family != "solaris"
* @summary Tests for Basic tests for REPL tool
* @library /tools/lib
@@ -306,19 +306,38 @@
);
}
- public void testHelp() {
+ public void testHelpLength() {
Consumer<String> testOutput = (s) -> {
List<String> ss = Stream.of(s.split("\n"))
.filter(l -> !l.isEmpty())
.collect(Collectors.toList());
- assertTrue(ss.size() >= 5, "Help does not print enough lines:\n" + s);
+ assertTrue(ss.size() >= 10, "Help does not print enough lines:\n" + s);
};
test(
(a) -> assertCommandCheckOutput(a, "/?", testOutput),
- (a) -> assertCommandCheckOutput(a, "/help", testOutput)
+ (a) -> assertCommandCheckOutput(a, "/help", testOutput),
+ (a) -> assertCommandCheckOutput(a, "/help /list", testOutput)
);
}
+ public void testHelp() {
+ test(
+ (a) -> assertHelp(a, "/?", "/list", "/help", "/exit", "intro"),
+ (a) -> assertHelp(a, "/help", "/list", "/help", "/exit", "intro"),
+ (a) -> assertHelp(a, "/help short", "shortcuts", "<tab>"),
+ (a) -> assertHelp(a, "/? /li", "/list all", "snippets"),
+ (a) -> assertHelp(a, "/help /help", "/help <command>")
+ );
+ }
+
+ private void assertHelp(boolean a, String command, String... find) {
+ assertCommandCheckOutput(a, command, s -> {
+ for (String f : find) {
+ assertTrue(s.contains(f), "Expected output of " + command + " to contain: " + f);
+ }
+ });
+ }
+
public void oneLineOfError() {
test(
(a) -> assertCommand(a, "12+", null),
@@ -682,10 +701,12 @@
a -> assertVariable(a, "int", "aardvark"),
a -> assertCommandCheckOutput(a, "/list aardvark",
s -> assertTrue(s.contains("aardvark"))),
+ a -> assertCommandCheckOutput(a, "/list start",
+ s -> checkLineToList(s, START_UP)),
a -> assertCommandCheckOutput(a, "/list all",
s -> checkLineToList(s, startVarList)),
- a -> assertCommandCheckOutput(a, "/list history",
- s -> assertTrue(s.split("\n").length >= 4, s)),
+ a -> assertCommandCheckOutput(a, "/list printf",
+ s -> assertTrue(s.contains("void printf"))),
a -> assertCommandCheckOutput(a, "/list " + arg,
s -> assertEquals(s, "| No definition or id named " + arg +
" found. Try /list without arguments.\n"))
--- a/langtools/test/jdk/jshell/ToolReloadTest.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/jdk/jshell/ToolReloadTest.java Mon Feb 15 09:44:42 2016 -0800
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8081845
+ * @bug 8081845 8147898
* @summary Tests for /reload in JShell tool
* @modules jdk.compiler/com.sun.tools.javac.api
* jdk.compiler/com.sun.tools.javac.main
@@ -110,6 +110,23 @@
);
}
+ public void testReloadQuiet() {
+ test(false, new String[]{"-nostartup"},
+ a -> assertVariable(a, "int", "a"),
+ a -> dropVariable(a, "/dr 1", "int a = 0"),
+ a -> assertMethod(a, "int b() { return 0; }", "()I", "b"),
+ a -> dropMethod(a, "/drop b", "b ()I"),
+ a -> assertClass(a, "class A {}", "class", "A"),
+ a -> dropClass(a, "/dr A", "class A"),
+ a -> assertCommand(a, "/reload quiet",
+ "| Restarting and restoring state.\n"),
+ a -> assertCommandCheckOutput(a, "/vars", assertVariables()),
+ a -> assertCommandCheckOutput(a, "/methods", assertMethods()),
+ a -> assertCommandCheckOutput(a, "/classes", assertClasses()),
+ a -> assertCommandCheckOutput(a, "/imports", assertImports())
+ );
+ }
+
public void testReloadRepeat() {
test(false, new String[]{"-nostartup"},
(a) -> assertVariable(a, "int", "c", "7", "7"),
--- a/langtools/test/tools/javac/T6873845.java Thu Feb 11 13:58:43 2016 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * @test /nodynamiccopyright/
- * @bug 6873845
- * @summary refine access to symbol file
- * @modules java.base/sun.misc
- * jdk.compiler
- */
-
-import java.io.*;
-import java.util.*;
-
-import sun.misc.*;
-
-public class T6873845 {
- public static void main(String... args) throws Exception {
- new T6873845().run();
- }
-
- public void run() throws Exception {
- String out = compile(Arrays.asList("-XDrawDiagnostics", "-X"));
- if (out.contains("sunapi"))
- throw new Exception("unexpected output for -X");
-
- String warn1 = "T6873845.java:75:9: compiler.warn.sun.proprietary: sun.misc.Unsafe" + newline;
- String warn2 = "T6873845.java:80:9: compiler.warn.sun.proprietary: sun.misc.Unsafe" + newline;
- String note1 = "- compiler.note.sunapi.filename: T6873845.java" + newline;
- String note2 = "- compiler.note.sunapi.recompile" + newline;
-
- test(opts(),
- warn1 + warn2 + "2 warnings" + newline);
- test(opts("-XDenableSunApiLintControl"),
- note1 + note2);
- test(opts("-XDenableSunApiLintControl", "-XDsuppressNotes"),
- "");
- test(opts("-XDenableSunApiLintControl", "-Xlint:sunapi"),
- warn1 + "1 warning" + newline);
- test(opts("-XDenableSunApiLintControl", "-Xlint:all"),
- warn1 + "1 warning" + newline);
- test(opts("-XDenableSunApiLintControl", "-Xlint:all,-sunapi"),
- note1 + note2);
- }
-
- List<String> opts(String... opts) {
- return Arrays.asList(opts);
- }
-
- void test(List<String> opts, String expect) throws Exception {
- List<String> args = new ArrayList<String>();
- args.addAll(opts);
- args.add("-d");
- args.add(testClasses.getPath());
- args.add(new File(testSrc, "T6873845.java").getPath());
- compile(args); // to verify resource strings exist
- args.add(0, "-XDrawDiagnostics");
- String out = compile(args);
- if (!out.equals(expect))
- throw new Exception("unexpected output from compiler; expected: " + expect +
- "\n found: " + out);
- }
-
- String compile(List<String> args) throws Exception{
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- System.out.println("compile: " + args);
- int rc = com.sun.tools.javac.Main.compile(args.toArray(new String[args.size()]), pw);
- pw.close();
- String out = sw.toString();
- System.out.println(out);
- if (rc != 0)
- throw new Exception("compilation failed unexpectedly");
- return out;
- }
-
- void m1() {
- Unsafe.getUnsafe();
- }
-
- @SuppressWarnings("sunapi")
- void m2() {
- Unsafe.getUnsafe();
- }
-
- private File testSrc = new File(System.getProperty("test.src", "."));
- private File testClasses = new File(System.getProperty("test.classes", "."));
- private String newline = System.getProperty("line.separator");
-}
-
--- a/langtools/test/tools/javac/diags/CheckResourceKeys.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/tools/javac/diags/CheckResourceKeys.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 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
@@ -182,7 +182,7 @@
* have a significant recognizable substring to look for.
*/
private boolean isMandatoryWarningString(String s) {
- String[] bases = { "deprecated", "unchecked", "varargs", "sunapi" };
+ String[] bases = { "deprecated", "unchecked", "varargs" };
String[] tails = { ".filename", ".filename.additional", ".plural", ".plural.additional", ".recompile" };
for (String b: bases) {
if (s.startsWith(b)) {
@@ -229,7 +229,6 @@
"compiler.err.signature.doesnt.match.supertype", // UNUSED
"compiler.err.type.var.more.than.once", // UNUSED
"compiler.err.type.var.more.than.once.in.result", // UNUSED
- "compiler.misc.ccf.found.later.version", // UNUSED
"compiler.misc.non.denotable.type", // UNUSED
"compiler.misc.unnamed.package", // should be required, CR 6964147
"compiler.misc.verbose.retro", // UNUSED
@@ -289,6 +288,7 @@
// -XD option names
"process.packages",
"ignore.symbol.file",
+ "fileManager.deferClose",
// prefix/embedded strings
"compiler.",
"compiler.misc.",
--- a/langtools/test/tools/javac/diags/examples.not-yet.txt Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/tools/javac/diags/examples.not-yet.txt Mon Feb 15 09:44:42 2016 -0800
@@ -49,8 +49,6 @@
compiler.misc.bad.signature # bad class file
compiler.misc.bad.type.annotation.value
compiler.misc.base.membership # UNUSED
-compiler.misc.ccf.found.later.version
-compiler.misc.ccf.unrecognized.attribute
compiler.misc.class.file.not.found # ClassReader
compiler.misc.class.file.wrong.class
compiler.misc.fatal.err.cant.locate.ctor # Resolve, from Lower
--- a/langtools/test/tools/javac/diags/examples/SunApiFilename.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/tools/javac/diags/examples/SunApiFilename.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 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
@@ -21,9 +21,7 @@
* questions.
*/
-// key: compiler.note.sunapi.filename
-// key: compiler.note.sunapi.recompile
-// options: -XDenableSunApiLintControl
+// key: compiler.warn.sun.proprietary
class SunApiFilename {
sun.misc.Unsafe x;
--- a/langtools/test/tools/javac/diags/examples/SunApiFilenameAdditional.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/tools/javac/diags/examples/SunApiFilenameAdditional.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 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
@@ -21,9 +21,7 @@
* questions.
*/
-// key: compiler.note.sunapi.filename.additional
// key: compiler.warn.sun.proprietary
-// options: -XDenableSunApiLintControl -Xlint:sunapi -Xmaxwarns 1
class SunApiFilenameAdditional {
sun.misc.Unsafe x1;
--- a/langtools/test/tools/javac/diags/examples/SunApiPlural/SunApiPlural.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/tools/javac/diags/examples/SunApiPlural/SunApiPlural.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 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
@@ -21,9 +21,7 @@
* questions.
*/
-// key: compiler.note.sunapi.plural
-// key: compiler.note.sunapi.recompile
-// options: -XDenableSunApiLintControl
+// key: compiler.warn.sun.proprietary
class SunApiPlural {
sun.misc.Unsafe x;
--- a/langtools/test/tools/javac/diags/examples/SunApiPluralAdditional/SunApiPluralAdditional.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/tools/javac/diags/examples/SunApiPluralAdditional/SunApiPluralAdditional.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 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
@@ -21,9 +21,7 @@
* questions.
*/
-// key: compiler.note.sunapi.plural.additional
// key: compiler.warn.sun.proprietary
-// options: -XDenableSunApiLintControl -Xlint:sunapi -Xmaxwarns 1
class SunApiPluralAdditional {
sun.misc.Unsafe x;
--- a/langtools/test/tools/javac/lambda/Conditional01.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/tools/javac/lambda/Conditional01.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -26,7 +26,7 @@
* @bug 8003280
* @summary Add lambda tests
* conditional and varargs
- * @compile -XDcomplexinference Conditional01.java
+ * @compile Conditional01.java
*/
import java.util.*;
--- a/langtools/test/tools/javac/lambda/Conditional02.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/tools/javac/lambda/Conditional02.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -26,7 +26,7 @@
* @bug 8003280
* @summary Add lambda tests
* inference and conditionals
- * @compile -XDcomplexinference Conditional02.java
+ * @compile Conditional02.java
*/
class Conditional02 {
--- a/langtools/test/tools/javac/lambda/Conditional03.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/tools/javac/lambda/Conditional03.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -26,7 +26,7 @@
* @bug 8003280
* @summary Add lambda tests
* conditionals and boxing
- * @compile -XDcomplexinference Conditional03.java
+ * @compile Conditional03.java
*/
class Conditional03 {
--- a/langtools/test/tools/javac/lambda/TargetType27.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/tools/javac/lambda/TargetType27.java Mon Feb 15 09:44:42 2016 -0800
@@ -4,7 +4,7 @@
* @summary Add lambda tests
* complex case of cyclic type inference (lambda returned where inference var expected)
* @compile/fail/ref=TargetType27.out -XDrawDiagnostics TargetType27.java
- * @compile/fail/ref=TargetType27.out -XDrawDiagnostics -XDcomplexinference TargetType27.java
+ * @compile/fail/ref=TargetType27.out -XDrawDiagnostics TargetType27.java
*/
class TargetType27 {
--- a/langtools/test/tools/javac/lambda/TargetType34.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/tools/javac/lambda/TargetType34.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -26,7 +26,7 @@
* @bug 8003280
* @summary Add lambda tests
* spurious resolution diagnostics when diamond constructor contains poly expression
- * @compile -XDcomplexinference TargetType34.java
+ * @compile TargetType34.java
*/
class TargetType34<X> {
--- a/langtools/test/tools/javac/warnings/6594914/T6594914b.java Thu Feb 11 13:58:43 2016 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/**
- * @test /nodynamiccopyright/
- * @bug 6594914
- * @summary \\@SuppressWarnings("deprecation") does not not work for the type of a variable
- * @modules java.base/sun.security.x509
- * @compile/ref=T6594914b.out -XDenableSunApiLintControl -XDrawDiagnostics -Xlint:sunapi T6594914b.java
- */
-
-
-class T6747671b {
-
- sun.security.x509.X509CertInfo a1; //warn
-
- @SuppressWarnings("sunapi")
- sun.security.x509.X509CertInfo a2;
-
- <X extends sun.security.x509.X509CertInfo>
- sun.security.x509.X509CertInfo m1(sun.security.x509.X509CertInfo a)
- throws sun.security.x509.CertException { return null; } //warn
-
- @SuppressWarnings("sunapi")
- <X extends sun.security.x509.X509CertInfo>
- sun.security.x509.X509CertInfo m2(sun.security.x509.X509CertInfo a)
- throws sun.security.x509.CertException { return null; }
-
- void test() {
- sun.security.x509.X509CertInfo a1; //warn
-
- @SuppressWarnings("sunapi")
- sun.security.x509.X509CertInfo a2;
- }
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/8147801/T8147801.java Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,160 @@
+/*
+ * 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8147801
+ * @summary java.nio.file.ClosedFileSystemException when using Javadoc API's in JDK9
+ * @modules jdk.javadoc/com.sun.tools.javadoc
+ * @library jarsrc
+ * @build lib.* p.*
+ * @run main T8147801
+ */
+
+import java.io.IOException;
+import java.nio.file.ClosedFileSystemException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+
+import com.sun.javadoc.ClassDoc;
+import com.sun.javadoc.FieldDoc;
+import com.sun.javadoc.RootDoc;
+
+/*
+ * This test verifies the use of the hidden fileManager.deferClose
+ * option, to work around the limitation that javadoc objects
+ * (like RootDoc and related types) should cannot normally be used
+ * after javadoc exits, closing its file manager (if it opened it.)
+ *
+ * The test runs javadoc on a chain of classes, 1 in source form,
+ * and 2 in a jar file. javadoc/javac will "complete" classes found
+ * in source, but will eagerly "classes" in class form.
+ * The chain is p/Test.java -> lib/Lib1.class -> lib/Lib2.class.
+ * After javadoc exits, the classes are examined, to finally force
+ * the classes to be completed, possibly causing javac to try and access
+ * references into a .jar file system which has now been closed.
+ *
+ * The test runs two test cases -- one without the workaround option,
+ * to test the validity of the test case, and one with the workaround
+ * option, to test that it works as expected.
+ */
+public class T8147801 {
+ public static void main(String... args) throws Exception {
+ new T8147801().run();
+ }
+
+ void run() throws Exception {
+ initJar();
+ test(false);
+ test(true);
+ if (errors > 0) {
+ throw new Exception(errors + " errors occurred");
+ }
+ }
+
+ void test(boolean withOption) {
+ System.err.println("Testing " + (withOption ? "with" : "without") + " option");
+ try {
+ RootDoc root = getRootDoc(withOption);
+ for (ClassDoc cd: root.specifiedClasses()) {
+ dump("", cd);
+ }
+ if (!withOption) {
+ error("expected option did not occur");
+ }
+ } catch (ClosedFileSystemException e) {
+ if (withOption) {
+ error("Unexpected exception: " + e);
+ } else {
+ System.err.println("Exception received as expected: " + e);
+ }
+ }
+ System.err.println();
+ }
+
+ RootDoc getRootDoc(boolean withOption) {
+ List<String> opts = new ArrayList<>();
+ if (withOption)
+ opts.add("-XDfileManager.deferClose=10");
+ opts.add("-doclet");
+ opts.add(getClass().getName());
+ opts.add("-classpath");
+ opts.add(jarPath.toString());
+ opts.add(Paths.get(System.getProperty("test.src"), "p", "Test.java").toString());
+ System.err.println("javadoc opts: " + opts);
+ int rc = com.sun.tools.javadoc.Main.execute(
+ "javadoc",
+ // by specifying our own class loader, we get the same Class instance as this
+ getClass().getClassLoader(),
+ opts.toArray(new String[opts.size()]));
+ if (rc != 0) {
+ error("unexpected exit from javadoc or doclet: " + rc);
+ }
+ return cachedRoot;
+ }
+
+ void dump(String prefix, ClassDoc cd) {
+ System.err.println(prefix + "class: " + cd);
+ for (FieldDoc fd: cd.fields()) {
+ System.err.println(fd);
+ if (fd.type().asClassDoc() != null) {
+ dump(prefix + " ", fd.type().asClassDoc());
+ }
+ }
+ }
+
+ void initJar() throws IOException {
+ Path testClasses = Paths.get(System.getProperty("test.classes"));
+ jarPath = Paths.get("lib.jar");
+ try (JarOutputStream out = new JarOutputStream(Files.newOutputStream(jarPath))) {
+ String[] classNames = {"Lib1.class", "Lib2.class"};
+ for (String cn : classNames) {
+ out.putNextEntry(new JarEntry("lib/" + cn));
+ Path libClass = testClasses.resolve("jarsrc").resolve("lib").resolve(cn);
+ out.write(Files.readAllBytes(libClass));
+ }
+ }
+ }
+
+ void error(String msg) {
+ System.err.println("Error: " + msg);
+ errors++;
+ }
+
+ Path jarPath;
+ int errors;
+
+ // Bad doclet caches the RootDoc for later use
+
+ static RootDoc cachedRoot;
+
+ public static boolean start(RootDoc root) {
+ cachedRoot = root;
+ return true;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/8147801/jarsrc/lib/Lib1.java Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * 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 lib;
+
+public class Lib1 {
+ public Lib2 lib2;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/8147801/jarsrc/lib/Lib2.java Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * 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 lib;
+
+public class Lib2 {
+ int i;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/8147801/p/Test.java Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ *
+ * 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 p;
+
+public class Test {
+ public lib.Lib1 lib1;
+}
+
--- a/langtools/test/tools/sjavac/JavacOptionPrep.java Thu Feb 11 13:58:43 2016 -0800
+++ b/langtools/test/tools/sjavac/JavacOptionPrep.java Mon Feb 15 09:44:42 2016 -0800
@@ -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
@@ -65,7 +65,7 @@
// - Sources provided without preceding option (SRC2)
// - An unrecognized option which is to be passed on to javac
String sjavacArgs = "-cp " + TestPath.CP1 + SEP + TestPath.CP2 +
- " -d dest " +
+ " -d dest" +
" -h header" +
" -sourcepath " + TestPath.SOURCEPATH1 +
" -src " + TestPath.SRC1 +
--- a/make/Init.gmk Thu Feb 11 13:58:43 2016 -0800
+++ b/make/Init.gmk Mon Feb 15 09:44:42 2016 -0800
@@ -319,6 +319,7 @@
$(call PrepareCompareBuild)
post-compare-build:
+ $(call WaitForSmartJavacFinish)
$(call CleanupCompareBuild)
$(call CompareBuildDoComparison)
--- a/make/InitSupport.gmk Thu Feb 11 13:58:43 2016 -0800
+++ b/make/InitSupport.gmk Mon Feb 15 09:44:42 2016 -0800
@@ -353,14 +353,17 @@
# Parse COMPARE_BUILD into COMPARE_BUILD_*
# Syntax: COMPARE_BUILD=CONF=<configure options>:PATCH=<patch file>:
# MAKE=<make targets>:COMP_OPTS=<compare script options>:
- # COMP_DIR=<compare script base dir>|<default>
+ # COMP_DIR=<compare script base dir>|<default>:
+ # FAIL=<bool>
# If neither CONF or PATCH is given, assume <default> means CONF if it
# begins with "--", otherwise assume it means PATCH.
# MAKE and COMP_OPTS can only be used with CONF and/or PATCH specified.
# If any value contains "+", it will be replaced by space.
+ # FAIL can be set to false to have the return value of compare be ignored.
define ParseCompareBuild
ifneq ($$(COMPARE_BUILD), )
COMPARE_BUILD_OUTPUT_ROOT := $(TOPDIR)/build/compare-build/$(CONF_NAME)
+ COMPARE_BUILD_FAIL := true
ifneq ($$(findstring :, $$(COMPARE_BUILD)), )
$$(foreach part, $$(subst :, , $$(COMPARE_BUILD)), \
@@ -379,6 +382,9 @@
$$(if $$(filter COMP_DIR=%, $$(part)), \
$$(eval COMPARE_BUILD_COMP_DIR=$$(strip $$(subst +, , $$(patsubst COMP_DIR=%, %, $$(part))))) \
) \
+ $$(if $$(filter FAIL=%, $$(part)), \
+ $$(eval COMPARE_BUILD_FAIL=$$(strip $$(subst +, , $$(patsubst FAIL=%, %, $$(part))))) \
+ ) \
)
else
# Separate handling for single field case, to allow for spaces in values.
@@ -402,6 +408,9 @@
$$(error Patch file $$(COMPARE_BUILD_PATCH) does not exist)
endif
endif
+ ifneq ($$(COMPARE_BUILD_FAIL), true)
+ COMPARE_BUILD_IGNORE_RESULT := || true
+ endif
endif
endef
@@ -443,9 +452,10 @@
$(ECHO) "Comparing between comparison rebuild (this/new) and baseline (other/old)"
$(if $(COMPARE_BUILD_COMP_DIR), \
+(cd $(COMPARE_BUILD_OUTPUT_ROOT) && ./compare.sh $(COMPARE_BUILD_COMP_OPTS) \
- -2dirs $(COMPARE_BUILD_OUTPUT_ROOT)/$(COMPARE_BUILD_COMP_DIR) $(OUTPUT_ROOT)/$(COMPARE_BUILD_COMP_DIR) || true), \
+ -2dirs $(COMPARE_BUILD_OUTPUT_ROOT)/$(COMPARE_BUILD_COMP_DIR) \
+ $(OUTPUT_ROOT)/$(COMPARE_BUILD_COMP_DIR) $(COMPARE_BUILD_IGNORE_RESULT)), \
+(cd $(COMPARE_BUILD_OUTPUT_ROOT) && ./compare.sh $(COMPARE_BUILD_COMP_OPTS) \
- -o $(OUTPUT_ROOT) || true) \
+ -o $(OUTPUT_ROOT) $(COMPARE_BUILD_IGNORE_RESULT)) \
)
endef
--- a/make/Main.gmk Thu Feb 11 13:58:43 2016 -0800
+++ b/make/Main.gmk Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -431,7 +431,7 @@
# The annotation processing for jdk.vm.ci needs java.base classes from the
# current JDK.
- jdk.vm.ci-gensrc-hotspot: java.base-java
+ jdk.vm.ci-gensrc-hotspot: java.base-java
# Explicitly add dependencies for special targets
java.base-java: unpack-sec
--- a/make/StripBinaries.gmk Thu Feb 11 13:58:43 2016 -0800
+++ b/make/StripBinaries.gmk Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2014, 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
@@ -57,8 +57,12 @@
NO_STRIP_CMDS_FILTER += %.cgi
# Don't include debug info for executables.
+
+# OS X stores symbol information in a .dylib file inside a .dSYM directory -
+# that file should not be stripped, so we prune the tree at the .dSYM directory.
ALL_CMDS_SRC := $(filter-out %.bc %.debuginfo %.diz %.map %.pdb, \
- $(shell $(FIND) $(SUPPORT_OUTPUTDIR)/modules_cmds -type f -o -type l))
+ $(shell $(FIND) $(SUPPORT_OUTPUTDIR)/modules_cmds \( -type f -o -type l \) \
+ -print -o -name "*.dSYM" -prune))
COPY_CMDS_SRC := $(filter $(NO_STRIP_CMDS_FILTER), $(ALL_CMDS_SRC))
STRIP_CMDS_SRC := $(filter-out $(NO_STRIP_CMDS_FILTER), $(ALL_CMDS_SRC))
--- a/make/common/NativeCompilation.gmk Thu Feb 11 13:58:43 2016 -0800
+++ b/make/common/NativeCompilation.gmk Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -187,25 +187,30 @@
# param 6 = the c++ flags to the compiler
# param 7 = the c++ compiler
# param 8 = the flags to the assembler
+ # param 9 = set to disable THIS_FILE
+
+ ifeq ($9, )
+ $1_$2_THIS_FILE = -DTHIS_FILE='"$$(<F)"'
+ endif
ifneq (,$$(filter %.c,$2))
# Compile as a C file
- $1_$2_FLAGS=$(CFLAGS_CCACHE) $4 $$($1_$(notdir $2)_CFLAGS) -DTHIS_FILE='"$$(<F)"' -c
+ $1_$2_FLAGS=$(CFLAGS_CCACHE) $4 $$($1_$(notdir $2)_CFLAGS) $$($1_$2_THIS_FILE) -c
$1_$2_COMP=$5
$1_$2_DEP_FLAG:=$(C_FLAG_DEPS)
else ifneq (,$$(filter %.m,$2))
# Compile as an Objective-C file
- $1_$2_FLAGS=-x objective-c $(CFLAGS_CCACHE) $4 $$($1_$(notdir $2)_CFLAGS) -DTHIS_FILE='"$$(<F)"' -c
+ $1_$2_FLAGS=-x objective-c $(CFLAGS_CCACHE) $4 $$($1_$(notdir $2)_CFLAGS) $$($1_$2_THIS_FILE) -c
$1_$2_COMP=$5
$1_$2_DEP_FLAG:=$(C_FLAG_DEPS)
else ifneq (,$$(filter %.s %.S,$2))
# Compile as assembler file
- $1_$2_FLAGS=$8 -DTHIS_FILE='"$$(<F)"'
+ $1_$2_FLAGS=$8
$1_$2_COMP=$(AS)
$1_$2_DEP_FLAG:=
else ifneq (,$$(filter %.cpp,$2)$$(filter %.cc,$2)$$(filter %.mm,$2))
# Compile as a C++ or Objective-C++ file
- $1_$2_FLAGS=$(CFLAGS_CCACHE) $6 $$($1_$(notdir $2)_CXXFLAGS) -DTHIS_FILE='"$$(<F)"' -c
+ $1_$2_FLAGS=$(CFLAGS_CCACHE) $6 $$($1_$(notdir $2)_CXXFLAGS) $$($1_$2_THIS_FILE) -c
$1_$2_COMP=$7
$1_$2_DEP_FLAG:=$(CXX_FLAG_DEPS)
else
@@ -304,8 +309,11 @@
# EXTRA_OBJECT_FILES List of extra object files to include when linking
# VERSIONINFO_RESOURCE Input file for RC. Setting this implies that RC will be run
# RC_FLAGS flags for RC.
+# EMBED_MANIFEST if true, embed manifest on Windows.
# MAPFILE mapfile
# REORDER reorder file
+# USE_MAPFILE_FOR_SYMBOLS if true and this is a STATIC_BUILD, just copy the
+# mapfile for the output symbols file
# CC the compiler to use, default is $(CC)
# LD the linker to use, default is $(LD)
# OPTIMIZATION sets optimization level to NONE, LOW, HIGH, HIGHEST
@@ -643,8 +651,9 @@
$$($1_RES): $$($1_VERSIONINFO_RESOURCE) $$($1_RES_VARDEPS_FILE)
$$(call LogInfo, Compiling resource $$(notdir $$($1_VERSIONINFO_RESOURCE)) (for $$(notdir $$($1_TARGET))))
- $$($1_RC) $$($1_RC_FLAGS) $$($1_SYSROOT_CFLAGS) $(CC_OUT_OPTION)$$@ \
- $$($1_VERSIONINFO_RESOURCE)
+ $$(call ExecuteWithLog, $$@, \
+ $$($1_RC) $$($1_RC_FLAGS) $$($1_SYSROOT_CFLAGS) $(CC_OUT_OPTION)$$@ \
+ $$($1_VERSIONINFO_RESOURCE))
# Windows RC compiler does not support -showIncludes, so we mis-use CL for this.
$$($1_CC) $$($1_RC_FLAGS) $$($1_SYSROOT_CFLAGS) -showIncludes -nologo -TC \
$(CC_OUT_OPTION)$$($1_RES_DEP).obj $$($1_VERSIONINFO_RESOURCE) > $$($1_RES_DEP).raw 2>&1 || true ; \
@@ -654,12 +663,11 @@
endif
endif
- # mapfile doesnt seem to be implemented on macosx (yet??)
- ifneq ($(OPENJDK_TARGET_OS),macosx)
+ ifneq ($(DISABLE_MAPFILES),true)
+ $1_REAL_MAPFILE := $$($1_MAPFILE)
ifneq ($(OPENJDK_TARGET_OS),windows)
- $1_REAL_MAPFILE:=$$($1_MAPFILE)
ifneq (,$$($1_REORDER))
- $1_REAL_MAPFILE:=$$($1_OBJECT_DIR)/mapfile
+ $1_REAL_MAPFILE := $$($1_OBJECT_DIR)/mapfile
$$($1_REAL_MAPFILE) : $$($1_MAPFILE) $$($1_REORDER)
$$(MKDIR) -p $$(@D)
@@ -689,7 +697,8 @@
# The dependency on TARGET is needed on windows for debuginfo files
# to be rebuilt properly.
$$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/% $$($1_TARGET)
- $(CP) $$< $$@
+ # Use cp -r since on macosx, the dSYM is a directory
+ $(CP) -r $$< $$@
endif
# Generate debuginfo files.
@@ -815,13 +824,23 @@
$$($1_OBJECT_DIR)/$$($1_NOSUFFIX).vardeps)
# Generating a static library, ie object file archive.
- $$($1_TARGET): $$($1_ALL_OBJS) $$($1_RES) $$($1_VARDEPS_FILE)
+ ifeq ($(STATIC_BUILD), true)
+ ifeq ($$($1_USE_MAPFILE_FOR_SYMBOLS), true)
+ STATIC_MAPFILE_DEP := $$($1_MAPFILE)
+ endif
+ endif
+
+ $$($1_TARGET): $$($1_ALL_OBJS) $$($1_RES) $$($1_VARDEPS_FILE) $$(STATIC_MAPFILE_DEP)
$$(call LogInfo, Archiving $$($1_STATIC_LIBRARY))
$$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \
$$($1_AR) $$($1_ARFLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_ALL_OBJS) \
$$($1_RES))
ifeq ($(STATIC_BUILD), true)
- $(GetSymbols)
+ ifeq ($$($1_USE_MAPFILE_FOR_SYMBOLS), true)
+ $(CP) $$($1_MAPFILE) $$(@D)/$$(basename $$(@F)).symbols
+ else
+ $(GetSymbols)
+ endif
endif
endif
@@ -836,6 +855,12 @@
$1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \
$$($1_OBJECT_DIR)/$$($1_NOSUFFIX).vardeps)
+ ifeq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($$($1_EMBED_MANIFEST), true)
+ $1_EXTRA_LDFLAGS += -manifest:embed
+ endif
+ endif
+
$$($1_TARGET): $$($1_ALL_OBJS) $$($1_RES) $$($1_MANIFEST) \
$$($1_VARDEPS_FILE)
$$(call LogInfo, Linking executable $$($1_BASENAME))
--- a/make/jprt.properties Thu Feb 11 13:58:43 2016 -0800
+++ b/make/jprt.properties Mon Feb 15 09:44:42 2016 -0800
@@ -42,13 +42,63 @@
# Use configure when building
jprt.build.use.configure=true
+jprt.build.use.jib=true
+jprt.test.use.jib=true
+jprt.jib.launcher=common/bin/jib.sh
-# Disable the need for preinstalled Xcode
+# Clear out all the build needs as JIB handles this
+jprt.jdk9.build.needs=
+jprt.macosx.jdk9.build.needs=
+jprt.windows_i586.jdk9.build.needs=
+jprt.windows_x64.jdk9.build.needs=
+jprt.solaris.jdk9.build.needs=
+jprt.linux_i586.jdk9.build.needs=
+jprt.linux_x64.jdk9.build.needs=
+jprt.linux_armv6.jdk9.build.needs=
+jprt.linux_armvh.jdk9.build.needs=
+jprt.linux_arm64.jdk9.build.needs=
+jprt.linux_armsflt.jdk9.build.needs=
+jprt.linux_armvfpsflt.jdk9.build.needs=
+jprt.linux_armvfphflt.jdk9.build.needs=
+jprt.linux_armv6vfphflt.jdk9.build.needs=
+jprt.solaris.client.build.needs=
+jprt.linux.client.build.needs=
+jprt.solaris.jdk9.compiler=
+jprt.linux.jdk9.compiler=
+jprt.jdk9.test.needs=
+
+# Disable the need for preinstalled Visual Studio and Xcode
+jprt.windows.jdk9.compiler=
+jprt.windows.6.2.jdk9.compiler=
+jprt.windows.6.3.jdk9.compiler=
+jprt.windows.jdk9.target.attribute.compilerVS2013.appliesTo.builds=none
jprt.macosx.jdk9.target.attribute.compilerXcode511.appliesTo.builds=none
# Set up the run flavors (jvm variants)
jprt.run.flavors=c1,c2,default,${my.additional.run.flavors}
+# Setup jib profiles
+jprt.linux_i586.product.build.jib.profile=linux-x86
+jprt.linux_x64.build.jib.profile=linux-x64
+jprt.macosx_x64.build.jib.profile=macosx-x64
+jprt.solaris_sparcv9.build.jib.profile=solaris-sparcv9
+jprt.solaris_x64.build.jib.profile=solaris-x64
+jprt.windows_i586.build.jib.profile=windows-x86
+jprt.windows_x64.build.jib.profile=windows-x64
+
+jprt.linux_i586.fastdebug.build.jib.profile=linux-x86-debug
+jprt.linux_x64.fastdebug.build.jib.profile=linux-x64-debug
+jprt.macosx_x64.fastdebug.build.jib.profile=macosx-x64-debug
+jprt.solaris_sparcv9.fastdebug.build.jib.profile=solaris-sparcv9-debug
+jprt.solaris_x64.fastdebug.build.jib.profile=solaris-x64-debug
+jprt.windows_i586.fastdebug.build.jib.profile=windows-x86-debug
+jprt.windows_x64.fastdebug.build.jib.profile=windows-x64-debug
+
+jprt.solaris_x64.debugOpen.build.jib.profile=solaris-x64-open-debug
+jprt.linux_x64.productOpen.build.jib.profile=linux-x64-open
+
+jprt.test.jib.profile=run-test
+
# Set make target to use for different build flavors
jprt.build.flavor.debugOpen.target=jprt_bundle
jprt.build.flavor.fastdebug.target=jprt_bundle
@@ -58,14 +108,14 @@
jprt.build.flavor.optimizedOpen.target=jprt_bundle
# Use these configure args to define debug level
-jprt.debug.build.configure.args=--with-debug-level=slowdebug
-jprt.fastdebug.build.configure.args=--with-debug-level=fastdebug --disable-precompiled-headers
-jprt.product.build.configure.args=--with-debug-level=release
+jprt.debug.build.configure.args=
+jprt.fastdebug.build.configure.args=--disable-precompiled-headers
+jprt.product.build.configure.args=
jprt.optimized.build.configure.args=--with-debug-level=optimized
-jprt.debugOpen.build.configure.args=${jprt.debug.build.configure.args} --enable-openjdk-only
-jprt.fastdebugOpen.build.configure.args=${jprt.fastdebug.build.configure.args} --enable-openjdk-only
-jprt.productOpen.build.configure.args=${jprt.product.build.configure.args} --enable-openjdk-only
-jprt.optimizedOpen.build.configure.args=${jprt.product.build.configure.args} --enable-openjdk-only
+jprt.debugOpen.build.configure.args=${jprt.debug.build.configure.args}
+jprt.fastdebugOpen.build.configure.args=${jprt.fastdebug.build.configure.args}
+jprt.productOpen.build.configure.args=${jprt.product.build.configure.args}
+jprt.optimizedOpen.build.configure.args=${jprt.product.build.configure.args}
# hotspot testset has custom build flavors and build targets
@@ -100,54 +150,11 @@
# Also allows for additional, testset specific configure arguments to be set
jprt.build.configure.args= \
--with-output-sync=recurse \
- --with-boot-jdk=$ALT_BOOTDIR \
--with-jobs=$ALT_PARALLEL_COMPILE_JOBS \
- --with-version-opt=$JPRT_JOB_ID \
- MAKE=$JPRT_MAKE \
+ --with-version-opt=$JPRT_JOB_ID \
${my.additional.build.configure.args.${jprt.test.set}} \
${my.custom.build.configure.args}
-# i586 is often cross-compiled from 64-bit machines, so need to set target bits explicitly
-jprt.i586.build.configure.args= \
- --with-target-bits=32
-
-# i586 platforms have both client and server, but to allow for overriding the exact configuration
-# on a per-build flavor basis the value is set for the individual build flavors
-my.i586.default.build.configure.args= \
- --with-jvm-variants=client,server
-jprt.i586.debug.build.configure.args= \
- ${my.i586.default.build.configure.args} \
- ${jprt.debug.build.configure.args}
-jprt.i586.fastdebug.build.configure.args= \
- ${my.i586.default.build.configure.args} \
- ${jprt.fastdebug.build.configure.args}
-jprt.i586.product.build.configure.args= \
- ${my.i586.default.build.configure.args} \
- ${jprt.product.build.configure.args}
-jprt.i586.debugOpen.build.configure.args= \
- ${my.i586.default.build.configure.args} \
- ${jprt.debugOpen.build.configure.args}
-jprt.i586.fastdebugOpen.build.configure.args= \
- ${my.i586.default.build.configure.args} \
- ${jprt.fastdebugOpen.build.configure.args}
-jprt.i586.productOpen.build.configure.args= \
- ${my.i586.default.build.configure.args} \
- ${jprt.productOpen.build.configure.args}
-jprt.linux_i586.build.configure.args= \
- --with-devkit=$GCC492_OEL64_HOME \
- ${jprt.i586.build.configure.args}
-jprt.linux_x64.build.configure.args= \
- --with-devkit=$GCC492_OEL64_HOME
-jprt.macosx_x64.build.configure.args= \
- --with-devkit=$XCODE63_MACOSX109_HOME
-jprt.solaris.build.configure.args= \
- --with-devkit=$SS124_11u1_HOME
-jprt.windows_i586.build.configure.args= \
- --with-devkit=$VS2013SP4_HOME \
- ${jprt.i586.build.configure.args}
-jprt.windows_x64.build.configure.args= \
- --with-devkit=$VS2013SP4_HOME
-
########
#
# Build targets and options (default/jdk)
--- a/modules.xml Thu Feb 11 13:58:43 2016 -0800
+++ b/modules.xml Mon Feb 15 09:44:42 2016 -0800
@@ -297,7 +297,6 @@
<to>java.security.jgss</to>
<to>java.security.sasl</to>
<to>java.xml</to>
- <to>java.xml.ws</to>
<to>jdk.charsets</to>
<to>jdk.crypto.pkcs11</to>
<to>jdk.deploy.osx</to>
--- a/nashorn/.hgignore Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/.hgignore Mon Feb 15 09:44:42 2016 -0800
@@ -23,8 +23,7 @@
CC/*
jcov2/*
.idea/*
-test/lib/testng*.zip
-test/lib/testng.jar
+test/lib/*.jar
test/script/external/*
.project
.externalToolBuilders/*
--- a/nashorn/.hgtags Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/.hgtags Mon Feb 15 09:44:42 2016 -0800
@@ -338,3 +338,4 @@
e5620875888583d35e9492b62fe27e054df26049 jdk-9+102
c9406f325a23e9093fa667ad3c594e2efe078f47 jdk-9+103
a618d3e89fdea5361895ef142a59074fe7ae3d98 jdk-9+104
+4e9749cc32f15251d9b2d0eab4373529952902a3 jdk-9+105
--- a/nashorn/make/build.xml Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/make/build.xml Mon Feb 15 09:44:42 2016 -0800
@@ -48,10 +48,16 @@
<condition property="git.executable" value="/usr/local/bin/git" else="git">
<available file="/usr/local/bin/git"/>
</condition>
- <!-- check if testng.jar is available, and download it if it isn't -->
- <available property="testng.already.present" file="${file.reference.testng.jar}"/>
+ <!-- check if TestNG and dependencies are available, and download them if they aren't -->
<antcall target="get-testng"/>
- <available property="testng.available" file="${file.reference.testng.jar}"/>
+ <condition property="testng.available" value="true">
+ <and>
+ <available file="${file.reference.testng.jar}"/>
+ <available file="${file.reference.jcommander.jar}"/>
+ <available file="${file.reference.bsh.jar}"/>
+ <available file="${file.reference.snakeyaml.jar}"/>
+ </and>
+ </condition>
<!-- check if asmtools-6.0.jar is available, and download it if it isn't -->
<!--
@@ -60,7 +66,7 @@
<available property="asmtools.available" file="${file.reference.asmtools.jar}"/>
-->
- <!-- check if Jemmy ang testng.jar are avaiable -->
+ <!-- check if Jemmy ang TestNG are avaiable -->
<condition property="jemmy.jfx.testng.available" value="true">
<and>
<available file="${file.reference.jemmyfx.jar}"/>
@@ -314,7 +320,7 @@
<target name="compile-test" depends="compile, run-nasgen" if="testng.available">
<!-- testng task -->
<taskdef name="testng" classname="org.testng.TestNGAntTask"
- classpath="${file.reference.testng.jar}"/>
+ classpath="${testng.ant.classpath}"/>
<javac srcdir="${test.src.dir}"
destdir="${build.test.classes.dir}"
@@ -389,6 +395,15 @@
grant codeBase "file:/${basedir}/${file.reference.testng.jar}" {
permission java.security.AllPermission;
};
+grant codeBase "file:/${basedir}/${file.reference.jcommander.jar}" {
+ permission java.security.AllPermission;
+};
+grant codeBase "file:/${basedir}/${file.reference.bsh.jar}" {
+ permission java.security.AllPermission;
+};
+grant codeBase "file:/${basedir}/${file.reference.snakeyaml.jar}" {
+ permission java.security.AllPermission;
+};
//// in case of absolute path:
grant codeBase "file:/${nashorn.internal.tests.jar}" {
permission java.security.AllPermission;
@@ -397,6 +412,16 @@
grant codeBase "file:/${file.reference.testng.jar}" {
permission java.security.AllPermission;
};
+grant codeBase "file:/${file.reference.jcommander.jar}" {
+ permission java.security.AllPermission;
+};
+grant codeBase "file:/${file.reference.bsh.jar}" {
+ permission java.security.AllPermission;
+};
+grant codeBase "file:/${file.reference.snakeyaml.jar}" {
+ permission java.security.AllPermission;
+};
+
grant codeBase "file:/${basedir}/test/script/trusted/*" {
permission java.security.AllPermission;
@@ -466,7 +491,7 @@
</target>
<target name="check-testng" unless="testng.available">
- <echo message="WARNING: TestNG not available, will not run tests. Please copy testng.jar under ${test.lib} directory."/>
+ <echo message="WARNING: TestNG not available, will not run tests. Please copy TestNG and dependency JARs to the ${test.lib} directory."/>
</target>
<!-- only to be invoked as dependency of "test" target -->
@@ -569,7 +594,7 @@
</target>
<target name="check-jemmy.jfx.testng" unless="jemmy.jfx.testng.available">
- <echo message="WARNING: Jemmy or JavaFX or TestNG not available, will not run tests. Please copy testng.jar, JemmyCore.jar, JemmyFX.jar, JemmyAWTInput.jar under test${file.separator}lib directory. And make sure you have jfxrt.jar in ${java.home}${file.separator}lib${file.separator}ext dir."/>
+ <echo message="WARNING: Jemmy or JavaFX or TestNG not available, will not run tests. Please copy TestNG and dependency JARs, JemmyCore.jar, JemmyFX.jar, JemmyAWTInput.jar to the test${file.separator}lib directory. And make sure you have jfxrt.jar in ${java.home}${file.separator}lib${file.separator}ext dir."/>
</target>
<target name="testjfx" depends="jar, check-jemmy.jfx.testng, compile-test" if="jemmy.jfx.testng.available">
@@ -804,15 +829,13 @@
<target name="perf" depends="externals, update-externals, sunspider, octane"/>
<!-- download and install testng.jar -->
- <target name="get-testng" unless="testng.already.present">
- <get src="http://testng.org/testng-6.8.zip" dest="${test.lib}" skipexisting="true" ignoreerrors="true"/>
- <unzip src="${test.lib}${file.separator}testng-6.8.zip" dest="${test.lib}">
- <patternset>
- <include name="testng-6.8/testng-6.8.jar"/>
- </patternset>
- </unzip>
- <move file="${test.lib}${file.separator}testng-6.8${file.separator}testng-6.8.jar" tofile="${test.lib}${file.separator}testng.jar"/>
- <delete dir="${test.lib}${file.separator}testng-6.8"/>
+ <target name="get-testng">
+ <get dest="${test.lib}" skipexisting="true">
+ <url url="http://central.maven.org/maven2/org/testng/testng/6.8/testng-6.8.jar"/>
+ <url url="http://central.maven.org/maven2/com/beust/jcommander/1.27/jcommander-1.27.jar"/>
+ <url url="http://central.maven.org/maven2/org/beanshell/bsh/2.0b4/bsh-2.0b4.jar"/>
+ <url url="http://central.maven.org/maven2/org/yaml/snakeyaml/1.6/snakeyaml-1.6.jar"/>
+ </get>
</target>
<!-- download and install asmtools.jar -->
--- a/nashorn/make/project.properties Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/make/project.properties Mon Feb 15 09:44:42 2016 -0800
@@ -84,9 +84,19 @@
test.lib=${basedir}${file.separator}test${file.separator}lib
# jars refererred
-file.reference.testng.jar=${test.lib}${file.separator}testng.jar
+file.reference.testng.jar=${test.lib}${file.separator}testng-6.8.jar
+file.reference.jcommander.jar=${test.lib}${file.separator}jcommander-1.27.jar
+file.reference.bsh.jar=${test.lib}${file.separator}bsh-2.0b4.jar
+file.reference.snakeyaml.jar=${test.lib}${file.separator}snakeyaml-1.6.jar
file.reference.asmtools.jar=${test.lib}${file.separator}asmtools-60.jar
+# TestNG ant task classpath
+testng.ant.classpath=\
+ ${file.reference.testng.jar}${path.separator}\
+ ${file.reference.jcommander.jar}${path.separator}\
+ ${file.reference.bsh.jar}${path.separator}\
+ ${file.reference.snakeyaml.jar}${path.separator}
+
# Set testng verbose level
# From TestNG docs: "the verbosity level (0 to 10 where 10 is most detailed)
# Actually, this is a lie: you can specify -1 and this will put TestNG in
@@ -114,7 +124,10 @@
javac.test.classpath=\
${build.classes.dir}${path.separator}\
${build.test.classes.dir}${path.separator}\
- ${file.reference.testng.jar}
+ ${file.reference.testng.jar}${path.separator}\
+ ${file.reference.jcommander.jar}${path.separator}\
+ ${file.reference.bsh.jar}${path.separator}\
+ ${file.reference.snakeyaml.jar}
meta.inf.dir=${nashorn.module.src.dir}/META-INF
@@ -265,6 +278,9 @@
${file.reference.jemmycore.jar}${path.separator}\
${file.reference.jemmyawtinput.jar}${path.separator}\
${file.reference.testng.jar}${path.separator}\
+ ${file.reference.jcommander.jar}${path.separator}\
+ ${file.reference.bsh.jar}${path.separator}\
+ ${file.reference.snakeyaml.jar}${path.separator}\
${nashorn.internal.tests.jar}${path.separator}\
${nashorn.api.tests.jar}
@@ -273,6 +289,9 @@
run.test.classpath=\
${file.reference.testng.jar}${path.separator}\
+ ${file.reference.jcommander.jar}${path.separator}\
+ ${file.reference.bsh.jar}${path.separator}\
+ ${file.reference.snakeyaml.jar}${path.separator}\
${nashorn.internal.tests.jar}${path.separator}\
${nashorn.api.tests.jar}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/BooleanType.java Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/BooleanType.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2013, 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
@@ -134,8 +134,11 @@
@Override
public Type add(final MethodVisitor method, final int programPoint) {
// Adding booleans in JavaScript is perfectly valid, they add as if false=0 and true=1
- assert programPoint == INVALID_PROGRAM_POINT;
- method.visitInsn(IADD);
+ if(programPoint == INVALID_PROGRAM_POINT) {
+ method.visitInsn(IADD);
+ } else {
+ method.visitInvokeDynamicInsn("iadd", "(II)I", MATHBOOTSTRAP, programPoint);
+ }
return INT;
}
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/IntType.java Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/IntType.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2013, 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
@@ -155,8 +155,7 @@
if(programPoint == INVALID_PROGRAM_POINT) {
method.visitInsn(IADD);
} else {
- ldc(method, programPoint);
- JSType.ADD_EXACT.invoke(method);
+ method.visitInvokeDynamicInsn("iadd", "(II)I", MATHBOOTSTRAP, programPoint);
}
return INT;
}
@@ -215,8 +214,7 @@
if(programPoint == INVALID_PROGRAM_POINT) {
method.visitInsn(ISUB);
} else {
- ldc(method, programPoint);
- JSType.SUB_EXACT.invoke(method);
+ method.visitInvokeDynamicInsn("isub", "(II)I", MATHBOOTSTRAP, programPoint);
}
return INT;
}
@@ -226,8 +224,7 @@
if(programPoint == INVALID_PROGRAM_POINT) {
method.visitInsn(IMUL);
} else {
- ldc(method, programPoint);
- JSType.MUL_EXACT.invoke(method);
+ method.visitInvokeDynamicInsn("imul", "(II)I", MATHBOOTSTRAP, programPoint);
}
return INT;
}
@@ -237,8 +234,7 @@
if (programPoint == INVALID_PROGRAM_POINT) {
JSType.DIV_ZERO.invoke(method);
} else {
- ldc(method, programPoint);
- JSType.DIV_EXACT.invoke(method);
+ method.visitInvokeDynamicInsn("idiv", "(II)I", MATHBOOTSTRAP, programPoint);
}
return INT;
}
@@ -248,8 +244,7 @@
if (programPoint == INVALID_PROGRAM_POINT) {
JSType.REM_ZERO.invoke(method);
} else {
- ldc(method, programPoint);
- JSType.REM_EXACT.invoke(method);
+ method.visitInvokeDynamicInsn("irem", "(II)I", MATHBOOTSTRAP, programPoint);
}
return INT;
}
@@ -259,8 +254,7 @@
if(programPoint == INVALID_PROGRAM_POINT) {
method.visitInsn(INEG);
} else {
- ldc(method, programPoint);
- JSType.NEGATE_EXACT.invoke(method);
+ method.visitInvokeDynamicInsn("ineg", "(I)I", MATHBOOTSTRAP, programPoint);
}
return INT;
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/LongType.java Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/LongType.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2013, 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
@@ -27,6 +27,7 @@
import static jdk.internal.org.objectweb.asm.Opcodes.L2D;
import static jdk.internal.org.objectweb.asm.Opcodes.L2I;
+import static jdk.internal.org.objectweb.asm.Opcodes.LADD;
import static jdk.internal.org.objectweb.asm.Opcodes.LCONST_0;
import static jdk.internal.org.objectweb.asm.Opcodes.LCONST_1;
import static jdk.internal.org.objectweb.asm.Opcodes.LLOAD;
@@ -34,6 +35,7 @@
import static jdk.internal.org.objectweb.asm.Opcodes.LSTORE;
import static jdk.nashorn.internal.codegen.CompilerConstants.staticCallNoLookup;
import static jdk.nashorn.internal.runtime.JSType.UNDEFINED_LONG;
+import static jdk.nashorn.internal.runtime.UnwarrantedOptimismException.INVALID_PROGRAM_POINT;
import jdk.internal.org.objectweb.asm.MethodVisitor;
import jdk.nashorn.internal.codegen.CompilerConstants;
@@ -123,7 +125,12 @@
@Override
public Type add(final MethodVisitor method, final int programPoint) {
- throw new UnsupportedOperationException("add");
+ if(programPoint == INVALID_PROGRAM_POINT) {
+ method.visitInsn(LADD);
+ } else {
+ method.visitInvokeDynamicInsn("ladd", "(JJ)J", MATHBOOTSTRAP, programPoint);
+ }
+ return LONG;
}
@Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/Type.java Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/Type.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2013, 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
@@ -33,6 +33,7 @@
import static jdk.internal.org.objectweb.asm.Opcodes.DUP2_X2;
import static jdk.internal.org.objectweb.asm.Opcodes.DUP_X1;
import static jdk.internal.org.objectweb.asm.Opcodes.DUP_X2;
+import static jdk.internal.org.objectweb.asm.Opcodes.H_INVOKESTATIC;
import static jdk.internal.org.objectweb.asm.Opcodes.IALOAD;
import static jdk.internal.org.objectweb.asm.Opcodes.IASTORE;
import static jdk.internal.org.objectweb.asm.Opcodes.INVOKESTATIC;
@@ -45,22 +46,28 @@
import static jdk.internal.org.objectweb.asm.Opcodes.T_DOUBLE;
import static jdk.internal.org.objectweb.asm.Opcodes.T_INT;
import static jdk.internal.org.objectweb.asm.Opcodes.T_LONG;
+import static jdk.nashorn.internal.codegen.CompilerConstants.staticCallNoLookup;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.io.Serializable;
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
import java.util.Collections;
import java.util.Map;
import java.util.TreeMap;
import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import jdk.internal.org.objectweb.asm.Handle;
import jdk.internal.org.objectweb.asm.MethodVisitor;
import jdk.nashorn.internal.codegen.CompilerConstants.Call;
import jdk.nashorn.internal.runtime.Context;
import jdk.nashorn.internal.runtime.ScriptObject;
import jdk.nashorn.internal.runtime.Undefined;
+import jdk.nashorn.internal.runtime.linker.Bootstrap;
/**
* This is the representation of a JavaScript type, disassociated from java
@@ -117,6 +124,10 @@
/** Set way below Integer.MAX_VALUE to prevent overflow when adding weights. Objects are still heaviest. */
protected static final int MAX_WEIGHT = 20;
+ static final Call BOOTSTRAP = staticCallNoLookup(Bootstrap.class, "mathBootstrap", CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class, int.class);
+
+ static final Handle MATHBOOTSTRAP = new Handle(H_INVOKESTATIC, BOOTSTRAP.className(), "mathBootstrap", BOOTSTRAP.descriptor());
+
/**
* Constructor
*
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/Global.java Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/Global.java Mon Feb 15 09:44:42 2016 -0800
@@ -2459,8 +2459,6 @@
final String execName = ScriptingFunctions.EXEC_NAME;
value = ScriptFunction.createBuiltin(execName, ScriptingFunctions.EXEC);
- value.addOwnProperty(ScriptingFunctions.THROW_ON_ERROR_NAME, Attribute.NOT_ENUMERABLE, false);
-
addOwnProperty(execName, Attribute.NOT_ENUMERABLE, value);
// Nashorn extension: global.echo (scripting-mode-only)
@@ -2474,10 +2472,10 @@
addOwnProperty("$OPTIONS", Attribute.NOT_ENUMERABLE, options);
// Nashorn extension: global.$ENV (scripting-mode-only)
+ final ScriptObject env = newObject();
if (System.getSecurityManager() == null) {
// do not fill $ENV if we have a security manager around
// Retrieve current state of ENV variables.
- final ScriptObject env = newObject();
env.putAll(System.getenv(), scriptEnv._strict);
// Some platforms, e.g., Windows, do not define the PWD environment
@@ -2486,11 +2484,8 @@
if (!env.containsKey(ScriptingFunctions.PWD_NAME)) {
env.put(ScriptingFunctions.PWD_NAME, System.getProperty("user.dir"), scriptEnv._strict);
}
-
- addOwnProperty(ScriptingFunctions.ENV_NAME, Attribute.NOT_ENUMERABLE, env);
- } else {
- addOwnProperty(ScriptingFunctions.ENV_NAME, Attribute.NOT_ENUMERABLE, UNDEFINED);
}
+ addOwnProperty(ScriptingFunctions.ENV_NAME, Attribute.NOT_ENUMERABLE, env);
// add other special properties for exec support
addOwnProperty(ScriptingFunctions.OUT_NAME, Attribute.NOT_ENUMERABLE, UNDEFINED);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/CommandExecutor.java Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,844 @@
+/*
+ * 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 jdk.nashorn.internal.runtime;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.StreamTokenizer;
+import java.io.StringReader;
+import java.lang.ProcessBuilder.Redirect;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import static jdk.nashorn.internal.runtime.CommandExecutor.RedirectType.*;
+import static jdk.nashorn.internal.runtime.ECMAErrors.rangeError;
+
+/**
+ * The CommandExecutor class provides support for Nashorn's $EXEC
+ * builtin function. CommandExecutor provides support for command parsing,
+ * I/O redirection, piping, completion timeouts, # comments, and simple
+ * environment variable management (cd, setenv, and unsetenv).
+ */
+class CommandExecutor {
+ // Size of byte buffers used for piping.
+ private static final int BUFFER_SIZE = 1024;
+
+ // Test to see if running on Windows.
+ private static final boolean IS_WINDOWS =
+ AccessController.doPrivileged((PrivilegedAction<Boolean>)() -> {
+ return System.getProperty("os.name").contains("Windows");
+ });
+
+ // User's home directory
+ private static final String HOME_DIRECTORY =
+ AccessController.doPrivileged((PrivilegedAction<String>)() -> {
+ return System.getProperty("user.home");
+ });
+
+ // Various types of standard redirects.
+ enum RedirectType {
+ NO_REDIRECT,
+ REDIRECT_INPUT,
+ REDIRECT_OUTPUT,
+ REDIRECT_OUTPUT_APPEND,
+ REDIRECT_ERROR,
+ REDIRECT_ERROR_APPEND,
+ REDIRECT_OUTPUT_ERROR_APPEND,
+ REDIRECT_ERROR_TO_OUTPUT
+ };
+
+ // Prefix strings to standard redirects.
+ private static final String[] redirectPrefixes = new String[] {
+ "<",
+ "0<",
+ ">",
+ "1>",
+ ">>",
+ "1>>",
+ "2>",
+ "2>>",
+ "&>",
+ "2>&1"
+ };
+
+ // Map from redirectPrefixes to RedirectType.
+ private static final RedirectType[] redirects = new RedirectType[] {
+ REDIRECT_INPUT,
+ REDIRECT_INPUT,
+ REDIRECT_OUTPUT,
+ REDIRECT_OUTPUT,
+ REDIRECT_OUTPUT_APPEND,
+ REDIRECT_OUTPUT_APPEND,
+ REDIRECT_ERROR,
+ REDIRECT_ERROR_APPEND,
+ REDIRECT_OUTPUT_ERROR_APPEND,
+ REDIRECT_ERROR_TO_OUTPUT
+ };
+
+ /**
+ * The RedirectInfo class handles checking the next token in a command
+ * to see if it contains a redirect. If the redirect file does not butt
+ * against the prefix, then the next token is consumed.
+ */
+ private static class RedirectInfo {
+ // true if a redirect was encountered on the current command.
+ private boolean hasRedirects;
+ // Redirect.PIPE or an input redirect from the command line.
+ private Redirect inputRedirect;
+ // Redirect.PIPE or an output redirect from the command line.
+ private Redirect outputRedirect;
+ // Redirect.PIPE or an error redirect from the command line.
+ private Redirect errorRedirect;
+ // true if the error stream should be merged with output.
+ private boolean mergeError;
+
+ RedirectInfo() {
+ this.hasRedirects = false;
+ this.inputRedirect = Redirect.PIPE;
+ this.outputRedirect = Redirect.PIPE;
+ this.errorRedirect = Redirect.PIPE;
+ this.mergeError = false;
+ }
+
+ /**
+ * check - tests to see if the current token contains a redirect
+ * @param token current command line token
+ * @param iterator current command line iterator
+ * @param cwd current working directory
+ * @return true if token is consumed
+ */
+ boolean check(String token, final Iterator<String> iterator, final String cwd) {
+ // Iterate through redirect prefixes to file a match.
+ for (int i = 0; i < redirectPrefixes.length; i++) {
+ String prefix = redirectPrefixes[i];
+
+ // If a match is found.
+ if (token.startsWith(prefix)) {
+ // Indicate we have at least one redirect (efficiency.)
+ hasRedirects = true;
+ // Map prefix to RedirectType.
+ RedirectType redirect = redirects[i];
+ // Strip prefix from token
+ token = token.substring(prefix.length());
+
+ // Get file from either current or next token.
+ File file = null;
+ if (redirect != REDIRECT_ERROR_TO_OUTPUT) {
+ // Nothing left of current token.
+ if (token.length() == 0) {
+ if (iterator.hasNext()) {
+ // Use next token.
+ token = iterator.next();
+ } else {
+ // Send to null device if not provided.
+ token = IS_WINDOWS ? "NUL:" : "/dev/null";
+ }
+ }
+
+ // Redirect file.
+ file = resolvePath(cwd, token).toFile();
+ }
+
+ // Define redirect based on prefix.
+ switch (redirect) {
+ case REDIRECT_INPUT:
+ inputRedirect = Redirect.from(file);
+ break;
+ case REDIRECT_OUTPUT:
+ outputRedirect = Redirect.to(file);
+ break;
+ case REDIRECT_OUTPUT_APPEND:
+ outputRedirect = Redirect.appendTo(file);
+ break;
+ case REDIRECT_ERROR:
+ errorRedirect = Redirect.to(file);
+ break;
+ case REDIRECT_ERROR_APPEND:
+ errorRedirect = Redirect.appendTo(file);
+ break;
+ case REDIRECT_OUTPUT_ERROR_APPEND:
+ outputRedirect = Redirect.to(file);
+ errorRedirect = Redirect.to(file);
+ mergeError = true;
+ break;
+ case REDIRECT_ERROR_TO_OUTPUT:
+ mergeError = true;
+ break;
+ default:
+ return false;
+ }
+
+ // Indicate token is consumed.
+ return true;
+ }
+ }
+
+ // No redirect found.
+ return false;
+ }
+
+ /**
+ * apply - apply the redirects to the current ProcessBuilder.
+ * @param pb current ProcessBuilder
+ */
+ void apply(final ProcessBuilder pb) {
+ // Only if there was redirects (saves new structure in ProcessBuilder.)
+ if (hasRedirects) {
+ // If output and error are the same file then merge.
+ File outputFile = outputRedirect.file();
+ File errorFile = errorRedirect.file();
+
+ if (outputFile != null && outputFile.equals(errorFile)) {
+ mergeError = true;
+ }
+
+ // Apply redirects.
+ pb.redirectInput(inputRedirect);
+ pb.redirectOutput(outputRedirect);
+ pb.redirectError(errorRedirect);
+ pb.redirectErrorStream(mergeError);
+ }
+ }
+ }
+
+ /**
+ * The Piper class is responsible for copying from an InputStream to an
+ * OutputStream without blocking the current thread.
+ */
+ private static class Piper implements java.lang.Runnable {
+ // Stream to copy from.
+ private final InputStream input;
+ // Stream to copy to.
+ private final OutputStream output;
+
+ Piper(final InputStream input, final OutputStream output) {
+ this.input = input;
+ this.output = output;
+ }
+
+ /**
+ * start - start the Piper in a new daemon thread
+ */
+ void start() {
+ Thread thread = new Thread(this, "$EXEC Piper");
+ thread.setDaemon(true);
+ thread.start();
+ }
+
+ /**
+ * run - thread action
+ */
+ @Override
+ public void run() {
+ try {
+ // Buffer for copying.
+ byte[] b = new byte[BUFFER_SIZE];
+ // Read from the InputStream until EOF.
+ int read;
+ while (-1 < (read = input.read(b, 0, b.length))) {
+ // Write available date to OutputStream.
+ output.write(b, 0, read);
+ }
+ } catch (Exception e) {
+ // Assume the worst.
+ throw new RuntimeException("Broken pipe", e);
+ } finally {
+ // Make sure the streams are closed.
+ try {
+ input.close();
+ } catch (IOException e) {
+ // Don't care.
+ }
+ try {
+ output.close();
+ } catch (IOException e) {
+ // Don't care.
+ }
+ }
+ }
+
+ // Exit thread.
+ }
+
+ // Process exit statuses.
+ static final int EXIT_SUCCESS = 0;
+ static final int EXIT_FAILURE = 1;
+
+ // Copy of environment variables used by all processes.
+ private Map<String, String> environment;
+ // Input string if provided on CommandExecutor call.
+ private String inputString;
+ // Output string if required from CommandExecutor call.
+ private String outputString;
+ // Error string if required from CommandExecutor call.
+ private String errorString;
+ // Last process exit code.
+ private int exitCode;
+
+ // Input stream if provided on CommandExecutor call.
+ private InputStream inputStream;
+ // Output stream if provided on CommandExecutor call.
+ private OutputStream outputStream;
+ // Error stream if provided on CommandExecutor call.
+ private OutputStream errorStream;
+
+ // Ordered collection of current or piped ProcessBuilders.
+ private List<ProcessBuilder> processBuilders = new ArrayList<>();
+
+ CommandExecutor() {
+ this.environment = new HashMap<>();
+ this.inputString = "";
+ this.outputString = "";
+ this.errorString = "";
+ this.exitCode = EXIT_SUCCESS;
+ this.inputStream = null;
+ this.outputStream = null;
+ this.errorStream = null;
+ this.processBuilders = new ArrayList<>();
+ }
+
+ /**
+ * envVarValue - return the value of the environment variable key, or
+ * deflt if not found.
+ * @param key name of environment variable
+ * @param deflt value to return if not found
+ * @return value of the environment variable
+ */
+ private String envVarValue(final String key, final String deflt) {
+ return environment.getOrDefault(key, deflt);
+ }
+
+ /**
+ * envVarLongValue - return the value of the environment variable key as a
+ * long value.
+ * @param key name of environment variable
+ * @return long value of the environment variable
+ */
+ private long envVarLongValue(final String key) {
+ try {
+ return Long.parseLong(envVarValue(key, "0"));
+ } catch (NumberFormatException ex) {
+ return 0L;
+ }
+ }
+
+ /**
+ * envVarBooleanValue - return the value of the environment variable key as a
+ * boolean value. true if the value was non-zero, false otherwise.
+ * @param key name of environment variable
+ * @return boolean value of the environment variable
+ */
+ private boolean envVarBooleanValue(final String key) {
+ return envVarLongValue(key) != 0;
+ }
+
+ /**
+ * stripQuotes - strip quotes from token if present. Quoted tokens kept
+ * quotes to prevent search for redirects.
+ * @param token token to strip
+ * @return stripped token
+ */
+ private static String stripQuotes(String token) {
+ if ((token.startsWith("\"") && token.endsWith("\"")) ||
+ token.startsWith("\'") && token.endsWith("\'")) {
+ token = token.substring(1, token.length() - 1);
+ }
+ return token;
+ }
+
+ /**
+ * resolvePath - resolves a path against a current working directory.
+ * @param cwd current working directory
+ * @param fileName name of file or directory
+ * @return resolved Path to file
+ */
+ private static Path resolvePath(final String cwd, final String fileName) {
+ return Paths.get(cwd).resolve(fileName).normalize();
+ }
+
+ /**
+ * builtIn - checks to see if the command is a builtin and performs
+ * appropriate action.
+ * @param cmd current command
+ * @param cwd current working directory
+ * @return true if was a builtin command
+ */
+ private boolean builtIn(final List<String> cmd, final String cwd) {
+ switch (cmd.get(0)) {
+ // Set current working directory.
+ case "cd":
+ // If zero args then use home dirrectory as cwd else use first arg.
+ final String newCWD = cmd.size() < 2 ? HOME_DIRECTORY : cmd.get(1);
+ // Normalize the cwd
+ final Path cwdPath = resolvePath(cwd, newCWD);
+
+ // Check if is a directory.
+ final File file = cwdPath.toFile();
+ if (!file.exists()) {
+ reportError("file.not.exist", file.toString());
+ return true;
+ } else if (!file.isDirectory()) {
+ reportError("not.directory", file.toString());
+ return true;
+ }
+
+ // Set PWD environment variable to be picked up as cwd.
+ environment.put("PWD", cwdPath.toString());
+ return true;
+
+ // Set an environment variable.
+ case "setenv":
+ if (3 <= cmd.size()) {
+ final String key = cmd.get(1);
+ final String value = cmd.get(2);
+ environment.put(key, value);
+ }
+
+ return true;
+
+ // Unset an environment variable.
+ case "unsetenv":
+ if (2 <= cmd.size()) {
+ final String key = cmd.get(1);
+ environment.remove(key);
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * preprocessCommand - scan the command for redirects
+ * @param tokens command tokens
+ * @param cwd current working directory
+ * @param redirectInfo redirection information
+ * @return tokens remaining for actual command
+ */
+ private List<String> preprocessCommand(final List<String> tokens,
+ final String cwd, final RedirectInfo redirectInfo) {
+ // Tokens remaining for actual command.
+ final List<String> command = new ArrayList<>();
+
+ // iterate through all tokens.
+ final Iterator<String> iterator = tokens.iterator();
+ while (iterator.hasNext()) {
+ String token = iterator.next();
+
+ // Check if is a redirect.
+ if (redirectInfo.check(token, iterator, cwd)) {
+ // Don't add to the command.
+ continue;
+ }
+
+ // Strip quotes and add to command.
+ command.add(stripQuotes(token));
+ }
+
+ return command;
+ }
+
+ /**
+ * createProcessBuilder - create a ProcessBuilder for the command.
+ * @param command command tokens
+ * @param cwd current working directory
+ * @param redirectInfo redirect information
+ */
+ private void createProcessBuilder(final List<String> command,
+ final String cwd, final RedirectInfo redirectInfo) {
+ // Create new ProcessBuilder.
+ final ProcessBuilder pb = new ProcessBuilder(command);
+ // Set current working directory.
+ pb.directory(new File(cwd));
+
+ // Map environment variables.
+ final Map<String, String> processEnvironment = pb.environment();
+ processEnvironment.clear();
+ processEnvironment.putAll(environment);
+
+ // Apply redirects.
+ redirectInfo.apply(pb);
+ // Add to current list of commands.
+ processBuilders.add(pb);
+ }
+
+ /**
+ * command - process the command
+ * @param tokens tokens of the command
+ * @param isPiped true if the output of this command should be piped to the next
+ */
+ private void command(final List<String> tokens, boolean isPiped) {
+ // Test to see if we should echo the command to output.
+ if (envVarBooleanValue("JJS_ECHO")) {
+ System.out.println(String.join(" ", tokens));
+ }
+
+ // Get the current working directory.
+ final String cwd = envVarValue("PWD", HOME_DIRECTORY);
+ // Preprocess the command for redirects.
+ final RedirectInfo redirectInfo = new RedirectInfo();
+ final List<String> command = preprocessCommand(tokens, cwd, redirectInfo);
+
+ // Skip if empty or a built in.
+ if (command.isEmpty() || builtIn(command, cwd)) {
+ return;
+ }
+
+ // Create ProcessBuilder with cwd and redirects set.
+ createProcessBuilder(command, cwd, redirectInfo);
+
+ // If piped the wait for the next command.
+ if (isPiped) {
+ return;
+ }
+
+ // Fetch first and last ProcessBuilder.
+ final ProcessBuilder firstProcessBuilder = processBuilders.get(0);
+ final ProcessBuilder lastProcessBuilder = processBuilders.get(processBuilders.size() - 1);
+
+ // Determine which streams have not be redirected from pipes.
+ boolean inputIsPipe = firstProcessBuilder.redirectInput() == Redirect.PIPE;
+ boolean outputIsPipe = lastProcessBuilder.redirectOutput() == Redirect.PIPE;
+ boolean errorIsPipe = lastProcessBuilder.redirectError() == Redirect.PIPE;
+ boolean inheritIO = envVarBooleanValue("JJS_INHERIT_IO");
+
+ // If not redirected and inputStream is current processes' input.
+ if (inputIsPipe && (inheritIO || inputStream == System.in)) {
+ // Inherit current processes' input.
+ firstProcessBuilder.redirectInput(Redirect.INHERIT);
+ inputIsPipe = false;
+ }
+
+ // If not redirected and outputStream is current processes' output.
+ if (outputIsPipe && (inheritIO || outputStream == System.out)) {
+ // Inherit current processes' output.
+ lastProcessBuilder.redirectOutput(Redirect.INHERIT);
+ outputIsPipe = false;
+ }
+
+ // If not redirected and errorStream is current processes' error.
+ if (errorIsPipe && (inheritIO || errorStream == System.err)) {
+ // Inherit current processes' error.
+ lastProcessBuilder.redirectError(Redirect.INHERIT);
+ errorIsPipe = false;
+ }
+
+ // Start the processes.
+ final List<Process> processes = new ArrayList<>();
+ for (ProcessBuilder pb : processBuilders) {
+ try {
+ processes.add(pb.start());
+ } catch (IOException ex) {
+ reportError("unknown.command", String.join(" ", pb.command()));
+ return;
+ }
+ }
+
+ // Clear processBuilders for next command.
+ processBuilders.clear();
+
+ // Get first and last process.
+ final Process firstProcess = processes.get(0);
+ final Process lastProcess = processes.get(processes.size() - 1);
+
+ // Prepare for string based i/o if no redirection or provided streams.
+ ByteArrayOutputStream byteOutputStream = null;
+ ByteArrayOutputStream byteErrorStream = null;
+
+ // If input is not redirected.
+ if (inputIsPipe) {
+ // If inputStream other than System.in is provided.
+ if (inputStream != null) {
+ // Pipe inputStream to first process output stream.
+ new Piper(inputStream, firstProcess.getOutputStream()).start();
+ } else {
+ // Otherwise assume an input string has been provided.
+ new Piper(new ByteArrayInputStream(inputString.getBytes()), firstProcess.getOutputStream()).start();
+ }
+ }
+
+ // If output is not redirected.
+ if (outputIsPipe) {
+ // If outputStream other than System.out is provided.
+ if (outputStream != null ) {
+ // Pipe outputStream from last process input stream.
+ new Piper(lastProcess.getInputStream(), outputStream).start();
+ } else {
+ // Otherwise assume an output string needs to be prepared.
+ byteOutputStream = new ByteArrayOutputStream(BUFFER_SIZE);
+ new Piper(lastProcess.getInputStream(), byteOutputStream).start();
+ }
+ }
+
+ // If error is not redirected.
+ if (errorIsPipe) {
+ // If errorStream other than System.err is provided.
+ if (errorStream != null) {
+ new Piper(lastProcess.getErrorStream(), errorStream).start();
+ } else {
+ // Otherwise assume an error string needs to be prepared.
+ byteErrorStream = new ByteArrayOutputStream(BUFFER_SIZE);
+ new Piper(lastProcess.getErrorStream(), byteErrorStream).start();
+ }
+ }
+
+ // Pipe commands in between.
+ for (int i = 0, n = processes.size() - 1; i < n; i++) {
+ final Process prev = processes.get(i);
+ final Process next = processes.get(i + 1);
+ new Piper(prev.getInputStream(), next.getOutputStream()).start();
+ }
+
+ // Wind up processes.
+ try {
+ // Get the user specified timeout.
+ long timeout = envVarLongValue("JJS_TIMEOUT");
+
+ // If user specified timeout (milliseconds.)
+ if (timeout != 0) {
+ // Wait for last process, with timeout.
+ if (lastProcess.waitFor(timeout, TimeUnit.MILLISECONDS)) {
+ // Get exit code of last process.
+ exitCode = lastProcess.exitValue();
+ } else {
+ reportError("timeout", Long.toString(timeout));
+ }
+ } else {
+ // Wait for last process and get exit code.
+ exitCode = lastProcess.waitFor();
+ }
+
+ // Accumulate the output and error streams.
+ outputString += byteOutputStream != null ? byteOutputStream.toString() : "";
+ errorString += byteErrorStream != null ? byteErrorStream.toString() : "";
+ } catch (InterruptedException ex) {
+ // Kill any living processes.
+ processes.stream().forEach(p -> {
+ if (p.isAlive()) {
+ p.destroy();
+ }
+
+ // Get the first error code.
+ exitCode = exitCode == 0 ? p.exitValue() : exitCode;
+ });
+ }
+
+ // If we got a non-zero exit code then possibly throw an exception.
+ if (exitCode != 0 && envVarBooleanValue("JJS_THROW_ON_EXIT")) {
+ throw rangeError("exec.returned.non.zero", ScriptRuntime.safeToString(exitCode));
+ }
+ }
+
+ /**
+ * createTokenizer - build up StreamTokenizer for the command script
+ * @param script command script to parsed
+ * @return StreamTokenizer for command script
+ */
+ private static StreamTokenizer createTokenizer(final String script) {
+ final StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(script));
+ tokenizer.resetSyntax();
+ // Default all characters to word.
+ tokenizer.wordChars(0, 255);
+ // Spaces and special characters are white spaces.
+ tokenizer.whitespaceChars(0, ' ');
+ // Ignore # comments.
+ tokenizer.commentChar('#');
+ // Handle double and single quote strings.
+ tokenizer.quoteChar('"');
+ tokenizer.quoteChar('\'');
+ // Need to recognize the end of a command.
+ tokenizer.eolIsSignificant(true);
+ // Command separator.
+ tokenizer.ordinaryChar(';');
+ // Pipe separator.
+ tokenizer.ordinaryChar('|');
+
+ return tokenizer;
+ }
+
+ /**
+ * process - process a command string
+ * @param script command script to parsed
+ */
+ void process(final String script) {
+ // Build up StreamTokenizer for the command script.
+ final StreamTokenizer tokenizer = createTokenizer(script);
+
+ // Prepare to accumulate command tokens.
+ final List<String> command = new ArrayList<>();
+ // Prepare to acumulate partial tokens joined with "\ ".
+ final StringBuilder sb = new StringBuilder();
+
+ try {
+ // Fetch next token until end of script.
+ while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {
+ // Next word token.
+ String token = tokenizer.sval;
+
+ // If special token.
+ if (token == null) {
+ // Flush any partial token.
+ if (sb.length() != 0) {
+ command.add(sb.append(token).toString());
+ sb.setLength(0);
+ }
+
+ // Process a completed command.
+ // Will be either ';' (command end) or '|' (pipe), true if '|'.
+ command(command, tokenizer.ttype == '|');
+
+ if (exitCode != EXIT_SUCCESS) {
+ return;
+ }
+
+ // Start with a new set of tokens.
+ command.clear();
+ } else if (token.endsWith("\\")) {
+ // Backslash followed by space.
+ sb.append(token.substring(0, token.length() - 1)).append(' ');
+ } else if (sb.length() == 0) {
+ // If not a word then must be a quoted string.
+ if (tokenizer.ttype != StreamTokenizer.TT_WORD) {
+ // Quote string, sb is free to use (empty.)
+ sb.append((char)tokenizer.ttype);
+ sb.append(token);
+ sb.append((char)tokenizer.ttype);
+ token = sb.toString();
+ sb.setLength(0);
+ }
+
+ command.add(token);
+ } else {
+ // Partial token pending.
+ command.add(sb.append(token).toString());
+ sb.setLength(0);
+ }
+ }
+ } catch (final IOException ex) {
+ // Do nothing.
+ }
+
+ // Partial token pending.
+ if (sb.length() != 0) {
+ command.add(sb.toString());
+ }
+
+ // Process last command.
+ command(command, false);
+ }
+
+ /**
+ * process - process a command array of strings
+ * @param script command script to be processed
+ */
+ void process(final List<String> tokens) {
+ // Prepare to accumulate command tokens.
+ final List<String> command = new ArrayList<>();
+
+ // Iterate through tokens.
+ final Iterator<String> iterator = tokens.iterator();
+ while (iterator.hasNext() && exitCode == EXIT_SUCCESS) {
+ // Next word token.
+ String token = iterator.next();
+
+ if (token == null) {
+ continue;
+ }
+
+ switch (token) {
+ case "|":
+ // Process as a piped command.
+ command(command, true);
+ // Start with a new set of tokens.
+ command.clear();
+
+ continue;
+ case ";":
+ // Process as a normal command.
+ command(command, false);
+ // Start with a new set of tokens.
+ command.clear();
+
+ continue;
+ }
+
+ command.add(token);
+ }
+
+ // Process last command.
+ command(command, false);
+ }
+
+ void reportError(final String msg, final String object) {
+ errorString += ECMAErrors.getMessage("range.error.exec." + msg, object);
+ exitCode = EXIT_FAILURE;
+ }
+
+ String getOutputString() {
+ return outputString;
+ }
+
+ String getErrorString() {
+ return errorString;
+ }
+
+ int getExitCode() {
+ return exitCode;
+ }
+
+ void setEnvironment(Map<String, String> environment) {
+ this.environment = environment;
+ }
+
+ void setInputStream(InputStream inputStream) {
+ this.inputStream = inputStream;
+ }
+
+ void setInputString(String inputString) {
+ this.inputString = inputString;
+ }
+
+ void setOutputStream(OutputStream outputStream) {
+ this.outputStream = outputStream;
+ }
+
+ void setErrorStream(OutputStream errorStream) {
+ this.errorStream = errorStream;
+ }
+}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptingFunctions.java Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptingFunctions.java Mon Feb 15 09:44:42 2016 -0800
@@ -26,24 +26,24 @@
package jdk.nashorn.internal.runtime;
import static jdk.nashorn.internal.lookup.Lookup.MH;
-import static jdk.nashorn.internal.runtime.ECMAErrors.rangeError;
import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.StreamTokenizer;
-import java.io.StringReader;
+import java.io.OutputStream;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import jdk.nashorn.internal.objects.NativeArray;
+import static jdk.nashorn.internal.runtime.ECMAErrors.rangeError;
/**
* Global functions supported only in scripting mode.
@@ -71,9 +71,6 @@
/** EXIT name - special property used by $EXEC API. */
public static final String EXIT_NAME = "$EXIT";
- /** THROW_ON_ERROR name - special property of the $EXEC function used by $EXEC API. */
- public static final String THROW_ON_ERROR_NAME = "throwOnError";
-
/** Names of special properties used by $ENV API. */
public static final String ENV_NAME = "$ENV";
@@ -132,188 +129,97 @@
* Nashorn extension: exec a string in a separate process.
*
* @param self self reference
- * @param args string to execute, input and additional arguments, to be appended to {@code string}. Additional
- * arguments can be passed as either one JavaScript array, whose elements will be converted to
- * strings; or as a sequence of varargs, each of which will be converted to a string.
+ * @param args In one of four forms
+ * 1. String script, String input
+ * 2. String script, InputStream input, OutputStream output, OutputStream error
+ * 3. Array scriptTokens, String input
+ * 4. Array scriptTokens, InputStream input, OutputStream output, OutputStream error
*
- * @return output string from the request
- *
- * @throws IOException if any stream access fails
- * @throws InterruptedException if execution is interrupted
+ * @return output string from the request if in form of 1. or 3., empty string otherwise
*/
- public static Object exec(final Object self, final Object... args) throws IOException, InterruptedException {
+ public static Object exec(final Object self, final Object... args) {
+ final Object arg0 = args.length > 0 ? args[0] : UNDEFINED;
+ final Object arg1 = args.length > 1 ? args[1] : UNDEFINED;
+ final Object arg2 = args.length > 2 ? args[2] : UNDEFINED;
+ final Object arg3 = args.length > 3 ? args[3] : UNDEFINED;
+
+ InputStream inputStream = null;
+ OutputStream outputStream = null;
+ OutputStream errorStream = null;
+ String script = null;
+ List<String> tokens = null;
+ String inputString = null;
+
+ if (arg0 instanceof NativeArray) {
+ String[] array = (String[])JSType.toJavaArray(arg0, String.class);
+ tokens = new ArrayList<>();
+ tokens.addAll(Arrays.asList(array));
+ } else {
+ script = JSType.toString(arg0);
+ }
+
+ if (arg1 instanceof InputStream) {
+ inputStream = (InputStream)arg1;
+ } else {
+ inputString = JSType.toString(arg1);
+ }
+
+ if (arg2 instanceof OutputStream) {
+ outputStream = (OutputStream)arg2;
+ }
+
+ if (arg3 instanceof OutputStream) {
+ errorStream = (OutputStream)arg3;
+ }
+
// Current global is need to fetch additional inputs and for additional results.
final ScriptObject global = Context.getGlobal();
- final Object string = args.length > 0? args[0] : UNDEFINED;
- final Object input = args.length > 1? args[1] : UNDEFINED;
- final Object[] argv = (args.length > 2)? Arrays.copyOfRange(args, 2, args.length) : ScriptRuntime.EMPTY_ARRAY;
- // Assemble command line, process additional arguments.
- final List<String> cmdLine = tokenizeString(JSType.toString(string));
- final Object[] additionalArgs = argv.length == 1 && argv[0] instanceof NativeArray ?
- ((NativeArray) argv[0]).asObjectArray() :
- argv;
- for (Object arg : additionalArgs) {
- cmdLine.add(JSType.toString(arg));
- }
- // Set up initial process.
- final ProcessBuilder processBuilder = new ProcessBuilder(cmdLine);
+ // Capture ENV property state.
+ final Map<String, String> environment = new HashMap<>();
+ final Object env = global.get(ENV_NAME);
- // Current ENV property state.
- final Object env = global.get(ENV_NAME);
if (env instanceof ScriptObject) {
final ScriptObject envProperties = (ScriptObject)env;
- // If a working directory is present, use it.
- final Object pwd = envProperties.get(PWD_NAME);
- if (pwd != UNDEFINED) {
- final File pwdFile = new File(JSType.toString(pwd));
- if (pwdFile.exists()) {
- processBuilder.directory(pwdFile);
- }
- }
-
- // Set up ENV variables.
- final Map<String, String> environment = processBuilder.environment();
- environment.clear();
- for (final Map.Entry<Object, Object> entry : envProperties.entrySet()) {
+ // Copy ENV variables.
+ envProperties.entrySet().stream().forEach((entry) -> {
environment.put(JSType.toString(entry.getKey()), JSType.toString(entry.getValue()));
- }
+ });
}
- // Start the process.
- final Process process = processBuilder.start();
- final IOException exception[] = new IOException[2];
-
- // Collect output.
- final StringBuilder outBuffer = new StringBuilder();
- final Thread outThread = new Thread(new Runnable() {
- @Override
- public void run() {
- final char buffer[] = new char[1024];
- try (final InputStreamReader inputStream = new InputStreamReader(process.getInputStream())) {
- for (int length; (length = inputStream.read(buffer, 0, buffer.length)) != -1; ) {
- outBuffer.append(buffer, 0, length);
- }
- } catch (final IOException ex) {
- exception[0] = ex;
- }
- }
- }, "$EXEC output");
+ // get the $EXEC function object from the global object
+ final Object exec = global.get(EXEC_NAME);
+ assert exec instanceof ScriptObject : EXEC_NAME + " is not a script object!";
- // Collect errors.
- final StringBuilder errBuffer = new StringBuilder();
- final Thread errThread = new Thread(new Runnable() {
- @Override
- public void run() {
- final char buffer[] = new char[1024];
- try (final InputStreamReader inputStream = new InputStreamReader(process.getErrorStream())) {
- for (int length; (length = inputStream.read(buffer, 0, buffer.length)) != -1; ) {
- errBuffer.append(buffer, 0, length);
- }
- } catch (final IOException ex) {
- exception[1] = ex;
- }
- }
- }, "$EXEC error");
+ // Execute the commands
+ final CommandExecutor executor = new CommandExecutor();
+ executor.setInputString(inputString);
+ executor.setInputStream(inputStream);
+ executor.setOutputStream(outputStream);
+ executor.setErrorStream(errorStream);
+ executor.setEnvironment(environment);
- // Start gathering output.
- outThread.start();
- errThread.start();
-
- // If input is present, pass on to process.
- if (!JSType.nullOrUndefined(input)) {
- try (OutputStreamWriter outputStream = new OutputStreamWriter(process.getOutputStream())) {
- final String in = JSType.toString(input);
- outputStream.write(in, 0, in.length());
- } catch (final IOException ex) {
- // Process was not expecting input. May be normal state of affairs.
- }
+ if (tokens != null) {
+ executor.process(tokens);
+ } else {
+ executor.process(script);
}
- // Wait for the process to complete.
- final int exit = process.waitFor();
- outThread.join();
- errThread.join();
-
- final String out = outBuffer.toString();
- final String err = errBuffer.toString();
+ final String outString = executor.getOutputString();
+ final String errString = executor.getErrorString();
+ int exitCode = executor.getExitCode();
// Set globals for secondary results.
- global.set(OUT_NAME, out, 0);
- global.set(ERR_NAME, err, 0);
- global.set(EXIT_NAME, exit, 0);
-
- // Propagate exception if present.
- for (final IOException element : exception) {
- if (element != null) {
- throw element;
- }
- }
-
- // if we got a non-zero exit code ("failure"), then we have to decide to throw error or not
- if (exit != 0) {
- // get the $EXEC function object from the global object
- final Object exec = global.get(EXEC_NAME);
- assert exec instanceof ScriptObject : EXEC_NAME + " is not a script object!";
-
- // Check if the user has set $EXEC.throwOnError property to true. If so, throw RangeError
- // If that property is not set or set to false, then silently proceed with the rest.
- if (JSType.toBoolean(((ScriptObject)exec).get(THROW_ON_ERROR_NAME))) {
- throw rangeError("exec.returned.non.zero", ScriptRuntime.safeToString(exit));
- }
- }
+ global.set(OUT_NAME, outString, 0);
+ global.set(ERR_NAME, errString, 0);
+ global.set(EXIT_NAME, exitCode, 0);
// Return the result from stdout.
- return out;
+ return outString;
}
private static MethodHandle findOwnMH(final String name, final Class<?> rtype, final Class<?>... types) {
return MH.findStatic(MethodHandles.lookup(), ScriptingFunctions.class, name, MH.type(rtype, types));
}
-
- /**
- * Break a string into tokens, honoring quoted arguments and escaped spaces.
- *
- * @param str a {@link String} to tokenize.
- * @return a {@link List} of {@link String}s representing the tokens that
- * constitute the string.
- */
- public static List<String> tokenizeString(final String str) {
- final StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(str));
- tokenizer.resetSyntax();
- tokenizer.wordChars(0, 255);
- tokenizer.whitespaceChars(0, ' ');
- tokenizer.commentChar('#');
- tokenizer.quoteChar('"');
- tokenizer.quoteChar('\'');
- final List<String> tokenList = new ArrayList<>();
- final StringBuilder toAppend = new StringBuilder();
- while (nextToken(tokenizer) != StreamTokenizer.TT_EOF) {
- final String s = tokenizer.sval;
- // The tokenizer understands about honoring quoted strings and recognizes
- // them as one token that possibly contains multiple space-separated words.
- // It does not recognize quoted spaces, though, and will split after the
- // escaping \ character. This is handled here.
- if (s.endsWith("\\")) {
- // omit trailing \, append space instead
- toAppend.append(s.substring(0, s.length() - 1)).append(' ');
- } else {
- tokenList.add(toAppend.append(s).toString());
- toAppend.setLength(0);
- }
- }
- if (toAppend.length() != 0) {
- tokenList.add(toAppend.toString());
- }
- return tokenList;
- }
-
- private static int nextToken(final StreamTokenizer tokenizer) {
- try {
- return tokenizer.nextToken();
- } catch (final IOException ioe) {
- return StreamTokenizer.TT_EOF;
- }
- }
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/Bootstrap.java Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/Bootstrap.java Mon Feb 15 09:44:42 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2013, 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
@@ -29,6 +29,7 @@
import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
@@ -203,6 +204,42 @@
}
/**
+ * Boostrapper for math calls that may overflow
+ * @param lookup lookup
+ * @param name name of operation
+ * @param type method type
+ * @param programPoint program point to bind to callsite
+ *
+ * @return callsite for a math intrinsic node
+ */
+ public static CallSite mathBootstrap(final Lookup lookup, final String name, final MethodType type, final int programPoint) {
+ final MethodHandle mh;
+ switch (name) {
+ case "iadd":
+ mh = JSType.ADD_EXACT.methodHandle();
+ break;
+ case "isub":
+ mh = JSType.SUB_EXACT.methodHandle();
+ break;
+ case "imul":
+ mh = JSType.MUL_EXACT.methodHandle();
+ break;
+ case "idiv":
+ mh = JSType.DIV_EXACT.methodHandle();
+ break;
+ case "irem":
+ mh = JSType.REM_EXACT.methodHandle();
+ break;
+ case "ineg":
+ mh = JSType.NEGATE_EXACT.methodHandle();
+ break;
+ default:
+ throw new AssertionError("unsupported math intrinsic");
+ }
+ return new ConstantCallSite(MH.insertArguments(mh, mh.type().parameterCount() - 1, programPoint));
+ }
+
+ /**
* Returns a dynamic invoker for a specified dynamic operation using the
* public lookup. You can use this method to create a method handle that
* when invoked acts completely as if it were a Nashorn-linked call site.
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Messages.properties Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Messages.properties Mon Feb 15 09:44:42 2016 -0800
@@ -170,7 +170,11 @@
range.error.invalid.date=Invalid Date
range.error.too.many.errors=Script contains too many errors: {0} errors
range.error.concat.string.too.big=Concatenated String is too big
+range.error.exec.file.not.exist=$EXEC File or directory does not exist : {0}
+range.error.exec.not.directory=$EXEC Not a directory : {0}
range.error.exec.returned.non.zero=$EXEC returned non-zero exit code: {0}
+range.error.exec.timeout=$EXEC Command timeout : {0}
+range.error.exec.unknown.command=$EXEC Unknown command : {0}
reference.error.not.defined="{0}" is not defined
reference.error.cant.be.used.as.lhs="{0}" can not be used as the left-hand side of assignment
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/tools/Shell.java Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/tools/Shell.java Mon Feb 15 09:44:42 2016 -0800
@@ -57,6 +57,8 @@
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
+import java.io.StreamTokenizer;
+import java.io.StringReader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -278,7 +280,7 @@
// as it might actually contain several arguments. Mac OS X splits shebang arguments, other platforms don't.
// This special handling is also only necessary if the first argument actually starts with an option.
if (args[0].startsWith("-") && !System.getProperty("os.name", "generic").startsWith("Mac OS X")) {
- processedArgs.addAll(0, ScriptingFunctions.tokenizeString(processedArgs.remove(0)));
+ processedArgs.addAll(0, tokenizeString(processedArgs.remove(0)));
}
int shebangFilePos = -1; // -1 signifies "none found"
@@ -308,6 +310,44 @@
return processedArgs.stream().toArray(String[]::new);
}
+ public static List<String> tokenizeString(final String str) {
+ final StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(str));
+ tokenizer.resetSyntax();
+ tokenizer.wordChars(0, 255);
+ tokenizer.whitespaceChars(0, ' ');
+ tokenizer.commentChar('#');
+ tokenizer.quoteChar('"');
+ tokenizer.quoteChar('\'');
+ final List<String> tokenList = new ArrayList<>();
+ final StringBuilder toAppend = new StringBuilder();
+ while (nextToken(tokenizer) != StreamTokenizer.TT_EOF) {
+ final String s = tokenizer.sval;
+ // The tokenizer understands about honoring quoted strings and recognizes
+ // them as one token that possibly contains multiple space-separated words.
+ // It does not recognize quoted spaces, though, and will split after the
+ // escaping \ character. This is handled here.
+ if (s.endsWith("\\")) {
+ // omit trailing \, append space instead
+ toAppend.append(s.substring(0, s.length() - 1)).append(' ');
+ } else {
+ tokenList.add(toAppend.append(s).toString());
+ toAppend.setLength(0);
+ }
+ }
+ if (toAppend.length() != 0) {
+ tokenList.add(toAppend.toString());
+ }
+ return tokenList;
+ }
+
+ private static int nextToken(final StreamTokenizer tokenizer) {
+ try {
+ return tokenizer.nextToken();
+ } catch (final IOException ioe) {
+ return StreamTokenizer.TT_EOF;
+ }
+ }
+
/**
* Compiles the given script files in the command line
* This is called only when using the --compile-only flag
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8141209.js Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,91 @@
+/*
+ * 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.
+ *
+ * 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.
+ */
+
+/**
+ * JDK-8141209 : $EXEC should allow streaming
+ *
+ * @test
+ * @option -scripting
+ * @runif os.not.windows
+ * @run
+ */
+
+
+var System = Java.type("java.lang.System");
+var File = Java.type("java.io.File");
+var ByteArrayInputStream = Java.type("java.io.ByteArrayInputStream");
+var ByteArrayOutputStream = Java.type("java.io.ByteArrayOutputStream");
+
+var input = <<<EOD
+There was an Old Man with a beard,
+Who said, It is just as I feared!
+Two Owls and a Hen,
+Four Larks and a Wren,
+Have all built their nests in my beard!
+EOD
+
+function tempFile() {
+ return File.createTempFile("JDK-8141209", ".txt").toString();
+}
+
+`ls -l / | sed > ${tempFile()} -e '/^d/ d'`
+
+$EXEC(["ls", "-l", "|", "sed", "-e", "/^d/ d", ">", tempFile()])
+
+var t1 = tempFile();
+
+$EXEC(<<<EOD)
+ls -l >${t1}
+sed <${t1} >${tempFile()} -e '/^d/ d'
+EOD
+
+$EXEC(<<<EOD, `ls -l`)
+sed >${tempFile()} -e '/^d/ d'
+EOD
+
+var instream = new ByteArrayInputStream(input.getBytes());
+var outstream = new ByteArrayOutputStream();
+var errstream = new ByteArrayOutputStream();
+$EXEC("sed -e '/beard/ d'", instream, outstream, errstream);
+var out = outstream.toString();
+var err = errstream.toString();
+
+instream = new ByteArrayInputStream(input.getBytes());
+$EXEC("sed -e '/beard/ d'", instream, System.out, System.err);
+
+
+$EXEC(<<<EOD)
+cd .
+setenv TEMP 0
+unsetenv TEMP
+EOD
+
+$ENV.JJS_THROW_ON_EXIT = "1";
+$ENV.JJS_TIMEOUT = "1000";
+$ENV.JJS_ECHO = "1";
+$ENV.JJS_INHERIT_IO = "1";
+
+$EXEC("echo hello world", instream);
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8141209.js.EXPECTED Mon Feb 15 09:44:42 2016 -0800
@@ -0,0 +1,5 @@
+Who said, It is just as I feared!
+Two Owls and a Hen,
+Four Larks and a Wren,
+echo hello world
+hello world
--- a/nashorn/test/script/trusted/JDK-8087292.js Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/test/script/trusted/JDK-8087292.js Mon Feb 15 09:44:42 2016 -0800
@@ -46,9 +46,9 @@
tryExec();
// turn on error with non-zero exit code
-$EXEC.throwOnError = true;
+$ENV.JJS_THROW_ON_EXIT = "1";
tryExec();
// no exception after this
-$EXEC.throwOnError = false;
+$ENV.JJS_THROW_ON_EXIT = "0";
tryExec();
--- a/nashorn/test/src/jdk/nashorn/internal/test/framework/TestFinder.java Thu Feb 11 13:58:43 2016 -0800
+++ b/nashorn/test/src/jdk/nashorn/internal/test/framework/TestFinder.java Mon Feb 15 09:44:42 2016 -0800
@@ -68,7 +68,7 @@
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
-import jdk.nashorn.internal.runtime.ScriptingFunctions;
+import jdk.nashorn.tools.Shell;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
@@ -225,7 +225,7 @@
boolean explicitOptimistic = false;
String allContent = new String(Files.readAllBytes(testFile));
- Iterator<String> scanner = ScriptingFunctions.tokenizeString(allContent).iterator();
+ Iterator<String> scanner = Shell.tokenizeString(allContent).iterator();
while (scanner.hasNext()) {
// TODO: Scan for /ref=file qualifiers, etc, to determine run
// behavior
--- a/test/Makefile Thu Feb 11 13:58:43 2016 -0800
+++ b/test/Makefile Mon Feb 15 09:44:42 2016 -0800
@@ -40,8 +40,7 @@
define SUBDIR_TEST # subdirectory target
if [ -d $1 ] ; then \
if [ -r $1/test/Makefile ] ; then \
- echo "$(MAKE) -k -C $1/test $2" ; \
- $(MAKE) -k -C $1/test $2 ; \
+ $(MAKE) --no-print-directory -k -C $1/test $2 ; \
else \
echo "ERROR: File does not exist: $1/test/Makefile"; \
exit 1; \