# HG changeset patch # User duke # Date 1499282445 -7200 # Node ID 6c644cca3f3fc2763e2ff7d669849a75d34543ba # Parent 2fc9abeff0d5420c4903383f15ff34334deb3b4d# Parent f535b24cd53a498890abd853c0d29e3120f11d7d Merge diff -r f535b24cd53a -r 6c644cca3f3f .hgtags-top-repo --- a/.hgtags-top-repo Wed Jul 05 21:19:33 2017 +0200 +++ b/.hgtags-top-repo Wed Jul 05 21:20:45 2017 +0200 @@ -347,3 +347,4 @@ 6406ecf5d39482623225bb1b3098c2cac6f7d450 jdk-9+102 47d6462e514b2097663305a57d9c844c15d5b609 jdk-9+103 9a38f8b4ba220708db198d08d82fd2144a64777d jdk-9+104 +be58b02c11f90b88c67e4d0e2cb5e4cf2d9b3c57 jdk-9+105 diff -r f535b24cd53a -r 6c644cca3f3f common/autoconf/basics.m4 --- a/common/autoconf/basics.m4 Wed Jul 05 21:19:33 2017 +0200 +++ b/common/autoconf/basics.m4 Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f common/autoconf/build-performance.m4 --- a/common/autoconf/build-performance.m4 Wed Jul 05 21:19:33 2017 +0200 +++ b/common/autoconf/build-performance.m4 Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f common/autoconf/compare.sh.in --- a/common/autoconf/compare.sh.in Wed Jul 05 21:19:33 2017 +0200 +++ b/common/autoconf/compare.sh.in Wed Jul 05 21:20:45 2017 +0200 @@ -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@" diff -r f535b24cd53a -r 6c644cca3f3f common/autoconf/configure --- a/common/autoconf/configure Wed Jul 05 21:19:33 2017 +0200 +++ b/common/autoconf/configure Wed Jul 05 21:20:45 2017 +0200 @@ -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 <,, 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;} diff -r f535b24cd53a -r 6c644cca3f3f common/autoconf/help.m4 --- a/common/autoconf/help.m4 Wed Jul 05 21:19:33 2017 +0200 +++ b/common/autoconf/help.m4 Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f common/autoconf/hotspot.m4 --- a/common/autoconf/hotspot.m4 Wed Jul 05 21:19:33 2017 +0200 +++ b/common/autoconf/hotspot.m4 Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f common/autoconf/jdk-options.m4 --- a/common/autoconf/jdk-options.m4 Wed Jul 05 21:19:33 2017 +0200 +++ b/common/autoconf/jdk-options.m4 Wed Jul 05 21:20:45 2017 +0200 @@ -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], diff -r f535b24cd53a -r 6c644cca3f3f common/autoconf/lib-freetype.m4 --- a/common/autoconf/lib-freetype.m4 Wed Jul 05 21:19:33 2017 +0200 +++ b/common/autoconf/lib-freetype.m4 Wed Jul 05 21:20:45 2017 +0200 @@ -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]) diff -r f535b24cd53a -r 6c644cca3f3f common/autoconf/spec.gmk.in --- a/common/autoconf/spec.gmk.in Wed Jul 05 21:19:33 2017 +0200 +++ b/common/autoconf/spec.gmk.in Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f common/autoconf/toolchain.m4 --- a/common/autoconf/toolchain.m4 Wed Jul 05 21:19:33 2017 +0200 +++ b/common/autoconf/toolchain.m4 Wed Jul 05 21:20:45 2017 +0200 @@ -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) # diff -r f535b24cd53a -r 6c644cca3f3f common/bin/compare.sh --- a/common/bin/compare.sh Wed Jul 05 21:19:33 2017 +0200 +++ b/common/bin/compare.sh Wed Jul 05 21:20:45 2017 +0200 @@ -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\}//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/\(\)/\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/\(\)/\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\}//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]*//' + " + $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 diff -r f535b24cd53a -r 6c644cca3f3f common/bin/compare_exceptions.sh.incl --- a/common/bin/compare_exceptions.sh.incl Wed Jul 05 21:19:33 2017 +0200 +++ b/common/bin/compare_exceptions.sh.incl Wed Jul 05 21:20:45 2017 +0200 @@ -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/g' \ - -e 's/0x[0-9a-z]\{2,9\}//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/g' \ + -e 's/0x[0-9a-z]\{2,9\}//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\}//g' \ - -e 's/\(\# \)[0-9a-f]*\( <\)/\1\2/g' \ - -e 's/0x[0-9a-f]*$//g' \ - -e 's/0x[0-9a-f]*\([,(>]\)/\1/g' \ - -e 's/: [0-9a-f][0-9a-f]\( [0-9a-f][0-9a-f]\)\{2,10\}/: /g' \ - -e 's/ [\.A-Za-z0-9%@]\{16\}$/ /g'" + # Filter random C++ symbol strings. + # Some numbers differ randomly. + DIS_DIFF_FILTER="$SED \ + -e 's/\.[a-zA-Z0-9_\$]\{15\}//g' \ + -e 's/\(\# \)[0-9a-f]*\( <\)/\1\2/g' \ + -e 's/0x[0-9a-f]*$//g' \ + -e 's/0x[0-9a-f]*\([,(>]\)/\1/g' \ + -e 's/: [0-9a-f][0-9a-f]\( [0-9a-f][0-9a-f]\)\{2,10\}/: /g' \ + -e 's/ [\.A-Za-z0-9%@]\{16\}$/ /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\}//g' \ - -e 's/: [0-9a-f][0-9a-f]\( [0-9a-f][0-9a-f]\)\{2,10\}/: /g' \ - -e 's/, [0-9a-fx\-]\{1,8\}/, /g' \ - -e 's/call [0-9a-f]\{7\}/call /g' \ - -e 's/0x[0-9a-f]\{1,8\}//g' \ - -e 's/\! [0-9a-f]\{1,8\} /! /g'" + # Some numbers differ randomly. + DIS_DIFF_FILTER="$SED \ + -e 's/\$[a-zA-Z0-9_\$]\{15\}//g' \ + -e 's/: [0-9a-f][0-9a-f]\( [0-9a-f][0-9a-f]\)\{2,10\}/: /g' \ + -e 's/, [0-9a-fx\-]\{1,8\}/, /g' \ + -e 's/call [0-9a-f]\{7\}/call /g' \ + -e 's/0x[0-9a-f]\{1,8\}//g' \ + -e 's/\! [0-9a-f]\{1,8\} /! /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\}//g' \ - -e 's/\([\[+]\)[0-9A-F]\{4,16\}h\]/\1]/g' \ - -e 's/_[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}/_/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\}//g' \ + -e 's/\([\[+]\)[0-9A-F]\{4,16\}h\]/\1]/g' \ + -e 's/_[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}/_/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\}//g' -e 's/^[0-9a-f]\{12,20\}//'" + DIS_DIFF_FILTER="LANG=C $SED \ + -e 's/0x[0-9a-f]\{3,16\}//g' -e 's/^[0-9a-f]\{12,20\}//' \ + -e 's/## literal pool for: .Java HotSpot(TM) 64-Bit Server VM.*//g' + " fi diff -r f535b24cd53a -r 6c644cca3f3f corba/.hgtags --- a/corba/.hgtags Wed Jul 05 21:19:33 2017 +0200 +++ b/corba/.hgtags Wed Jul 05 21:20:45 2017 +0200 @@ -347,3 +347,4 @@ 9c4662334d933d299928d1f599d02ff50777cbf8 jdk-9+102 0680fb7dae4da1ee6cf783c4b74184e3e08d3179 jdk-9+103 e385e95e6101711d5c63e7b1a827e99b6ec7a1cc jdk-9+104 +64006ae915b3aa85ac7e6fac679024d2da7fe526 jdk-9+105 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/.hgtags --- a/hotspot/.hgtags Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/.hgtags Wed Jul 05 21:20:45 2017 +0200 @@ -507,3 +507,4 @@ d5239fc1b69749ae50793c61b899fcdacf3df857 jdk-9+102 c5f55130b1b69510d9a6f4a3105b58e21cd7ffe1 jdk-9+103 534c50395957c6025fb6627e93b35756f8d48a08 jdk-9+104 +266fa9bb5297bf02cb2a7b038b10a109817d2b48 jdk-9+105 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/make/lib/Lib-jdk.hotspot.agent.gmk --- a/hotspot/make/lib/Lib-jdk.hotspot.agent.gmk Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/make/lib/Lib-jdk.hotspot.agent.gmk Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp --- a/hotspot/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp --- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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(); diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/cpu/x86/vm/sharedRuntime_x86_32.cpp --- a/hotspot/src/cpu/x86/vm/sharedRuntime_x86_32.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/cpu/x86/vm/sharedRuntime_x86_32.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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) { diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp --- a/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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++) { diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/cpu/x86/vm/vm_version_x86.cpp --- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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()) { diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/os/windows/vm/version.rc --- a/hotspot/src/os/windows/vm/version.rc Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/os/windows/vm/version.rc Wed Jul 05 21:20:45 2017 +0200 @@ -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" diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/share/vm/ci/ciField.cpp --- a/hotspot/src/share/vm/ci/ciField.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/share/vm/ci/ciField.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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. diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/share/vm/opto/addnode.cpp --- a/hotspot/src/share/vm/opto/addnode.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/share/vm/opto/addnode.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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; diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/share/vm/opto/loopTransform.cpp --- a/hotspot/src/share/vm/opto/loopTransform.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/share/vm/opto/loopTransform.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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()); diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/share/vm/opto/loopnode.cpp --- a/hotspot/src/share/vm/opto/loopnode.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/share/vm/opto/loopnode.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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; diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/share/vm/opto/loopnode.hpp --- a/hotspot/src/share/vm/opto/loopnode.hpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/share/vm/opto/loopnode.hpp Wed Jul 05 21:20:45 2017 +0200 @@ -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: diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/share/vm/opto/macro.cpp --- a/hotspot/src/share/vm/opto/macro.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/share/vm/opto/macro.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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. diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/share/vm/opto/split_if.cpp --- a/hotspot/src/share/vm/opto/split_if.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/share/vm/opto/split_if.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/share/vm/opto/subnode.cpp --- a/hotspot/src/share/vm/opto/subnode.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/share/vm/opto/subnode.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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 ) ); } - diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/share/vm/runtime/commandLineFlagConstraintsCompiler.cpp --- a/hotspot/src/share/vm/runtime/commandLineFlagConstraintsCompiler.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/share/vm/runtime/commandLineFlagConstraintsCompiler.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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) { diff -r f535b24cd53a -r 6c644cca3f3f hotspot/src/share/vm/runtime/globals.hpp --- a/hotspot/src/share/vm/runtime/globals.hpp Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/src/share/vm/runtime/globals.hpp Wed Jul 05 21:20:45 2017 +0200 @@ -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, \ diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityBase.java --- a/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityBase.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityBase.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityCommandOff.java --- a/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityCommandOff.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityCommandOff.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityCommandOn.java --- a/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityCommandOn.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityCommandOn.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityFlag.java --- a/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityFlag.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/TestCompilerDirectivesCompatibilityFlag.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/commandfile/CompileOnlyTest.java --- a/hotspot/test/compiler/compilercontrol/commandfile/CompileOnlyTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/commandfile/CompileOnlyTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/commandfile/ExcludeTest.java --- a/hotspot/test/compiler/compilercontrol/commandfile/ExcludeTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/commandfile/ExcludeTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/commandfile/LogTest.java --- a/hotspot/test/compiler/compilercontrol/commandfile/LogTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/commandfile/LogTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/commandfile/PrintTest.java --- a/hotspot/test/compiler/compilercontrol/commandfile/PrintTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/commandfile/PrintTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/commands/CompileOnlyTest.java --- a/hotspot/test/compiler/compilercontrol/commands/CompileOnlyTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/commands/CompileOnlyTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/commands/ExcludeTest.java --- a/hotspot/test/compiler/compilercontrol/commands/ExcludeTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/commands/ExcludeTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/commands/LogTest.java --- a/hotspot/test/compiler/compilercontrol/commands/LogTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/commands/LogTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/commands/PrintTest.java --- a/hotspot/test/compiler/compilercontrol/commands/PrintTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/commands/PrintTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/directives/CompileOnlyTest.java --- a/hotspot/test/compiler/compilercontrol/directives/CompileOnlyTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/directives/CompileOnlyTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/directives/ExcludeTest.java --- a/hotspot/test/compiler/compilercontrol/directives/ExcludeTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/directives/ExcludeTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/directives/LogTest.java --- a/hotspot/test/compiler/compilercontrol/directives/LogTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/directives/LogTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/directives/PrintTest.java --- a/hotspot/test/compiler/compilercontrol/directives/PrintTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/directives/PrintTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/jcmd/AddAndRemoveTest.java --- a/hotspot/test/compiler/compilercontrol/jcmd/AddAndRemoveTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/jcmd/AddAndRemoveTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/jcmd/AddCompileOnlyTest.java --- a/hotspot/test/compiler/compilercontrol/jcmd/AddCompileOnlyTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/jcmd/AddCompileOnlyTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/jcmd/AddExcludeTest.java --- a/hotspot/test/compiler/compilercontrol/jcmd/AddExcludeTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/jcmd/AddExcludeTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/jcmd/AddLogTest.java --- a/hotspot/test/compiler/compilercontrol/jcmd/AddLogTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/jcmd/AddLogTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/jcmd/AddPrintAssemblyTest.java --- a/hotspot/test/compiler/compilercontrol/jcmd/AddPrintAssemblyTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/jcmd/AddPrintAssemblyTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/mixed/RandomCommandsTest.java --- a/hotspot/test/compiler/compilercontrol/mixed/RandomCommandsTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/mixed/RandomCommandsTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/mixed/RandomValidCommandsTest.java --- a/hotspot/test/compiler/compilercontrol/mixed/RandomValidCommandsTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/mixed/RandomValidCommandsTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.* diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/compilercontrol/share/scenario/Command.java --- a/hotspot/test/compiler/compilercontrol/share/scenario/Command.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/compilercontrol/share/scenario/Command.java Wed Jul 05 21:20:45 2017 +0200 @@ -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", ""), diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java --- a/hotspot/test/compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/cpuflags/TestAESIntrinsicsOnUnsupportedConfig.java --- a/hotspot/test/compiler/cpuflags/TestAESIntrinsicsOnUnsupportedConfig.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/cpuflags/TestAESIntrinsicsOnUnsupportedConfig.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/intrinsics/IntrinsicDisabledTest.java --- a/hotspot/test/compiler/intrinsics/IntrinsicDisabledTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/intrinsics/IntrinsicDisabledTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/intrinsics/montgomerymultiply/MontgomeryMultiplyTest.java --- a/hotspot/test/compiler/intrinsics/montgomerymultiply/MontgomeryMultiplyTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/intrinsics/montgomerymultiply/MontgomeryMultiplyTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/intrinsics/string/TestStringIntrinsics2.java --- a/hotspot/test/compiler/intrinsics/string/TestStringIntrinsics2.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/intrinsics/string/TestStringIntrinsics2.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/loopopts/TestArraysFillDeadControl.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/loopopts/TestArraysFillDeadControl.java Wed Jul 05 21:20:45 2017 +0200 @@ -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(); + } + } +} diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/rangechecks/PowerOf2SizedArraysChecks.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/rangechecks/PowerOf2SizedArraysChecks.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 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 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); + } + } +} diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/runtime/safepoints/TestRegisterRestoring.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/runtime/safepoints/TestRegisterRestoring.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; + } + } + } +} + diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/stable/TestStableMemoryBarrier.java --- a/hotspot/test/compiler/stable/TestStableMemoryBarrier.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/stable/TestStableMemoryBarrier.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/types/TestMeetIncompatibleInterfaceArrays.java --- a/hotspot/test/compiler/types/TestMeetIncompatibleInterfaceArrays.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/types/TestMeetIncompatibleInterfaceArrays.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java --- a/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 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); diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/gc/g1/TestPLABOutput.java --- a/hotspot/test/gc/g1/TestPLABOutput.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/gc/g1/TestPLABOutput.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f hotspot/test/testlibrary_tests/whitebox/vm_flags/IntxTest.java --- a/hotspot/test/testlibrary_tests/whitebox/vm_flags/IntxTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/hotspot/test/testlibrary_tests/whitebox/vm_flags/IntxTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -24,6 +24,7 @@ /* * @test IntxTest * @bug 8028756 + * @ignore 8148758 * @library /testlibrary /test/lib * @modules java.management/sun.management * @build IntxTest diff -r f535b24cd53a -r 6c644cca3f3f jaxp/.hgtags --- a/jaxp/.hgtags Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/.hgtags Wed Jul 05 21:20:45 2017 +0200 @@ -347,3 +347,4 @@ 9dcf193c0b6cf22c0e89e2dc705a2c0f520ae064 jdk-9+102 bdbf2342b21bd8ecad1b4e6499a0dfb314952bd7 jdk-9+103 58448465334e1d8bf1cfc09052783937b1cc21c0 jdk-9+104 +5acf6071d4d610068a19c79e004ba8e59cf1b087 jdk-9+105 diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java Wed Jul 05 21:20:45 2017 +0200 @@ -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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializer.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializer.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializer.java Wed Jul 05 21:20:45 2017 +0200 @@ -37,7 +37,7 @@ * @author Scott Boag * @author Assaf Arkin * - * @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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 { diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/ElementState.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/ElementState.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/ElementState.java Wed Jul 05 21:20:45 2017 +0200 @@ -31,7 +31,7 @@ * @author Assaf Arkin * @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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java Wed Jul 05 21:20:45 2017 +0200 @@ -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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Encodings.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Encodings.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Encodings.java Wed Jul 05 21:20:45 2017 +0200 @@ -37,7 +37,7 @@ * * @author Assaf Arkin * - * @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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLdtd.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLdtd.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLdtd.java Wed Jul 05 21:20:45 2017 +0200 @@ -46,7 +46,7 @@ * * @author Assaf Arkin * - * @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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/IndentPrinter.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/IndentPrinter.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/IndentPrinter.java Wed Jul 05 21:20:45 2017 +0200 @@ -34,7 +34,7 @@ * * @author Assaf Arkin * - * @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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/LineSeparator.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/LineSeparator.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/LineSeparator.java Wed Jul 05 21:20:45 2017 +0200 @@ -27,7 +27,7 @@ * @author Assaf Arkin * @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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Method.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Method.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Method.java Wed Jul 05 21:20:45 2017 +0200 @@ -27,7 +27,7 @@ * @author Assaf Arkin * @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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/OutputFormat.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/OutputFormat.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/OutputFormat.java Wed Jul 05 21:20:45 2017 +0200 @@ -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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Printer.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Printer.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Printer.java Wed Jul 05 21:20:45 2017 +0200 @@ -42,7 +42,7 @@ * * @author Assaf Arkin * - * @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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Serializer.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Serializer.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/Serializer.java Wed Jul 05 21:20:45 2017 +0200 @@ -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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java Wed Jul 05 21:20:45 2017 +0200 @@ -37,7 +37,7 @@ * @author Scott Boag * @author Assaf Arkin * - * @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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactoryImpl.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactoryImpl.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactoryImpl.java Wed Jul 05 21:20:45 2017 +0200 @@ -36,7 +36,7 @@ * @author Scott Boag * @author Assaf Arkin * - * @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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/TextSerializer.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/TextSerializer.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/TextSerializer.java Wed Jul 05 21:20:45 2017 +0200 @@ -60,7 +60,7 @@ * @author Assaf Arkin * @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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XML11Serializer.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XML11Serializer.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XML11Serializer.java Wed Jul 05 21:20:45 2017 +0200 @@ -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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XMLSerializer.java --- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XMLSerializer.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/XMLSerializer.java Wed Jul 05 21:20:45 2017 +0200 @@ -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}. diff -r f535b24cd53a -r 6c644cca3f3f jaxws/.hgtags --- a/jaxws/.hgtags Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxws/.hgtags Wed Jul 05 21:20:45 2017 +0200 @@ -350,3 +350,4 @@ 0868b93587cc99df3a4f4d3817a1aa756bea60ab jdk-9+102 eb5e005a17e50d7d8340daaf21a5c3c5ae358d68 jdk-9+103 0f557aa096e2a5c9733d406d8cf0c2e6b1f8ca60 jdk-9+104 +45a666c58e4c7d07638878684ad09decb3229dc9 jdk-9+105 diff -r f535b24cd53a -r 6c644cca3f3f jaxws/src/java.xml.ws/share/classes/com/sun/xml/internal/ws/api/pipe/ThreadHelper.java --- a/jaxws/src/java.xml.ws/share/classes/com/sun/xml/internal/ws/api/pipe/ThreadHelper.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jaxws/src/java.xml.ws/share/classes/com/sun/xml/internal/ws/api/pipe/ThreadHelper.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 () { + threadFactory = AccessController.doPrivileged( + new PrivilegedAction () { @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 cls = Thread.class; + Constructor 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 ctr; + JDK9ThreadFactory(Constructor 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() { - @Override - public Thread run() { - try { - return (Thread) THREAD_CONSTRUCTOR.newInstance(r); - } catch (Exception e) { - return new Thread(r); - } + new PrivilegedAction() { + @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."); - } } diff -r f535b24cd53a -r 6c644cca3f3f jdk/.hgtags --- a/jdk/.hgtags Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/.hgtags Wed Jul 05 21:20:45 2017 +0200 @@ -347,3 +347,4 @@ 6eb3c8132e489dab81adde4ce29844904ce15482 jdk-9+102 eee1ced1d8e78293f2a004af818ca474387dbebf jdk-9+103 8faf1aec77a9517c69d2f4d8dd146429852ace7f jdk-9+104 +55518739e399a1066c8613e19100d51b38d9f223 jdk-9+105 diff -r f535b24cd53a -r 6c644cca3f3f jdk/make/data/fontconfig/aix.fontconfig.properties --- a/jdk/make/data/fontconfig/aix.fontconfig.properties Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/make/data/fontconfig/aix.fontconfig.properties Wed Jul 05 21:20:45 2017 +0200 @@ -1,6 +1,6 @@ # # -# Copyright 2013 SAP AG. All rights reserved. +# Copyright (c) 2013 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/make/data/tzdata/VERSION --- a/jdk/make/data/tzdata/VERSION Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/make/data/tzdata/VERSION Wed Jul 05 21:20:45 2017 +0200 @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2015g +tzdata2016a diff -r f535b24cd53a -r 6c644cca3f3f jdk/make/data/tzdata/asia --- a/jdk/make/data/tzdata/asia Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/make/data/tzdata/asia Wed Jul 05 21:20:45 2017 +0200 @@ -897,6 +897,15 @@ 9:00 - TLT # India + +# From Ian P. Beacock, in "A brief history of (modern) time", The Atlantic +# http://www.theatlantic.com/technology/archive/2015/12/the-creation-of-modern-time/421419/ +# (2015-12-22): +# In January 1906, several thousand cotton-mill workers rioted on the +# outskirts of Bombay.... They were protesting the proposed abolition of +# local time in favor of Indian Standard Time.... Journalists called this +# dispute the "Battle of the Clocks." It lasted nearly half a century. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata 5:53:20 - HMT 1941 Oct # Howrah Mean Time? @@ -1107,8 +1116,15 @@ Rule Iran 2032 2033 - Sep 21 0:00 0 S Rule Iran 2034 2035 - Mar 22 0:00 1:00 D Rule Iran 2034 2035 - Sep 22 0:00 0 S -Rule Iran 2036 2037 - Mar 21 0:00 1:00 D -Rule Iran 2036 2037 - Sep 21 0:00 0 S +# +# The following rules are approximations starting in the year 2038. +# These are the best post-2037 approximations available, given the +# restrictions of a single rule using a Gregorian-based data format. +# At some point this table will need to be extended, though quite +# possibly Iran will change the rules first. +Rule Iran 2036 max - Mar 21 0:00 1:00 D +Rule Iran 2036 max - Sep 21 0:00 0 S + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Tehran 3:25:44 - LMT 1916 3:25:44 - TMT 1946 # Tehran Mean Time @@ -2134,8 +2150,8 @@ # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -Rule Pakistan 2002 only - Apr Sun>=2 0:01 1:00 S -Rule Pakistan 2002 only - Oct Sun>=2 0:01 0 - +Rule Pakistan 2002 only - Apr Sun>=2 0:00 1:00 S +Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 - Rule Pakistan 2008 only - Jun 1 0:00 1:00 S Rule Pakistan 2008 2009 - Nov 1 0:00 0 - Rule Pakistan 2009 only - Apr 15 0:00 1:00 S diff -r f535b24cd53a -r 6c644cca3f3f jdk/make/data/tzdata/backward --- a/jdk/make/data/tzdata/backward Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/make/data/tzdata/backward Wed Jul 05 21:20:45 2017 +0200 @@ -46,6 +46,7 @@ Link America/Toronto America/Montreal Link America/Rio_Branco America/Porto_Acre Link America/Argentina/Cordoba America/Rosario +Link America/Tijuana America/Santa_Isabel Link America/Denver America/Shiprock Link America/Port_of_Spain America/Virgin Link Pacific/Auckland Antarctica/South_Pole diff -r f535b24cd53a -r 6c644cca3f3f jdk/make/data/tzdata/europe --- a/jdk/make/data/tzdata/europe Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/make/data/tzdata/europe Wed Jul 05 21:20:45 2017 +0200 @@ -2616,13 +2616,20 @@ # Note: Effective 2008-03-01, (75) Chita Oblast and (80) Agin-Buryat # Autonomous Okrug merged to form (92, RU-ZAB) Zabaykalsky Krai. +# From Alexander Krivenyshev (2016-01-02): +# [The] time zone in the Trans-Baikal Territory (Zabaykalsky Krai) - +# Asia/Chita [is changing] from UTC+8 to UTC+9. Effective date will +# be March 27, 2016 at 2:00am.... +# http://publication.pravo.gov.ru/Document/View/000120151230010 + Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15 8:00 - YAKT 1930 Jun 21 # Yakutsk Time 9:00 Russia YAK%sT 1991 Mar 31 2:00s 8:00 Russia YAK%sT 1992 Jan 19 2:00s 9:00 Russia YAK%sT 2011 Mar 27 2:00s 10:00 - YAKT 2014 Oct 26 2:00s - 8:00 - IRKT + 8:00 - IRKT 2016 Mar 27 2:00 + 9:00 - YAKT # From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29): @@ -3177,6 +3184,12 @@ # It's officially announced now by the Ministry of Energy. # Turkey delays winter time to 8th of November 04:00 # http://www.aa.com.tr/tr/turkiye/yaz-saati-uygulamasi-8-kasimda-sona-erecek/362217 +# +# From BBC News (2015-10-25): +# Confused Turks are asking "what's the time?" after automatic clocks defied a +# government decision ... "For the next two weeks #Turkey is on EEST... Erdogan +# Engineered Standard Time," said Twitter user @aysekarahasan. +# http://www.bbc.com/news/world-europe-34631326 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Turkey 1916 only - May 1 0:00 1:00 S diff -r f535b24cd53a -r 6c644cca3f3f jdk/make/data/tzdata/northamerica --- a/jdk/make/data/tzdata/northamerica Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/make/data/tzdata/northamerica Wed Jul 05 21:20:45 2017 +0200 @@ -348,6 +348,16 @@ # Statue 175 closer in synch with the US Congress' intent.... # http://www.legis.state.wi.us/2007/data/acts/07Act3.pdf +# From an email administrator of the City of Fort Pierre, SD (2015-12-21): +# Fort Pierre is technically located in the Mountain time zone as is +# the rest of Stanley County. Most of Stanley County and Fort Pierre +# uses the Central time zone due to doing most of their business in +# Pierre so it simplifies schedules. I have lived in Stanley County +# all my life and it has been that way since I can remember. (43 years!) +# +# From Paul Eggert (2015-12-25): +# Assume this practice predates 1970, so Fort Pierre can use America/Chicago. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER Rule Chicago 1920 only - Jun 13 2:00 1:00 D Rule Chicago 1920 1921 - Oct lastSun 2:00 0 S @@ -504,6 +514,12 @@ # For lack of better information, assume that Metlakatla's # abandonment of use of daylight saving resulted from the 1983 vote. +# From Steffen Thorsen (2015-11-09): +# It seems Metlakatla did go off PST on Sunday, November 1, changing +# their time to AKST and are going to follow Alaska's DST, switching +# between AKST and AKDT from now on.... +# http://www.krbd.org/2015/10/30/annette-island-times-they-are-a-changing/ + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Juneau 15:02:19 - LMT 1867 Oct 18 -8:57:41 - LMT 1900 Aug 20 12:00 @@ -529,7 +545,8 @@ -8:00 US P%sT 1946 -8:00 - PST 1969 -8:00 US P%sT 1983 Oct 30 2:00 - -8:00 - PST + -8:00 - PST 2015 Nov 1 2:00 + -9:00 US AK%sT Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18 -9:18:55 - LMT 1900 Aug 20 12:00 -9:00 - YST 1942 @@ -2610,25 +2627,6 @@ -8:00 US P%sT 2002 Feb 20 -8:00 Mexico P%sT 2010 -8:00 US P%sT -# Baja California (away from US border) -Zone America/Santa_Isabel -7:39:28 - LMT 1922 Jan 1 0:20:32 - -7:00 - MST 1924 - -8:00 - PST 1927 Jun 10 23:00 - -7:00 - MST 1930 Nov 15 - -8:00 - PST 1931 Apr 1 - -8:00 1:00 PDT 1931 Sep 30 - -8:00 - PST 1942 Apr 24 - -8:00 1:00 PWT 1945 Aug 14 23:00u - -8:00 1:00 PPT 1945 Nov 12 # Peace - -8:00 - PST 1948 Apr 5 - -8:00 1:00 PDT 1949 Jan 14 - -8:00 - PST 1954 - -8:00 CA P%sT 1961 - -8:00 - PST 1976 - -8:00 US P%sT 1996 - -8:00 Mexico P%sT 2001 - -8:00 US P%sT 2002 Feb 20 - -8:00 Mexico P%sT # From Paul Eggert (2006-03-22): # Formerly there was an America/Ensenada zone, which differed from # America/Tijuana only in that it did not observe DST from 1976 @@ -2641,6 +2639,13 @@ # other than America/Tijuana for Baja, but it's not clear yet what its # name or contents should be. # +# From Paul Eggert (2015-10-08): +# Formerly there was an America/Santa_Isabel zone, but this appears to +# have come from a misreading of +# http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010 +# It has been moved to the 'backward' file. +# +# # Revillagigedo Is # no information @@ -2715,17 +2720,7 @@ -4:00 US A%sT # Cayman Is - -# From Paul Eggert (2015-05-15): -# The Cayman government has decided to introduce DST in 2016, the idea being -# to keep in sync with New York. The legislation hasn't passed but the change -# seems quite likely. See: Meade B. Cayman 27. -# http://www.cayman27.com.ky/2015/05/15/clock-ticks-toward-daylight-saving-time-in-cayman - -Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown - -5:07:11 - KMT 1912 Feb # Kingston Mean Time - -5:00 - EST 2016 - -5:00 US E%sT +# See America/Panama. # Costa Rica @@ -3248,6 +3243,7 @@ Zone America/Panama -5:18:08 - LMT 1890 -5:19:36 - CMT 1908 Apr 22 # Colón Mean Time -5:00 - EST +Link America/Panama America/Cayman # Puerto Rico # There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'. diff -r f535b24cd53a -r 6c644cca3f3f jdk/make/data/tzdata/zone.tab --- a/jdk/make/data/tzdata/zone.tab Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/make/data/tzdata/zone.tab Wed Jul 05 21:20:45 2017 +0200 @@ -306,8 +306,7 @@ MX +2838-10605 America/Chihuahua Mexican Mountain Time - Chihuahua away from US border MX +2934-10425 America/Ojinaga US Mountain Time - Chihuahua near US border MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora -MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border -MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border +MX +3232-11701 America/Tijuana US Pacific Time - Baja California state MX +2048-10515 America/Bahia_Banderas Mexican Central Time - Bahia de Banderas MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia MY +0133+11020 Asia/Kuching Sabah & Sarawak @@ -437,10 +436,10 @@ US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona (except Navajo) US +340308-1181434 America/Los_Angeles Pacific Time -US +550737-1313435 America/Metlakatla Pacific Standard Time - Annette Island, Alaska US +611305-1495401 America/Anchorage Alaska Time US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle +US +550737-1313435 America/Metlakatla Alaska Time - Annette Island US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck US +643004-1652423 America/Nome Alaska Time - west Alaska US +515248-1763929 America/Adak Aleutian Islands diff -r f535b24cd53a -r 6c644cca3f3f jdk/make/gensrc/Gensrc-jdk.jdi.gmk --- a/jdk/make/gensrc/Gensrc-jdk.jdi.gmk Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/make/gensrc/Gensrc-jdk.jdi.gmk Wed Jul 05 21:20:45 2017 +0200 @@ -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 ################################################################################ diff -r f535b24cd53a -r 6c644cca3f3f jdk/make/launcher/LauncherCommon.gmk --- a/jdk/make/launcher/LauncherCommon.gmk Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/make/launcher/LauncherCommon.gmk Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/make/lib/LibCommon.gmk --- a/jdk/make/lib/LibCommon.gmk Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/make/lib/LibCommon.gmk Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/make/src/classes/build/tools/generatecharacter/CharacterName.java --- a/jdk/make/src/classes/build/tools/generatecharacter/CharacterName.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/make/src/classes/build/tools/generatecharacter/CharacterName.java Wed Jul 05 21:20:45 2017 +0200 @@ -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("") && spec.getOldName() != null) { - if (spec.getOldName().length() != 0) + if (cp == 0x7) // 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); diff -r f535b24cd53a -r 6c644cca3f3f jdk/make/src/classes/build/tools/tzdb/ZoneRules.java --- a/jdk/make/src/classes/build/tools/tzdb/ZoneRules.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/make/src/classes/build/tools/tzdb/ZoneRules.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, 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 @@ -232,7 +232,7 @@ static void writeRule(ZoneOffsetTransitionRule rule, DataOutput out) throws IOException { int month = rule.getMonth().getValue(); byte dom = (byte)rule.getDayOfMonthIndicator(); - int dow = rule.getDayOfWeek().getValue(); + int dow = (rule.getDayOfWeek() == null ? -1 : rule.getDayOfWeek().getValue()); LocalTime time = rule.getLocalTime(); boolean timeEndOfDay = rule.isMidnightEndOfDay(); TimeDefinition timeDefinition = rule.getTimeDefinition(); diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/aix/classes/sun/nio/ch/AixAsynchronousChannelProvider.java --- a/jdk/src/java.base/aix/classes/sun/nio/ch/AixAsynchronousChannelProvider.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/aix/classes/sun/nio/ch/AixAsynchronousChannelProvider.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012 SAP AG. All rights reserved. + * Copyright (c) 2012 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/aix/classes/sun/nio/ch/AixPollPort.java --- a/jdk/src/java.base/aix/classes/sun/nio/ch/AixPollPort.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/aix/classes/sun/nio/ch/AixPollPort.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012 SAP AG. All rights reserved. + * Copyright (c) 2012 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/aix/classes/sun/nio/fs/AixFileStore.java --- a/jdk/src/java.base/aix/classes/sun/nio/fs/AixFileStore.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/aix/classes/sun/nio/fs/AixFileStore.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2013 SAP AG. All rights reserved. + * Copyright (c) 2013 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/aix/classes/sun/nio/fs/AixFileSystem.java --- a/jdk/src/java.base/aix/classes/sun/nio/fs/AixFileSystem.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/aix/classes/sun/nio/fs/AixFileSystem.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2013 SAP AG. All rights reserved. + * Copyright (c) 2013 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java --- a/jdk/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2013 SAP AG. All rights reserved. + * Copyright (c) 2013 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/aix/classes/sun/nio/fs/AixNativeDispatcher.java --- a/jdk/src/java.base/aix/classes/sun/nio/fs/AixNativeDispatcher.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/aix/classes/sun/nio/fs/AixNativeDispatcher.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2013 SAP AG. All rights reserved. + * Copyright (c) 2013 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/aix/native/libnio/ch/AixPollPort.c --- a/jdk/src/java.base/aix/native/libnio/ch/AixPollPort.c Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/aix/native/libnio/ch/AixPollPort.c Wed Jul 05 21:20:45 2017 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2012 SAP AG. All rights reserved. + * Copyright (c) 2012 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/aix/native/libnio/fs/AixNativeDispatcher.c --- a/jdk/src/java.base/aix/native/libnio/fs/AixNativeDispatcher.c Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/aix/native/libnio/fs/AixNativeDispatcher.c Wed Jul 05 21:20:45 2017 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2013 SAP AG. All rights reserved. + * Copyright (c) 2013 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/java/io/ObjectInputStream.java --- a/jdk/src/java.base/share/classes/java/io/ObjectInputStream.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/io/ObjectInputStream.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; } diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/java/lang/Character.java --- a/jdk/src/java.base/share/classes/java/lang/Character.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/Character.java Wed Jul 05 21:20:45 2017 +0200 @@ -10126,7 +10126,7 @@ *
{@code * Character.UnicodeBlock.of(codePoint).toString().replace('_', ' ') * + " " - * + Integer.toHexString(codePoint).toUpperCase(Locale.ENGLISH); + * + Integer.toHexString(codePoint).toUpperCase(Locale.ROOT); * * }
* @@ -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. + *

+ * Note: if a character is not assigned a name by the UnicodeData + * file (part of the Unicode Character Database maintained by the Unicode + * Consortium), its name is defined as the result of expression + * + *

{@code + * Character.UnicodeBlock.of(codePoint).toString().replace('_', ' ') + * + " " + * + Integer.toHexString(codePoint).toUpperCase(Locale.ROOT); + * + * }
+ *

+ * 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); } } diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/java/lang/CharacterName.java --- a/jdk/src/java.base/share/classes/java/lang/CharacterName.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/CharacterName.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 refStrPool; - private static int[][] lookup; + private static SoftReference 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 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; + } } diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/java/lang/ProcessHandleImpl.java --- a/jdk/src/java.base/share/classes/java/lang/ProcessHandleImpl.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/ProcessHandleImpl.java Wed Jul 05 21:20:45 2017 +0200 @@ -42,8 +42,6 @@ import java.util.stream.IntStream; import java.util.stream.Stream; -import sun.misc.InnocuousThread; - import static java.security.AccessController.doPrivileged; /** diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/java/lang/invoke/Invokers.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/Invokers.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/Invokers.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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 @@ -305,9 +305,7 @@ /** Static definition of MethodHandle.invokeExact checking code. */ /*non-public*/ static @ForceInline - void checkExactType(Object mhObj, Object expectedObj) { - MethodHandle mh = (MethodHandle) mhObj; - MethodType expected = (MethodType) expectedObj; + void checkExactType(MethodHandle mh, MethodType expected) { MethodType actual = mh.type(); if (actual != expected) throw newWrongMethodTypeException(expected, actual); @@ -319,9 +317,7 @@ */ /*non-public*/ static @ForceInline - Object checkGenericType(Object mhObj, Object expectedObj) { - MethodHandle mh = (MethodHandle) mhObj; - MethodType expected = (MethodType) expectedObj; + MethodHandle checkGenericType(MethodHandle mh, MethodType expected) { return mh.asType(expected); /* Maybe add more paths here. Possible optimizations: * for (R)MH.invoke(a*), @@ -390,14 +386,13 @@ /** Static definition of MethodHandle.invokeGeneric checking code. */ /*non-public*/ static @ForceInline - Object getCallSiteTarget(Object site) { - return ((CallSite)site).getTarget(); + MethodHandle getCallSiteTarget(CallSite site) { + return site.getTarget(); } /*non-public*/ static @ForceInline - void checkCustomized(Object o) { - MethodHandle mh = (MethodHandle)o; + void checkCustomized(MethodHandle mh) { if (MethodHandleImpl.isCompileConstant(mh)) return; if (mh.form.customized == null) { maybeCustomize(mh); @@ -425,13 +420,13 @@ try { NamedFunction nfs[] = { NF_checkExactType = new NamedFunction(Invokers.class - .getDeclaredMethod("checkExactType", Object.class, Object.class)), + .getDeclaredMethod("checkExactType", MethodHandle.class, MethodType.class)), NF_checkGenericType = new NamedFunction(Invokers.class - .getDeclaredMethod("checkGenericType", Object.class, Object.class)), + .getDeclaredMethod("checkGenericType", MethodHandle.class, MethodType.class)), NF_getCallSiteTarget = new NamedFunction(Invokers.class - .getDeclaredMethod("getCallSiteTarget", Object.class)), + .getDeclaredMethod("getCallSiteTarget", CallSite.class)), NF_checkCustomized = new NamedFunction(Invokers.class - .getDeclaredMethod("checkCustomized", Object.class)) + .getDeclaredMethod("checkCustomized", MethodHandle.class)) }; // Each nf must be statically invocable or we get tied up in our bootstraps. assert(InvokerBytecodeGenerator.isStaticallyInvocable(nfs)); diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Wed Jul 05 21:20:45 2017 +0200 @@ -856,7 +856,8 @@ * @return the desired method handle * @throws NoSuchMethodException if the method does not exist * @throws IllegalAccessException if access checking fails, - * or if the method is {@code static} + * or if the method is {@code static}, + * or if the method is {@code private} method of interface, * or if the method's variable arity modifier bit * is set and {@code asVarargsCollector} fails * @exception SecurityException if a security manager is present and it diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java --- a/jdk/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java Wed Jul 05 21:20:45 2017 +0200 @@ -182,22 +182,30 @@ private static final ConcurrentMap CACHE; + /** + * Dump generated classes to disk, for debugging purposes. + */ + private static final ProxyClassesDumper DUMPER; + static { // Poke the privileged block once, taking everything we need: - final Object[] values = new Object[3]; + final Object[] values = new Object[4]; AccessController.doPrivileged((PrivilegedAction) () -> { values[0] = System.getProperty("java.lang.invoke.stringConcat"); values[1] = Boolean.getBoolean("java.lang.invoke.stringConcat.cache"); values[2] = Boolean.getBoolean("java.lang.invoke.stringConcat.debug"); + values[3] = System.getProperty("java.lang.invoke.stringConcat.dumpClasses"); return null; }); final String strategy = (String) values[0]; CACHE_ENABLE = (Boolean) values[1]; DEBUG = (Boolean) values[2]; + final String dumpPath = (String) values[3]; STRATEGY = (strategy == null) ? DEFAULT_STRATEGY : Strategy.valueOf(strategy); CACHE = CACHE_ENABLE ? new ConcurrentHashMap<>() : null; + DUMPER = (dumpPath == null) ? null : ProxyClassesDumper.getInstance(dumpPath); } private static final class Key { @@ -552,6 +560,12 @@ Objects.requireNonNull(o, "Cannot accept null constants"); } + if ((lookup.lookupModes() & MethodHandles.Lookup.PRIVATE) == 0) { + throw new StringConcatException(String.format( + "Invalid caller: %s", + lookup.lookupClass().getName())); + } + int cCount = 0; int oCount = 0; if (generateRecipe) { @@ -1035,6 +1049,10 @@ final byte[] classBytes = cw.toByteArray(); final Class innerClass = UNSAFE.defineAnonymousClass(targetClass, classBytes, null); + if (DUMPER != null) { + DUMPER.dumpClass(innerClass.getName(), classBytes); + } + try { UNSAFE.ensureClassInitialized(innerClass); return lookup.findStatic(innerClass, NAME_FACTORY, args); diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/java/time/ZoneOffset.java --- a/jdk/src/java.base/share/classes/java/time/ZoneOffset.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/time/ZoneOffset.java Wed Jul 05 21:20:45 2017 +0200 @@ -150,7 +150,7 @@ */ public static final ZoneOffset UTC = ZoneOffset.ofTotalSeconds(0); /** - * Constant for the maximum supported offset. + * Constant for the minimum supported offset. */ public static final ZoneOffset MIN = ZoneOffset.ofTotalSeconds(-MAX_SECONDS); /** diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/java/time/ZonedDateTime.java --- a/jdk/src/java.base/share/classes/java/time/ZonedDateTime.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/time/ZonedDateTime.java Wed Jul 05 21:20:45 2017 +0200 @@ -1707,13 +1707,18 @@ * Note that this is a different approach to that used by days, months and years, * thus adding one day is not the same as adding 24 hours. *

- * For example, consider a time-zone where the spring DST cutover means that the - * local times 01:00 to 01:59 occur twice changing from offset +02:00 to +01:00. + * For example, consider a time-zone, such as 'Europe/Paris', where the + * Autumn DST cutover means that the local times 02:00 to 02:59 occur twice + * changing from offset +02:00 in summer to +01:00 in winter. *

    - *
  • Adding one hour to 00:30+02:00 will result in 01:30+02:00 - *
  • Adding one hour to 01:30+02:00 will result in 01:30+01:00 - *
  • Adding one hour to 01:30+01:00 will result in 02:30+01:00 - *
  • Adding three hours to 00:30+02:00 will result in 02:30+01:00 + *
  • Adding one hour to 01:30+02:00 will result in 02:30+02:00 + * (both in summer time) + *
  • Adding one hour to 02:30+02:00 will result in 02:30+01:00 + * (moving from summer to winter time) + *
  • Adding one hour to 02:30+01:00 will result in 03:30+01:00 + * (both in winter time) + *
  • Adding three hours to 01:30+02:00 will result in 03:30+01:00 + * (moving from summer to winter time) *
*

* This instance is immutable and unaffected by this method call. @@ -1948,13 +1953,18 @@ * Note that this is a different approach to that used by days, months and years, * thus subtracting one day is not the same as adding 24 hours. *

- * For example, consider a time-zone where the spring DST cutover means that the - * local times 01:00 to 01:59 occur twice changing from offset +02:00 to +01:00. + * For example, consider a time-zone, such as 'Europe/Paris', where the + * Autumn DST cutover means that the local times 02:00 to 02:59 occur twice + * changing from offset +02:00 in summer to +01:00 in winter. *

    - *
  • Subtracting one hour from 02:30+01:00 will result in 01:30+02:00 - *
  • Subtracting one hour from 01:30+01:00 will result in 01:30+02:00 - *
  • Subtracting one hour from 01:30+02:00 will result in 00:30+01:00 - *
  • Subtracting three hours from 02:30+01:00 will result in 00:30+02:00 + *
  • Subtracting one hour from 03:30+01:00 will result in 02:30+01:00 + * (both in winter time) + *
  • Subtracting one hour from 02:30+01:00 will result in 02:30+02:00 + * (moving from winter to summer time) + *
  • Subtracting one hour from 02:30+02:00 will result in 01:30+02:00 + * (both in summer time) + *
  • Subtracting three hours from 03:30+01:00 will result in 01:30+02:00 + * (moving from winter to summer time) *
*

* This instance is immutable and unaffected by this method call. diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/java/time/temporal/ChronoUnit.java --- a/jdk/src/java.base/share/classes/java/time/temporal/ChronoUnit.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/time/temporal/ChronoUnit.java Wed Jul 05 21:20:45 2017 +0200 @@ -184,8 +184,8 @@ * Artificial unit that represents the concept of forever. * This is primarily used with {@link TemporalField} to represent unbounded fields * such as the year or era. - * The estimated duration of the era is artificially defined as the largest duration - * supported by {@code Duration}. + * The estimated duration of this unit is artificially defined as the largest duration + * supported by {@link Duration}. */ FOREVER("Forever", Duration.ofSeconds(Long.MAX_VALUE, 999_999_999)); diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/java/util/Scanner.java --- a/jdk/src/java.base/share/classes/java/util/Scanner.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/util/Scanner.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 patternCache = - new LRUCache(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; + } + } } diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/java/util/regex/Grapheme.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.base/share/classes/java/util/regex/Grapheme.java Wed Jul 05 21:20:45 2017 +0200 @@ -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}. + *

+ * 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; + } +} diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/java/util/regex/Pattern.java --- a/jdk/src/java.base/share/classes/java/util/regex/Pattern.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/java/util/regex/Pattern.java Wed Jul 05 21:20:45 2017 +0200 @@ -109,6 +109,8 @@ * ({@link java.lang.Character#MIN_CODE_POINT Character.MIN_CODE_POINT} *  <= {@code 0x}h...h <=  * {@link java.lang.Character#MAX_CODE_POINT Character.MAX_CODE_POINT}) + * \N{name} + * The character with Unicode character name 'name' * {@code \t} * The tab character ('\u0009') * {@code \n} @@ -243,6 +245,8 @@ * The end of a line * {@code \b} * A word boundary + * {@code \b{g}} + * A Unicode extended grapheme cluster boundary * {@code \B} * A non-word boundary * {@code \A} @@ -263,6 +267,11 @@ * * *   + * Unicode Extended Grapheme matcher + * {@code \X} + * Any Unicode extended grapheme cluster + * + *   * Greedy quantifiers * * X{@code ?} @@ -546,12 +555,21 @@ * {@code "\\u2014"}, while not equal, compile into the same pattern, which * matches the character with hexadecimal value {@code 0x2014}. *

- * A Unicode character can also be represented in a regular-expression by - * using its Hex notation(hexadecimal code point value) directly as described in construct - * \x{...}, for example a supplementary character U+2011F - * can be specified as \x{2011F}, instead of two consecutive - * Unicode escape sequences of the surrogate pair - * \uD840\uDD1F. + * A Unicode character can also be represented by using its Hex notation + * (hexadecimal code point value) directly as described in construct + * \x{...}, for example a supplementary character U+2011F can be + * specified as \x{2011F}, instead of two consecutive Unicode escape + * sequences of the surrogate pair \uD840\uDD1F. + *

+ * Unicode character names are supported by the named character construct + * \N{...}, for example, \N{WHITE SMILING FACE} + * specifies character \u263A. The character names supported + * by this class are the valid Unicode character names matched by + * {@link java.lang.Character#codePointOf(String) Character.codePointOf(name)}. + *

+ * + * Unicode extended grapheme clusters are supported by the grapheme + * cluster matcher {@code \X} and the corresponding boundary matcher {@code \b{g}}. *

* Unicode scripts, blocks, categories and binary properties are written with * the {@code \p} and {@code \P} constructs as in Perl. @@ -679,22 +697,12 @@ *

Perl constructs not supported by this class:

* *
    - *
  • Predefined character classes (Unicode character) - *

    \X    Match Unicode - * - * extended grapheme cluster - *

  • - * *
  • The backreference constructs, \g{n} for * the nthcapturing group and * \g{name} for * named-capturing group. *

  • * - *
  • The named character construct, \N{name} - * for a Unicode character by its name. - *

  • - * *
  • The conditional constructs * {@code (?(}condition{@code )}X{@code )} and * {@code (?(}condition{@code )}X{@code |}Y{@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 { diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/jdk/internal/logger/BootstrapLogger.java --- a/jdk/src/java.base/share/classes/jdk/internal/logger/BootstrapLogger.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/jdk/internal/logger/BootstrapLogger.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/jdk/internal/misc/InnocuousThread.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.base/share/classes/jdk/internal/misc/InnocuousThread.java Wed Jul 05 21:20:45 2017 +0200 @@ -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) () -> + { return new ThreadGroup(root, "InnocuousThreadGroup"); }); + } catch (Exception e) { + throw new Error(e); + } + } +} diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/jdk/internal/ref/CleanerImpl.java --- a/jdk/src/java.base/share/classes/jdk/internal/ref/CleanerImpl.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/jdk/internal/ref/CleanerImpl.java Wed Jul 05 21:20:45 2017 +0200 @@ -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. diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/jdk/internal/vm/annotation/ReservedStackAccess.java --- a/jdk/src/java.base/share/classes/jdk/internal/vm/annotation/ReservedStackAccess.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/jdk/internal/vm/annotation/ReservedStackAccess.java Wed Jul 05 21:20:45 2017 +0200 @@ -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}) diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/sun/misc/InnocuousThread.java --- a/jdk/src/java.base/share/classes/sun/misc/InnocuousThread.java Wed Jul 05 21:19:33 2017 +0200 +++ /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) () -> - { return new ThreadGroup(root, "InnocuousThreadGroup"); }); - } catch (Exception e) { - throw new Error(e); - } - } -} diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/sun/misc/LRUCache.java --- a/jdk/src/java.base/share/classes/sun/misc/LRUCache.java Wed Jul 05 21:19:33 2017 +0200 +++ /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 { - - 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; - } - -} diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/sun/net/www/http/KeepAliveCache.java --- a/jdk/src/java.base/share/classes/sun/net/www/http/KeepAliveCache.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/sun/net/www/http/KeepAliveCache.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/sun/net/www/http/KeepAliveStream.java --- a/jdk/src/java.base/share/classes/sun/net/www/http/KeepAliveStream.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/sun/net/www/http/KeepAliveStream.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/sun/nio/ch/Invoker.java --- a/jdk/src/java.base/share/classes/sun/nio/ch/Invoker.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/sun/nio/ch/Invoker.java Wed Jul 05 21:20:45 2017 +0200 @@ -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); } diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/sun/nio/ch/ThreadPool.java --- a/jdk/src/java.base/share/classes/sun/nio/ch/ThreadPool.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/sun/nio/ch/ThreadPool.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 action = () -> { - Thread t = new sun.misc.InnocuousThread(r); + Thread t = new InnocuousThread(r); t.setDaemon(true); return t; }; diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java --- a/jdk/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 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 @@ -275,6 +275,9 @@ String XJT[] = new String[] {"Xinjiang Standard Time", "XJT", "Xinjiang Daylight Time", "XJDT", "Xinjiang Time", "XJT"}; + String YAKT[] = new String[] {"Yakutsk Time", "YAKT", + "Yakutsk Summer Time", "YAKST", + "Yakutsk Time", "YAKT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -486,7 +489,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", PST}, + {"America/Metlakatla", AKST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Pierre & Miquelon Standard Time", "PMST", "Pierre & Miquelon Daylight Time", "PMDT", @@ -607,7 +610,7 @@ "Brunei Summer Time", "BNST", "Brunei Time", "BNT"}}, {"Asia/Calcutta", IST}, - {"Asia/Chita", IRKT}, + {"Asia/Chita", YAKT}, {"Asia/Choibalsan", new String[] {"Choibalsan Time", "CHOT", "Choibalsan Summer Time", "CHOST", "Choibalsan Time", "CHOT"}}, @@ -648,10 +651,7 @@ {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, - {"Asia/Khandyga", new String[] {"Khandyga Time", "YAKT", - "Khandyga Summer Time", "YAKST", - "Khandyga Time", "YAKT"}}, - + {"Asia/Khandyga", YAKT}, {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, @@ -717,9 +717,7 @@ {"Asia/Vladivostok", new String[] {"Vladivostok Time", "VLAT", "Vladivostok Summer Time", "VLAST", "Vladivostok Time", "VLAT"}}, - {"Asia/Yakutsk", new String[] {"Yakutsk Time", "YAKT", - "Yakutsk Summer Time", "YAKST", - "Yakutsk Time", "YAKT"}}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Yekaterinburg Time", "YEKT", "Yekaterinburg Summer Time", "YEKST", "Yekaterinburg Time", "YEKT"}}, diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/native/libjimage/ImageNativeSubstrate.cpp --- a/jdk/src/java.base/share/native/libjimage/ImageNativeSubstrate.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/native/libjimage/ImageNativeSubstrate.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/native/libjimage/endian.cpp --- a/jdk/src/java.base/share/native/libjimage/endian.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/native/libjimage/endian.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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" diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/native/libjimage/endian.hpp --- a/jdk/src/java.base/share/native/libjimage/endian.hpp Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/native/libjimage/endian.hpp Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/native/libjimage/imageDecompressor.cpp --- a/jdk/src/java.base/share/native/libjimage/imageDecompressor.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/native/libjimage/imageDecompressor.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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" diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/native/libjimage/imageDecompressor.hpp --- a/jdk/src/java.base/share/native/libjimage/imageDecompressor.hpp Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/native/libjimage/imageDecompressor.hpp Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/native/libjimage/imageFile.cpp --- a/jdk/src/java.base/share/native/libjimage/imageFile.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/native/libjimage/imageFile.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/native/libjimage/imageFile.hpp --- a/jdk/src/java.base/share/native/libjimage/imageFile.hpp Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/native/libjimage/imageFile.hpp Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/native/libjimage/inttypes.hpp --- a/jdk/src/java.base/share/native/libjimage/inttypes.hpp Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/native/libjimage/inttypes.hpp Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/native/libjimage/jimage.cpp --- a/jdk/src/java.base/share/native/libjimage/jimage.cpp Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/native/libjimage/jimage.cpp Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/native/libjimage/jimage.hpp --- a/jdk/src/java.base/share/native/libjimage/jimage.hpp Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/native/libjimage/jimage.hpp Wed Jul 05 21:20:45 2017 +0200 @@ -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" diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.base/share/native/libjimage/osSupport.hpp --- a/jdk/src/java.base/share/native/libjimage/osSupport.hpp Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.base/share/native/libjimage/osSupport.hpp Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.desktop/aix/native/libawt/porting_aix.c --- a/jdk/src/java.desktop/aix/native/libawt/porting_aix.c Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.desktop/aix/native/libawt/porting_aix.c Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright (c) 2012, 2013 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.desktop/aix/native/libawt/porting_aix.h --- a/jdk/src/java.desktop/aix/native/libawt/porting_aix.h Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.desktop/aix/native/libawt/porting_aix.h Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2012, 2013 SAP AG. All rights reserved. + * Copyright (c) 2012, 2013 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.desktop/share/classes/sun/awt/im/InputMethodManager.java --- a/jdk/src/java.desktop/share/classes/sun/awt/im/InputMethodManager.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.desktop/share/classes/sun/awt/im/InputMethodManager.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; /** diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java --- a/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.desktop/share/classes/sun/java2d/opengl/OGLRenderQueue.java --- a/jdk/src/java.desktop/share/classes/sun/java2d/opengl/OGLRenderQueue.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.desktop/share/classes/sun/java2d/opengl/OGLRenderQueue.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.*; diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.logging/share/classes/java/util/logging/SimpleFormatter.java --- a/jdk/src/java.logging/share/classes/java/util/logging/SimpleFormatter.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.logging/share/classes/java/util/logging/SimpleFormatter.java Wed Jul 05 21:20:45 2017 +0200 @@ -135,7 +135,7 @@ * SEVERE: several message with an exception *

  • *
  • {@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"} - *

    Since JDK 1.9, {@code java.util.logging} uses {@link + *

    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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.logging/share/classes/java/util/logging/XMLFormatter.java --- a/jdk/src/java.logging/share/classes/java/util/logging/XMLFormatter.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.logging/share/classes/java/util/logging/XMLFormatter.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 } * element will contain the instant as formatted by the {@link diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/java.rmi/share/classes/sun/rmi/transport/DGCAckHandler.java --- a/jdk/src/java.rmi/share/classes/sun/rmi/transport/DGCAckHandler.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/java.rmi/share/classes/sun/rmi/transport/DGCAckHandler.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 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 @@ -118,6 +118,9 @@ if (objList != null && task == null) { task = scheduler.schedule(new Runnable() { public void run() { + if (id != null) { + idTable.remove(id); + } release(); } }, dgcAckTimeout, TimeUnit.MILLISECONDS); diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.attach/aix/classes/sun/tools/attach/AttachProviderImpl.java --- a/jdk/src/jdk.attach/aix/classes/sun/tools/attach/AttachProviderImpl.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.attach/aix/classes/sun/tools/attach/AttachProviderImpl.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. - * Copyright 2013 SAP AG. All rights reserved. + * Copyright (c) 2013 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java --- a/jdk/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. - * Copyright 2015 SAP AG. All rights reserved. + * Copyright (c) 2015 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.attach/aix/native/libattach/VirtualMachineImpl.c --- a/jdk/src/jdk.attach/aix/native/libattach/VirtualMachineImpl.c Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.attach/aix/native/libattach/VirtualMachineImpl.c Wed Jul 05 21:20:45 2017 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. - * Copyright 2015 SAP AG. All rights reserved. + * Copyright (c) 2015 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.localedata/share/classes/sun/util/resources/de/TimeZoneNames_de.java --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/de/TimeZoneNames_de.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/de/TimeZoneNames_de.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -276,6 +276,9 @@ String XJT[] = new String[] {"Chinesische Normalzeit", "XJT", "Chinesische Sommerzeit", "XJDT", "Zeitzone f\u00FCr China", "XJT"}; + String YAKT[] = new String[] {"Jakutsk Zeit", "YAKT", + "Jakutsk Sommerzeit", "YAKST", + "Jakutsk Zeit", "YAKT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -487,7 +490,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", PST}, + {"America/Metlakatla", AKST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Pierre & Miquelon Normalzeit", "PMST", "Pierre & Miquelon Sommerzeit", "PMDT", @@ -608,7 +611,7 @@ "Brunei Sommerzeit", "BNST", "Brunei Zeit", "BNT"}}, {"Asia/Calcutta", IST}, - {"Asia/Chita", IRKT}, + {"Asia/Chita", YAKT}, {"Asia/Choibalsan", new String[] {"Choibalsan Zeit", "CHOT", "Choibalsan Sommerzeit", "CHOST", "Choibalsan Zeit", "CHOT"}}, @@ -649,9 +652,7 @@ {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, - {"Asia/Khandyga", new String[] {"Chandyga Zeit", "YAKT", - "Chandyga Sommerzeit", "YAKST", - "Chandyga Zeit", "YAKT"}}, + {"Asia/Khandyga", YAKT}, {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, @@ -717,9 +718,7 @@ {"Asia/Vladivostok", new String[] {"Wladiwostok Zeit", "VLAT", "Wladiwostok Sommerzeit", "VLAST", "Wladiwostok Zeit", "VLAT"}}, - {"Asia/Yakutsk", new String[] {"Jakutsk Zeit", "YAKT", - "Jakutsk Sommerzeit", "YAKST", - "Jakutsk Zeit", "YAKT"}}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Jekaterinburger Zeit", "YEKT", "Jekaterinburger Sommerzeit", "YEKST", "Jekaterinburger Zeit", "YEKT"}}, diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.localedata/share/classes/sun/util/resources/es/TimeZoneNames_es.java --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/es/TimeZoneNames_es.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/es/TimeZoneNames_es.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -276,6 +276,9 @@ String XJT[] = new String[] {"Hora est\u00e1ndar de China", "XJT", "Hora de verano de China", "XJDT", "Hora de China", "XJT"}; + String YAKT[] = new String[] {"Hora de Yakutsk", "YAKT", + "Hora de verano de Yakutsk", "YAKST", + "Hora de Yakutsk", "YAKT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -487,7 +490,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", PST}, + {"America/Metlakatla", AKST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Hora est\u00e1ndar de Pierre & Miquelon", "PMST", "Hora de verano de Pierre & Miquelon", "PMDT", @@ -608,7 +611,7 @@ "Hora de verano de Brunei", "BNST", "Hora de Brunei", "BNT"}}, {"Asia/Calcutta", IST}, - {"Asia/Chita", IRKT}, + {"Asia/Chita", YAKT}, {"Asia/Choibalsan", new String[] {"Hora de Choibalsan", "CHOT", "Hora de verano de Choibalsan", "CHOST", "Hora de Choibalsan", "CHOT"}}, @@ -649,9 +652,7 @@ {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, - {"Asia/Khandyga", new String[] {"Hora de Khandyga", "YAKT", - "Hora de verano de Khandyga", "YAKST", - "Hora de Khandyga", "YAKT"}}, + {"Asia/Khandyga", YAKT}, {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, @@ -717,9 +718,7 @@ {"Asia/Vladivostok", new String[] {"Hora de Vladivostok", "VLAT", "Hora de verano de Vladivostok", "VLAST", "Hora de Vladivostok", "VLAT"}}, - {"Asia/Yakutsk", new String[] {"Hora de Yakutsk", "YAKT", - "Hora de verano de Yakutsk", "YAKST", - "Hora de Yakutsk", "YAKT"}}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Hora de Ekaterinburgo", "YEKT", "Hora de verano de Ekaterinburgo", "YEKST", "Hora de Ekaterinburgo", "YEKT"}}, diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -276,6 +276,9 @@ String XJT[] = new String[] {"Heure normale de Chine", "XJT", "Heure avanc\u00e9e de Chine", "XJDT", "Chine", "XJT"}; + String YAKT[] = new String[] {"Heure du Iakoutsk", "YAKT", + "Heure d'\u00e9t\u00e9 du Iakoutsk", "YAKST", + "Heure du Iakoutsk", "YAKT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -487,7 +490,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", PST}, + {"America/Metlakatla", AKST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Heure normale de Saint-Pierre et Miquelon", "PMST", "Heure avanc\u00e9e de Saint-Pierre et Miquelon", "PMDT", @@ -608,7 +611,7 @@ "Heure d'\u00e9t\u00e9 du Brunei", "BNST", "Heure du Brunei", "BNT"}}, {"Asia/Calcutta", IST}, - {"Asia/Chita", IRKT}, + {"Asia/Chita", YAKT}, {"Asia/Choibalsan", new String[] {"Heure de Choibalsan", "CHOT", "Heure d'\u00e9t\u00e9 de Choibalsan", "CHOST", "Heure de Choibalsan", "CHOT"}}, @@ -649,9 +652,7 @@ {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, - {"Asia/Khandyga", new String[] {"Heure de Khandyga", "YAKT", - "Heure d'\u00E9t\u00E9 de Khandyga", "YAKST", - "Heure de Khandyga", "YAKT"}}, + {"Asia/Khandyga", YAKT}, {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, @@ -717,9 +718,7 @@ {"Asia/Vladivostok", new String[] {"Heure de Vladivostok", "VLAT", "Heure d'\u00e9t\u00e9 de Vladivostok", "VLAST", "Heure de Vladivostok", "VLAT"}}, - {"Asia/Yakutsk", new String[] {"Heure du Iakoutsk", "YAKT", - "Heure d'\u00e9t\u00e9 du Iakoutsk", "YAKST", - "Heure du Iakoutsk", "YAKT"}}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Heure de Yekaterinburg", "YEKT", "Heure d'\u00e9t\u00e9 de Yekaterinburg", "YEKST", "Heure de Yekaterinburg", "YEKT"}}, diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.localedata/share/classes/sun/util/resources/it/TimeZoneNames_it.java --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/it/TimeZoneNames_it.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/it/TimeZoneNames_it.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -276,6 +276,9 @@ String XJT[] = new String[] {"Ora solare della Cina", "XJT", "Ora legale della Cina", "XJDT", "Ora Cina", "XJT"}; + String YAKT[] = new String[] {"Ora di Jakutsk", "YAKT", + "Ora estiva di Jakutsk", "YAKST", + "Ora di Yakutsk", "YAKT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -487,7 +490,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", PST}, + {"America/Metlakatla", AKST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Ora solare di Saint-Pierre e Miquelon", "PMST", "Ora legale di Saint-Pierre e Miquelon", "PMDT", @@ -608,7 +611,7 @@ "Ora estiva del Brunei", "BNST", "Ora del Brunei", "BNT"}}, {"Asia/Calcutta", IST}, - {"Asia/Chita", IRKT}, + {"Asia/Chita", YAKT}, {"Asia/Choibalsan", new String[] {"Ora di Choibalsan", "CHOT", "Ora estiva di Choibalsan", "CHOST", "Ora di Choibalsan", "CHOT"}}, @@ -650,9 +653,7 @@ {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, {"Asia/Kolkata", IST}, - {"Asia/Khandyga", new String[] {"Ora di Khandyga", "YAKT", - "Ora estiva di Khandyga", "YAKST", - "Ora di Khandyga", "YAKT"}}, + {"Asia/Khandyga", YAKT}, {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, @@ -717,9 +718,7 @@ {"Asia/Vladivostok", new String[] {"Ora di Vladivostok", "VLAT", "Ora estiva di Vladivostok", "VLAST", "Ora di Vladivostok", "VLAT"}}, - {"Asia/Yakutsk", new String[] {"Ora di Jakutsk", "YAKT", - "Ora estiva di Jakutsk", "YAKST", - "Ora di Yakutsk", "YAKT"}}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Ora di Ekaterinburg", "YEKT", "Ora estiva di Ekaterinburg", "YEKST", "Ora di Ekaterinburg", "YEKT"}}, diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -276,6 +276,9 @@ String XJT[] = new String[] {"\u4e2d\u56fd\u6a19\u6e96\u6642", "XJT", "\u4e2d\u56fd\u590f\u6642\u9593", "XJDT", "\u4E2D\u56FD\u6642\u9593", "XJT"}; + String YAKT[] = new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT", + "\u30e4\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "YAKST", + "\u30E4\u30AF\u30FC\u30C4\u30AF\u6642\u9593", "YAKT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -487,7 +490,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", PST}, + {"America/Metlakatla", AKST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u6a19\u6e96\u6642", "PMST", "\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "PMDT", @@ -608,7 +611,7 @@ "\u30d6\u30eb\u30cd\u30a4\u590f\u6642\u9593", "BNST", "\u30D6\u30EB\u30CD\u30A4\u6642\u9593", "BNT"}}, {"Asia/Calcutta", IST}, - {"Asia/Chita", IRKT}, + {"Asia/Chita", YAKT}, {"Asia/Choibalsan", new String[] {"\u30c1\u30e7\u30a4\u30d0\u30eb\u30b5\u30f3\u6642\u9593", "CHOT", "\u30c1\u30e7\u30a4\u30d0\u30eb\u30b5\u30f3\u590f\u6642\u9593", "CHOST", "\u30C1\u30E7\u30A4\u30D0\u30EB\u30B5\u30F3\u6642\u9593", "CHOT"}}, @@ -649,9 +652,7 @@ {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, - {"Asia/Khandyga", new String[] {"\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593", "YAKT", - "\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u590F\u6642\u9593", "YAKST", - "\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593", "YAKT"}}, + {"Asia/Khandyga", YAKT}, {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, @@ -717,9 +718,7 @@ {"Asia/Vladivostok", new String[] {"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u6642\u9593", "VLAT", "\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u590f\u6642\u9593", "VLAST", "\u30A6\u30E9\u30B8\u30AA\u30B9\u30C8\u30AF\u6642\u9593", "VLAT"}}, - {"Asia/Yakutsk", new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT", - "\u30e4\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "YAKST", - "\u30E4\u30AF\u30FC\u30C4\u30AF\u6642\u9593", "YAKT"}}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"\u30a8\u30ab\u30c6\u30ea\u30f3\u30d6\u30eb\u30b0\u6642\u9593", "YEKT", "\u30a8\u30ab\u30c6\u30ea\u30f3\u30d6\u30eb\u30b0\u590f\u6642\u9593", "YEKST", "\u30A8\u30AB\u30C6\u30EA\u30F3\u30D6\u30EB\u30AF\u6642\u9593", "YEKT"}}, diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -276,6 +276,9 @@ String XJT[] = new String[] {"\uc911\uad6d \ud45c\uc900\uc2dc", "XJT", "\uc911\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "XJDT", "\uC911\uAD6D \uD45C\uC900\uC2DC", "XJT"}; + String YAKT[] = new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT", + "\uc57c\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YAKST", + "\uC57C\uCFE0\uCE20\uD06C \uD45C\uC900\uC2DC", "YAKT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -487,7 +490,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", PST}, + {"America/Metlakatla", AKST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \ud45c\uc900\uc2dc", "PMST", "\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PMDT", @@ -608,7 +611,7 @@ "\ube0c\ub8e8\ub098\uc774 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BNST", "\uBE0C\uB8E8\uB098\uC774 \uD45C\uC900\uC2DC", "BNT"}}, {"Asia/Calcutta", IST}, - {"Asia/Chita", IRKT}, + {"Asia/Chita", YAKT}, {"Asia/Choibalsan", new String[] {"Choibalsan \uc2dc\uac04", "CHOT", "Choibalsan \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHOST", "\uCD08\uC774\uBC1C\uC0B0 \uD45C\uC900\uC2DC", "CHOT"}}, @@ -649,9 +652,7 @@ {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, - {"Asia/Khandyga", new String[] {"\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC", "YAKT", - "\uD55C\uB514\uAC00 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "YAKST", - "\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC", "YAKT"}}, + {"Asia/Khandyga", YAKT}, {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, @@ -717,9 +718,7 @@ {"Asia/Vladivostok", new String[] {"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc2dc\uac04", "VLAT", "\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VLAST", "\uBE14\uB77C\uB514\uBCF4\uC2A4\uD1A1 \uD45C\uC900\uC2DC", "VLAT"}}, - {"Asia/Yakutsk", new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT", - "\uc57c\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YAKST", - "\uC57C\uCFE0\uCE20\uD06C \uD45C\uC900\uC2DC", "YAKT"}}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"\uc608\uce74\ud14c\ub9b0\ubc84\uadf8 \uc2dc\uac04", "YEKT", "\uc608\uce74\ud14c\ub9b0\ubc84\uadf8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YEKST", "\uC608\uCE74\uD14C\uB9B0\uBD80\uB974\uD06C \uD45C\uC900\uC2DC", "YEKT"}}, diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/BR/TimeZoneNames_pt_BR.java --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/BR/TimeZoneNames_pt_BR.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/BR/TimeZoneNames_pt_BR.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -276,6 +276,9 @@ String XJT[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da China", "XJT", "Hor\u00e1rio de luz natural da China", "XJDT", "Hor\u00E1rio da China", "XJT"}; + String YAKT[] = new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT", + "Fuso hor\u00e1rio de ver\u00e3o de Yakutsk", "YAKST", + "Hor\u00E1rio de Yakutsk", "YAKT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -487,7 +490,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", PST}, + {"America/Metlakatla", AKST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Fuso hor\u00e1rio padr\u00e3o de S\u00e3o Pedro e Miquelon", "PMST", "Hor\u00e1rio de luz natural de S\u00e3o Pedro e Miquelon", "PMDT", @@ -608,7 +611,7 @@ "Fuso hor\u00e1rio de ver\u00e3o de Brunei", "BNST", "Hor\u00E1rio de Brunei", "BNT"}}, {"Asia/Calcutta", IST}, - {"Asia/Chita", IRKT}, + {"Asia/Chita", YAKT}, {"Asia/Choibalsan", new String[] {"Fuso hor\u00e1rio de Choibalsan", "CHOT", "Fuso hor\u00e1rio de ver\u00e3o de Choibalsan", "CHOST", "Hor\u00E1rio de Choibalsan", "CHOT"}}, @@ -649,9 +652,7 @@ {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, - {"Asia/Khandyga", new String[] {"Hor\u00E1rio de Khandyga", "YAKT", - "Hor\u00E1rio de Ver\u00E3o de Khandyga", "YAKST", - "Hor\u00E1rio de Khandyga", "YAKT"}}, + {"Asia/Khandyga", YAKT}, {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, @@ -717,9 +718,7 @@ {"Asia/Vladivostok", new String[] {"Fuso hor\u00e1rio de Vladivostok", "VLAT", "Fuso hor\u00e1rio de ver\u00e3o de Vladivostok", "VLAST", "Hor\u00E1rio de Vladivostok", "VLAT"}}, - {"Asia/Yakutsk", new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT", - "Fuso hor\u00e1rio de ver\u00e3o de Yakutsk", "YAKST", - "Hor\u00E1rio de Yakutsk", "YAKT"}}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Fuso hor\u00e1rio de Yekaterinburgo", "YEKT", "Fuso hor\u00e1rio de ver\u00e3o de Yekaterinburgo", "YEKST", "Hor\u00E1rio de Yekaterinburg", "YEKT"}}, diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -276,6 +276,9 @@ String XJT[] = new String[] {"Kina, normaltid", "XJT", "Kina, sommartid", "XJDT", "Kinesisk tid", "XJT"}; + String YAKT[] = new String[] {"Jakutsk, normaltid", "YAKT", + "Jakutsk, sommartid", "YAKST", + "Jakutsk-tid", "YAKT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -487,7 +490,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", PST}, + {"America/Metlakatla", AKST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Saint-Pierre-et-Miquelon, normaltid", "PMST", "Saint-Pierre-et-Miquelon, sommartid", "PMDT", @@ -613,7 +616,7 @@ "Choibalsan-tid", "CHOT"}}, {"Asia/Chongqing", CTT}, {"Asia/Chungking", CTT}, - {"Asia/Chita", IRKT}, + {"Asia/Chita", YAKT}, {"Asia/Colombo", IST}, {"Asia/Dacca", BDT}, {"Asia/Dhaka", BDT}, @@ -649,9 +652,7 @@ {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, - {"Asia/Khandyga", new String[] {"Khandyga, normaltid", "YAKT", - "Khandyga, sommartid", "YAKST", - "Khandyga, normaltid", "YAKT"}}, + {"Asia/Khandyga", YAKT}, {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, @@ -717,9 +718,7 @@ {"Asia/Vladivostok", new String[] {"Vladivostok, normaltid", "VLAT", "Vladivostok, sommartid", "VLAST", "Vladivostok-tid", "VLAT"}}, - {"Asia/Yakutsk", new String[] {"Jakutsk, normaltid", "YAKT", - "Jakutsk, sommartid", "YAKST", - "Jakutsk-tid", "YAKT"}}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Jekaterinburg, normaltid", "YEKT", "Jekaterinburg, sommartid", "YEKST", "Jekaterinburg-tid", "YEKT"}}, diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/CN/TimeZoneNames_zh_CN.java --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/CN/TimeZoneNames_zh_CN.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/CN/TimeZoneNames_zh_CN.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -276,6 +276,9 @@ String XJT[] = new String[] {"\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4", "XJT", "\u4e2d\u56fd\u590f\u4ee4\u65f6", "XJDT", "\u4E2D\u56FD\u65F6\u95F4", "XJT"}; + String YAKT[] = new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT", + "\u4e9a\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "YAKST", + "\u4E9A\u5E93\u6B21\u514B\u65F6\u95F4", "YAKT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -487,7 +490,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", PST}, + {"America/Metlakatla", AKST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u6807\u51c6\u65f6\u95f4", "PMST", "\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u590f\u4ee4\u65f6", "PMDT", @@ -608,7 +611,7 @@ "\u6587\u83b1\u590f\u4ee4\u65f6", "BNST", "\u6587\u83B1\u65F6\u95F4", "BNT"}}, {"Asia/Calcutta", IST}, - {"Asia/Chita", IRKT}, + {"Asia/Chita", YAKT}, {"Asia/Choibalsan", new String[] {"Choibalsan \u65f6\u95f4", "CHOT", "Choibalsan \u590f\u4ee4\u65f6", "CHOST", "Choibalsan \u65F6\u95F4", "CHOT"}}, @@ -649,9 +652,7 @@ {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, - {"Asia/Khandyga", new String[] {"\u6C49\u5FB7\u52A0\u65F6\u95F4", "YAKT", - "\u6C49\u5FB7\u52A0\u590F\u4EE4\u65F6", "YAKST", - "\u6C49\u5FB7\u52A0\u65F6\u95F4", "YAKT"}}, + {"Asia/Khandyga", YAKT}, {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, @@ -717,9 +718,7 @@ {"Asia/Vladivostok", new String[] {"\u6d77\u53c2\u5d34\u65f6\u95f4", "VLAT", "\u6d77\u53c2\u5d34\u590f\u4ee4\u65f6", "VLAST", "\u6D77\u53C2\u5D34\u65F6\u95F4", "VLAT"}}, - {"Asia/Yakutsk", new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT", - "\u4e9a\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "YAKST", - "\u4E9A\u5E93\u6B21\u514B\u65F6\u95F4", "YAKT"}}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Yekaterinburg \u65f6\u95f4", "YEKT", "Yekaterinburg \u590f\u4ee4\u65f6", "YEKST", "Yekaterinburg \u65F6\u95F4", "YEKT"}}, diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TW/TimeZoneNames_zh_TW.java --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TW/TimeZoneNames_zh_TW.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TW/TimeZoneNames_zh_TW.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -276,6 +276,9 @@ String XJT[] = new String[] {"\u4e2d\u570b\u6a19\u6e96\u6642\u9593", "XJT", "\u4e2d\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "XJDT", "\u4E2D\u570B\u6642\u9593", "XJT"}; + String YAKT[] = new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT", + "\u4e9e\u5eab\u6b21\u514b\u590f\u4ee4\u6642\u9593", "YAKST", + "\u4E9E\u5EAB\u6B21\u514B\u6642\u9593", "YAKT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -487,7 +490,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", PST}, + {"America/Metlakatla", AKST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u6a19\u6e96\u6642\u9593", "PMST", "\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PMDT", @@ -608,7 +611,7 @@ "\u6c76\u840a\u590f\u4ee4\u6642\u9593", "BNST", "\u6C76\u840A\u6642\u9593", "BNT"}}, {"Asia/Calcutta", IST}, - {"Asia/Chita", IRKT}, + {"Asia/Chita", YAKT}, {"Asia/Choibalsan", new String[] {"\u5de7\u5df4\u5c71 (Choibalsan) \u6642\u9593", "CHOT", "\u5de7\u5df4\u5c71 (Choibalsan) \u590f\u4ee4\u6642\u9593", "CHOST", "\u5DE7\u5DF4\u5C71 (Choibalsan) \u6642\u9593", "CHOT"}}, @@ -649,9 +652,7 @@ {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, - {"Asia/Khandyga", new String[] {"\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593", "YAKT", - "\u6F22\u5730\u52A0 (Khandyga) \u590F\u4EE4\u6642\u9593", "YAKST", - "\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593", "YAKT"}}, + {"Asia/Khandyga", YAKT}, {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, @@ -719,9 +720,7 @@ {"Asia/Vladivostok", new String[] {"\u6d77\u53c3\u5d34\u6642\u9593", "VLAT", "\u6d77\u53c3\u5d34\u590f\u4ee4\u6642\u9593", "VLAST", "\u6D77\u53C3\u5D34\u6642\u9593", "VLAT"}}, - {"Asia/Yakutsk", new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT", - "\u4e9e\u5eab\u6b21\u514b\u590f\u4ee4\u6642\u9593", "YAKST", - "\u4E9E\u5EAB\u6B21\u514B\u6642\u9593", "YAKT"}}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Yekaterinburg \u6642\u9593", "YEKT", "Yekaterinburg \u590f\u4ee4\u6642\u9593", "YEKST", "\u8449\u5361\u6377\u7433\u5821\u6642\u9593", "YEKT"}}, diff -r f535b24cd53a -r 6c644cca3f3f jdk/src/jdk.management/aix/native/libmanagement_ext/UnixOperatingSystem.c --- a/jdk/src/jdk.management/aix/native/libmanagement_ext/UnixOperatingSystem.c Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/src/jdk.management/aix/native/libmanagement_ext/UnixOperatingSystem.c Wed Jul 05 21:20:45 2017 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. - * Copyright 2015 SAP AG. All rights reserved. + * Copyright (c) 2015 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/ProblemList.txt --- a/jdk/test/ProblemList.txt Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/ProblemList.txt Wed Jul 05 21:20:45 2017 +0200 @@ -133,6 +133,9 @@ # 8029891 java/lang/ClassLoader/deadlock/GetResource.java generic-all +# 7008363 +java/lang/StringCoding/CheckEncodings.sh generic-all + ############################################################################ # jdk_instrument @@ -162,6 +165,9 @@ # 8147985 sun/management/jmxremote/bootstrap/JMXInterfaceBindingTest.java generic-all +# 8145919 +sun/management/jmxremote/bootstrap/RmiSslBootstrapTest.sh generic-all + ############################################################################ # jdk_net diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/lang/Character/CharacterName.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/Character/CharacterName.java Wed Jul 05 21:20:45 2017 +0200 @@ -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); + } + } + } +} diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/lang/ProcessBuilder/RedirectWithLongFilename.java --- a/jdk/test/java/lang/ProcessBuilder/RedirectWithLongFilename.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/lang/ProcessBuilder/RedirectWithLongFilename.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2015 SAP SE. All Rights Reserved. + * Copyright (c) 2015 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/lang/String/concat/StringConcatFactoryInvariants.java --- a/jdk/test/java/lang/String/concat/StringConcatFactoryInvariants.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/lang/String/concat/StringConcatFactoryInvariants.java Wed Jul 05 21:20:45 2017 +0200 @@ -66,7 +66,7 @@ private static final char TAG_CONST = '\u0002'; public static void main(String[] args) throws Throwable { - MethodHandles.Lookup lookup = MethodHandles.publicLookup(); + MethodHandles.Lookup lookup = MethodHandles.lookup(); String methodName = "foo"; MethodType mt = MethodType.methodType(String.class, String.class, int.class); String recipe = "" + TAG_ARG + TAG_ARG + TAG_CONST; @@ -236,6 +236,14 @@ // Advanced factory: test empty arguments ok("Ok to pass empty arguments", () -> StringConcatFactory.makeConcatWithConstants(lookup, methodName, mtEmpty, recipeEmpty)); + + // Simple factory: public Lookup is rejected + fail("Passing public Lookup", + () -> StringConcatFactory.makeConcat(MethodHandles.publicLookup(), methodName, mtEmpty)); + + // Advanced factory: public Lookup is rejected + fail("Passing public Lookup", + () -> StringConcatFactory.makeConcatWithConstants(MethodHandles.publicLookup(), methodName, mtEmpty, recipeEmpty)); } public static void ok(String msg, Callable runnable) { diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/lang/System/OsVersionTest.java --- a/jdk/test/java/lang/System/OsVersionTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/lang/System/OsVersionTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2015 SAP SE. All Rights Reserved. + * Copyright (c) 2015 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/rmi/dgc/dgcAckFailure/DGCAckFailure.java --- a/jdk/test/java/rmi/dgc/dgcAckFailure/DGCAckFailure.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/rmi/dgc/dgcAckFailure/DGCAckFailure.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 @@ -22,7 +22,7 @@ */ /* @test - * @bug 4017232 + * @bug 4017232 8046339 * @summary If, after returning a reference to a remote object in the current * VM (which gets implicitly converted to a remote stub), the client fails to * both send a DGC dirty call and to send a "DGC acknowledgment", the RMI @@ -36,10 +36,14 @@ import java.io.*; import java.net.*; +import java.lang.reflect.Field; import java.lang.ref.*; import java.rmi.*; import java.rmi.server.*; +import java.util.Map; + +import sun.rmi.transport.DGCAckHandler; interface ReturnRemote extends Remote { Object returnRemote() throws RemoteException; @@ -48,6 +52,7 @@ public class DGCAckFailure implements ReturnRemote { private static final long TIMEOUT = 20000; + private static final long ACK_TIMEOUT = TIMEOUT / 2; public Object returnRemote() { return new Wrapper(this); @@ -55,7 +60,8 @@ public static void main(String[] args) throws Exception { - System.setProperty("sun.rmi.dgc.ackTimeout", "10000"); + System.setProperty("sun.rmi.dgc.ackTimeout", + Long.toString(ACK_TIMEOUT)); /* * Set a socket factory that has a hook for shutting down all client @@ -93,12 +99,31 @@ break; } } - if (ref == weakRef) { - System.err.println("TEST PASSED"); - } else { + if (ref != weakRef) { throw new RuntimeException("TEST FAILED: " + "timed out, remote object not garbage collected"); } + + // 8046339 + // All DGCAckHandlers must be properly released after timeout + Thread.sleep(ACK_TIMEOUT + 100); + try { + Field field = + DGCAckHandler.class.getDeclaredField("idTable"); + field.setAccessible(true); + Object obj = field.get(null); + Map idTable = (Map)obj; + + if (!idTable.isEmpty()) { + throw new RuntimeException("TEST FAILED: " + + "DGCAckHandler.idTable isn't empty"); + } + } catch (ReflectiveOperationException roe) { + throw new RuntimeException(roe); + } + + System.err.println("TEST PASSED"); + } finally { try { UnicastRemoteObject.unexportObject((Remote) weakRef.get(), diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/Arrays/TimSortStackSize2.java --- a/jdk/test/java/util/Arrays/TimSortStackSize2.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/Arrays/TimSortStackSize2.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 @@ -25,6 +25,8 @@ * @test * @bug 8072909 * @library /lib/testlibrary /test/lib + * @modules java.management + * java.base/jdk.internal * @build jdk.testlibrary.* * @build TimSortStackSize2 * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/Calendar/Bug6902861.java --- a/jdk/test/java/util/Calendar/Bug6902861.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/Calendar/Bug6902861.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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 @@ -25,6 +25,7 @@ * @test * @bug 6902861 * @summary Test for a workaround when WEEK_OF_YEAR and YEAR are out of sync. + * @modules jdk.localedata */ import java.util.*; diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/Calendar/CldrFormatNamesTest.java --- a/jdk/test/java/util/Calendar/CldrFormatNamesTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/Calendar/CldrFormatNamesTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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,6 +26,7 @@ * @bug 8004489 8006509 8008577 * @summary Unit test for CLDR FormatData resources * @modules java.base/sun.util.locale.provider + * jdk.localedata * @compile -XDignore.symbol.file CldrFormatNamesTest.java * @run main/othervm -Djava.locale.providers=CLDR CldrFormatNamesTest */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/Locale/Bug8001562.java --- a/jdk/test/java/util/Locale/Bug8001562.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/Locale/Bug8001562.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 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 @@ -26,6 +26,7 @@ * @bug 8001562 * @summary Verify that getAvailableLocales() in locale sensitive services * classes return compatible set of locales as in JDK7. + * @modules jdk.localedata * @run main Bug8001562 */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/Locale/HashCodeTest.java --- a/jdk/test/java/util/Locale/HashCodeTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/Locale/HashCodeTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 @@ -24,6 +24,7 @@ * @test * @bug 4944561 * @summary Test hashCode() to have less than 10% of hash code conflicts. + * @modules jdk.localedata */ import java.util.*; diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/Locale/InternationalBAT.java --- a/jdk/test/java/util/Locale/InternationalBAT.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/Locale/InternationalBAT.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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,6 +26,8 @@ * @summary Basic acceptance test for international J2RE. Verifies that the * most important locale data and character converters exist and are * minimally functional. + * @modules jdk.localedata + * jdk.charsets * @run main/othervm -Djava.locale.providers=JRE,SPI InternationalBAT */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/Locale/LocaleEnhanceTest.java --- a/jdk/test/java/util/Locale/LocaleEnhanceTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/Locale/LocaleEnhanceTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2013, 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 @@ -46,6 +46,7 @@ * @bug 6875847 6992272 7002320 7015500 7023613 7032820 7033504 7004603 * 7044019 8008577 * @summary test API changes to Locale + * @modules jdk.localedata * @compile LocaleEnhanceTest.java * @run main/othervm -Djava.locale.providers=JRE,SPI -esa LocaleEnhanceTest */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/Locale/LocaleTest.java --- a/jdk/test/java/util/Locale/LocaleTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/Locale/LocaleTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 @@ -27,6 +27,7 @@ * 4147315 4147317 4147552 4335196 4778440 4940539 5010672 6475525 6544471 6627549 * 6786276 7066203 7085757 8008577 8030696 * @summary test Locales + * @modules jdk.localedata * @run main/othervm -Djava.locale.providers=JRE,SPI LocaleTest */ /* diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/Locale/ThaiGov.java --- a/jdk/test/java/util/Locale/ThaiGov.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/Locale/ThaiGov.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 @@ -24,7 +24,7 @@ * @test * @bug 4474409 * @author John O'Conner - * + * @modules jdk.localedata */ import java.util.*; diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/ResourceBundle/Bug6359330.java --- a/jdk/test/java/util/ResourceBundle/Bug6359330.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/ResourceBundle/Bug6359330.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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,6 +26,7 @@ * @summary Make sure that getBundle doesn't cause a security error * with a security manager when instantialing RBClassLoader (internal * classloader). + * @modules java.xml * @run main/othervm Bug6359330 */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/ResourceBundle/Control/Bug6530694.java --- a/jdk/test/java/util/ResourceBundle/Control/Bug6530694.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/ResourceBundle/Control/Bug6530694.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 @@ -24,6 +24,7 @@ * @bug 6530694 * @summary Checks that sun.util.CoreResourceBundleControl does not apply * to the application provided Swing resources. + * @modules java.desktop * @run main/othervm -Djava.awt.headless=true Bug6530694 */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/Scanner/ScanTest.java --- a/jdk/test/java/util/Scanner/ScanTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/Scanner/ScanTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 @@ -27,6 +27,7 @@ * 8072722 * @summary Basic tests of java.util.Scanner methods * @key randomness + * @modules jdk.localedata * @run main/othervm ScanTest */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/TimeZone/CLDRDisplayNamesTest.java --- a/jdk/test/java/util/TimeZone/CLDRDisplayNamesTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/TimeZone/CLDRDisplayNamesTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * 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 @@ -24,6 +24,7 @@ /* * @test * @bug 8005471 8008577 8129881 8130845 8136518 + * @modules jdk.localedata * @run main/othervm -Djava.locale.providers=CLDR CLDRDisplayNamesTest * @summary Make sure that localized time zone names of CLDR are used * if specified. diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/concurrent/ConcurrentHashMap/ConcurrentAssociateTest.java --- a/jdk/test/java/util/concurrent/ConcurrentHashMap/ConcurrentAssociateTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/concurrent/ConcurrentHashMap/ConcurrentAssociateTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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 @@ -46,6 +46,7 @@ * @run testng/timeout=1200 ConcurrentAssociateTest * @summary Test that association operations, such as put and compute, * place entries in the map + * @modules java.management */ @Test public class ConcurrentAssociateTest { diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/concurrent/Phaser/Basic.java --- a/jdk/test/java/util/concurrent/Phaser/Basic.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/concurrent/Phaser/Basic.java Wed Jul 05 21:20:45 2017 +0200 @@ -37,6 +37,7 @@ * @key intermittent * @summary Basic tests for Phaser * @author Chris Hegarty + * @modules java.management */ import static java.util.concurrent.TimeUnit.MILLISECONDS; diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/concurrent/locks/LockSupport/ParkLoops.java --- a/jdk/test/java/util/concurrent/locks/LockSupport/ParkLoops.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/concurrent/locks/LockSupport/ParkLoops.java Wed Jul 05 21:20:45 2017 +0200 @@ -35,6 +35,7 @@ * @test * @bug 8074773 * @summary Stress test looks for lost unparks + * @modules java.management * @run main/timeout=1200 ParkLoops */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/concurrent/tck/JSR166TestCase.java --- a/jdk/test/java/util/concurrent/tck/JSR166TestCase.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/concurrent/tck/JSR166TestCase.java Wed Jul 05 21:20:45 2017 +0200 @@ -36,6 +36,7 @@ /* * @test * @summary JSR-166 tck tests + * @modules java.management * @build * * @run junit/othervm/timeout=1000 -Djsr166.testImplementationDetails=true JSR166TestCase */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/CustomLogManagerTest.java --- a/jdk/test/java/util/logging/CustomLogManagerTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/CustomLogManagerTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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 @@ -33,6 +33,7 @@ * @summary Add loggers to custom log manager * * @modules java.base/sun.util.logging + * java.logging * @compile -XDignore.symbol.file CustomLogManagerTest.java CustomLogManager.java * @run main/othervm -Djava.util.logging.manager=CustomLogManager CustomLogManagerTest */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/DrainFindDeadlockTest.java --- a/jdk/test/java/util/logging/DrainFindDeadlockTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/DrainFindDeadlockTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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,8 @@ * @bug 8010939 * @summary check for deadlock between findLogger() and drainLoggerRefQueueBounded() * @author jim.gish@oracle.com + * @modules java.logging + * java.management * @build DrainFindDeadlockTest * @run main/othervm DrainFindDeadlockTest * @key randomness diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/LogManager/Configuration/TestConfigurationLock.java --- a/jdk/test/java/util/logging/LogManager/Configuration/TestConfigurationLock.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/LogManager/Configuration/TestConfigurationLock.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 @@ -46,6 +46,8 @@ * focuses more particularly on potential deadlock in * drainLoggerRefQueueBounded / readConfiguration / reset * todo: add at randomness + * @modules java.logging + * java.management * @run main/othervm TestConfigurationLock * @author danielfuchs */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/LogManager/RootLogger/setLevel/TestRootLoggerLevel.java --- a/jdk/test/java/util/logging/LogManager/RootLogger/setLevel/TestRootLoggerLevel.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/LogManager/RootLogger/setLevel/TestRootLoggerLevel.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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,7 @@ * @bug 8026499 * @summary checks that Logger.getLogger("").setLevel() is working correctly. * @modules java.base/sun.util.logging + * java.logging * @build TestRootLoggerLevel * @run main/othervm -Dtest.security=on TestRootLoggerLevel * @run main/othervm -Dtest.security=off TestRootLoggerLevel diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/LogManagerAppContextDeadlock.java --- a/jdk/test/java/util/logging/LogManagerAppContextDeadlock.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/LogManagerAppContextDeadlock.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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 @@ -44,6 +44,8 @@ * @summary check that when LogManager is initialized, a deadlock similar * to that described in 8065709 will not occur. * @modules java.base/jdk.internal.misc + * java.logging + * java.management * @run main/othervm LogManagerAppContextDeadlock UNSECURE * @run main/othervm LogManagerAppContextDeadlock SECURE * diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/LoggingDeadlock4.java --- a/jdk/test/java/util/logging/LoggingDeadlock4.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/LoggingDeadlock4.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, 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 @@ -27,6 +27,7 @@ * @summary Deadlock between LogManager. and Logger.getLogger() * @author Daniel D. Daugherty * @modules java.base/sun.util.logging + * java.logging * @compile -XDignore.symbol.file LoggingDeadlock4.java * @run main/othervm/timeout=15 LoggingDeadlock4 */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/LoggingMXBeanTest.java --- a/jdk/test/java/util/logging/LoggingMXBeanTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/LoggingMXBeanTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, 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 @@ -27,7 +27,8 @@ * * @summary Basic Test for LoggingMXBean via MBeanServer * @author Ron Mann - * + * @modules java.logging + * java.management * @build LoggingMXBeanTest * @run main LoggingMXBeanTest */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/RootLogger/RootLevelInConfigFile.java --- a/jdk/test/java/util/logging/RootLogger/RootLevelInConfigFile.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/RootLogger/RootLevelInConfigFile.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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 @@ -43,6 +43,7 @@ * @summary Tests that setting .level=FINEST for the root logger in logging * configuration file does work. * @modules java.base/jdk.internal.misc + * java.logging * @run main/othervm RootLevelInConfigFile * * @author danielfuchs diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/SimpleLogManager.java --- a/jdk/test/java/util/logging/SimpleLogManager.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/SimpleLogManager.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,7 @@ * logger (see the subclassing information in the Logger class specification) * * @modules java.base/sun.util.logging + * java.logging * @compile -XDignore.symbol.file CustomLogManager.java SimpleLogManager.java * @run main/othervm -Djava.util.logging.manager=SimpleLogManager SimpleLogManager */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/TEST.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/logging/TEST.properties Wed Jul 05 21:20:45 2017 +0200 @@ -0,0 +1,1 @@ +modules = java.logging diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/TestAppletLoggerContext.java --- a/jdk/test/java/util/logging/TestAppletLoggerContext.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/TestAppletLoggerContext.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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 @@ -43,6 +43,7 @@ * LogManager.getLogManager().getLogger * * @modules java.base/jdk.internal.misc + * java.logging * @run main/othervm -Dtest.security=off TestAppletLoggerContext LoadingApplet * @run main/othervm -Dtest.security=on TestAppletLoggerContext LoadingApplet * @run main/othervm -Dtest.security=off TestAppletLoggerContext LoadingMain diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/TestGetLoggerNPE.java --- a/jdk/test/java/util/logging/TestGetLoggerNPE.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/TestGetLoggerNPE.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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,7 @@ * @summary NPE with logging while launching webstart * * @modules java.base/jdk.internal.misc + * java.logging * @build TestGetLoggerNPE * @run main/othervm TestGetLoggerNPE getLogger * @run main/othervm TestGetLoggerNPE getLogManager diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/TestLogConfigurationDeadLock.java --- a/jdk/test/java/util/logging/TestLogConfigurationDeadLock.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/TestLogConfigurationDeadLock.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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 @@ -38,6 +38,8 @@ * @summary Synchronization issues in Logger and LogManager. This test * focusses more particularly on potential deadlock in * drainLoggerRefQueueBounded / readConfiguration + * @modules java.logging + * java.management * @run main/othervm TestLogConfigurationDeadLock * @author danielfuchs */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/TestLogConfigurationDeadLockWithConf.java --- a/jdk/test/java/util/logging/TestLogConfigurationDeadLockWithConf.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/TestLogConfigurationDeadLockWithConf.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 @@ -44,6 +44,8 @@ * @bug 8027670 8029281 * @summary Deadlock in drainLoggerRefQueueBounded / readConfiguration * caused by synchronization issues in Logger and LogManager. + * @modules java.logging + * java.management * @run main/othervm TestLogConfigurationDeadLockWithConf * @author danielfuchs * @key randomness diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/TestLoggerBundleSync.java --- a/jdk/test/java/util/logging/TestLoggerBundleSync.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/TestLoggerBundleSync.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,6 +53,8 @@ * java/util/logging/Logger/setResourceBundle/TestSetResourceBundle.java. * Note that this is a best effort test. Running it in a loop to * reproduce intermittent issues can be a good idea. + * @modules java.logging + * java.management * @run main/othervm TestLoggerBundleSync * @author danielfuchs */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/TestLoggerWeakRefLeak.java --- a/jdk/test/java/util/logging/TestLoggerWeakRefLeak.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/TestLoggerWeakRefLeak.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 @@ -39,6 +39,7 @@ * @summary Check for WeakReference leak in Logger and anonymous Logger objects * @library /lib/testlibrary * @modules jdk.attach/sun.tools.attach + * java.logging * @build jdk.testlibrary.ProcessTools * @run main/othervm TestLoggerWeakRefLeak Logger * @run main/othervm TestLoggerWeakRefLeak AnonymousLogger diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/TestLoggingWithMainAppContext.java --- a/jdk/test/java/util/logging/TestLoggingWithMainAppContext.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/TestLoggingWithMainAppContext.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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 @@ -31,6 +31,8 @@ * @summary Test that the default user context is used when in the main * application context. This test must not be run in same VM or agent * VM mode: it would not test the intended behavior. + * @modules java.desktop + * java.logging * @run main/othervm TestLoggingWithMainAppContext */ public class TestLoggingWithMainAppContext { diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/logging/TestMainAppContext.java --- a/jdk/test/java/util/logging/TestMainAppContext.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/logging/TestMainAppContext.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 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 @@ -31,6 +31,7 @@ * @summary checks that calling getLogger() from a Thread whose ThreadGroup is * a child of the main root group doesn't throw an exception. * @modules java.desktop/sun.awt + * java.logging * @build TestMainAppContext * @run main/othervm TestMainAppContext * @author danielfuchs diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/prefs/TEST.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/prefs/TEST.properties Wed Jul 05 21:20:45 2017 +0200 @@ -0,0 +1,1 @@ +modules = java.prefs diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/regex/GraphemeBreakProperty.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/regex/GraphemeBreakProperty.txt Wed Jul 05 21:20:45 2017 +0200 @@ -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 + +# Total code points: 1 + +# ================================================ + +000A ; LF # Cc + +# Total code points: 1 + +# ================================================ + +0000..0009 ; Control # Cc [10] .. +000B..000C ; Control # Cc [2] .. +000E..001F ; Control # Cc [18] .. +007F..009F ; Control # Cc [33] .. +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 +2066..206F ; Control # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES +D800..DFFF ; Control # Cs [2048] .. +FEFF ; Control # Cf ZERO WIDTH NO-BREAK SPACE +FFF0..FFF8 ; Control # Cn [9] .. +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 +E0001 ; Control # Cf LANGUAGE TAG +E0002..E001F ; Control # Cn [30] .. +E0020..E007F ; Control # Cf [96] TAG SPACE..CANCEL TAG +E0080..E00FF ; Control # Cn [128] .. +E01F0..E0FFF ; Control # Cn [3600] .. + +# 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/regex/GraphemeBreakTest.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/regex/GraphemeBreakTest.txt Wed Jul 05 21:20:45 2017 +0200 @@ -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: +# (# )? +# contains hex Unicode code points, with +# ÷ wherever there is a break opportunity, and +# × wherever there is not. +# 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] (CR) ÷ [0.3] +÷ 0020 × 0308 ÷ 000D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ 0020 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (LF) ÷ [0.3] +÷ 0020 × 0308 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 0020 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (Control) ÷ [0.3] +÷ 0020 × 0308 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (Other) ÷ [0.3] +÷ 0020 × 0308 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ 0020 ÷ D800 ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (Control) ÷ [0.3] +÷ 0020 × 0308 ÷ D800 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ 000D ÷ 0020 ÷ # ÷ [0.2] (CR) ÷ [4.0] SPACE (Other) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 000D ÷ 000D ÷ # ÷ [0.2] (CR) ÷ [4.0] (CR) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ 000D × 000A ÷ # ÷ [0.2] (CR) × [3.0] (LF) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 000D ÷ 0001 ÷ # ÷ [0.2] (CR) ÷ [4.0] (Control) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ 000D ÷ 0300 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] +÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] +÷ 000D ÷ 0903 ÷ # ÷ [0.2] (CR) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000D ÷ 0308 × 0903 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000D ÷ 1100 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 000D ÷ 1160 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 000D ÷ 11A8 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 000D ÷ AC00 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 000D ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 000D ÷ AC01 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000D ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] (CR) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 000D ÷ 0378 ÷ # ÷ [0.2] (CR) ÷ [4.0] (Other) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ 000D ÷ D800 ÷ # ÷ [0.2] (CR) ÷ [4.0] (Control) ÷ [0.3] +÷ 000D ÷ 0308 ÷ D800 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ 000A ÷ 0020 ÷ # ÷ [0.2] (LF) ÷ [4.0] SPACE (Other) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 000A ÷ 000D ÷ # ÷ [0.2] (LF) ÷ [4.0] (CR) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ 000A ÷ 000A ÷ # ÷ [0.2] (LF) ÷ [4.0] (LF) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 000A ÷ 0001 ÷ # ÷ [0.2] (LF) ÷ [4.0] (Control) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ 000A ÷ 0300 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] +÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] +÷ 000A ÷ 0903 ÷ # ÷ [0.2] (LF) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000A ÷ 0308 × 0903 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000A ÷ 1100 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 000A ÷ 1160 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 000A ÷ 11A8 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 000A ÷ AC00 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 000A ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 000A ÷ AC01 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000A ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] (LF) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 000A ÷ 0378 ÷ # ÷ [0.2] (LF) ÷ [4.0] (Other) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ 000A ÷ D800 ÷ # ÷ [0.2] (LF) ÷ [4.0] (Control) ÷ [0.3] +÷ 000A ÷ 0308 ÷ D800 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ 0001 ÷ 0020 ÷ # ÷ [0.2] (Control) ÷ [4.0] SPACE (Other) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0001 ÷ 000D ÷ # ÷ [0.2] (Control) ÷ [4.0] (CR) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ 0001 ÷ 000A ÷ # ÷ [0.2] (Control) ÷ [4.0] (LF) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 0001 ÷ 0001 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Control) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ 0001 ÷ 0300 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] +÷ 0001 ÷ 0308 × 0300 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] +÷ 0001 ÷ 0903 ÷ # ÷ [0.2] (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0001 ÷ 0308 × 0903 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0001 ÷ 1100 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0001 ÷ 1160 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0001 ÷ 11A8 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0001 ÷ AC00 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0001 ÷ AC01 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0001 ÷ 0378 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Other) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ 0001 ÷ D800 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Control) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ D800 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (CR) ÷ [0.3] +÷ 0300 × 0308 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ 0300 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 0300 × 0308 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 0300 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ 0300 × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (Other) ÷ [0.3] +÷ 0300 × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ 0300 ÷ D800 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ 0300 × 0308 ÷ D800 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (CR) ÷ [0.3] +÷ 0903 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ 0903 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (LF) ÷ [0.3] +÷ 0903 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 0903 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (Control) ÷ [0.3] +÷ 0903 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (Other) ÷ [0.3] +÷ 0903 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ 0903 ÷ D800 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (Control) ÷ [0.3] +÷ 0903 × 0308 ÷ D800 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (CR) ÷ [0.3] +÷ 1100 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ 1100 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (LF) ÷ [0.3] +÷ 1100 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 1100 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (Control) ÷ [0.3] +÷ 1100 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (Other) ÷ [0.3] +÷ 1100 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ 1100 ÷ D800 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (Control) ÷ [0.3] +÷ 1100 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (CR) ÷ [0.3] +÷ 1160 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ 1160 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (LF) ÷ [0.3] +÷ 1160 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 1160 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (Control) ÷ [0.3] +÷ 1160 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (Other) ÷ [0.3] +÷ 1160 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ 1160 ÷ D800 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (Control) ÷ [0.3] +÷ 1160 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (CR) ÷ [0.3] +÷ 11A8 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ 11A8 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (LF) ÷ [0.3] +÷ 11A8 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 11A8 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (Control) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (Other) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ 11A8 ÷ D800 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (Control) ÷ [0.3] +÷ 11A8 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (CR) ÷ [0.3] +÷ AC00 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ AC00 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (LF) ÷ [0.3] +÷ AC00 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ AC00 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (Control) ÷ [0.3] +÷ AC00 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (Other) ÷ [0.3] +÷ AC00 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ AC00 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (Control) ÷ [0.3] +÷ AC00 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (CR) ÷ [0.3] +÷ AC01 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ AC01 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (LF) ÷ [0.3] +÷ AC01 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ AC01 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (Control) ÷ [0.3] +÷ AC01 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (Other) ÷ [0.3] +÷ AC01 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ AC01 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (Control) ÷ [0.3] +÷ AC01 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (CR) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ 1F1E6 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [5.0] (LF) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 1F1E6 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [5.0] (Control) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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] (Other) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ 1F1E6 ÷ D800 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [5.0] (Control) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ D800 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ 0378 ÷ 0020 ÷ # ÷ [0.2] (Other) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0378 × 0308 ÷ 0020 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0378 ÷ 000D ÷ # ÷ [0.2] (Other) ÷ [5.0] (CR) ÷ [0.3] +÷ 0378 × 0308 ÷ 000D ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ 0378 ÷ 000A ÷ # ÷ [0.2] (Other) ÷ [5.0] (LF) ÷ [0.3] +÷ 0378 × 0308 ÷ 000A ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 0378 ÷ 0001 ÷ # ÷ [0.2] (Other) ÷ [5.0] (Control) ÷ [0.3] +÷ 0378 × 0308 ÷ 0001 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ 0378 × 0300 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] +÷ 0378 × 0308 × 0300 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] +÷ 0378 × 0903 ÷ # ÷ [0.2] (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0378 × 0308 × 0903 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0378 ÷ 1100 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0378 × 0308 ÷ 1100 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0378 ÷ 1160 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0378 × 0308 ÷ 1160 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0378 ÷ 11A8 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0378 × 0308 ÷ 11A8 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0378 ÷ AC00 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0378 × 0308 ÷ AC00 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0378 ÷ AC01 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0378 × 0308 ÷ AC01 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0378 ÷ 1F1E6 ÷ # ÷ [0.2] (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0378 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0378 ÷ 0378 ÷ # ÷ [0.2] (Other) ÷ [999.0] (Other) ÷ [0.3] +÷ 0378 × 0308 ÷ 0378 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ 0378 ÷ D800 ÷ # ÷ [0.2] (Other) ÷ [5.0] (Control) ÷ [0.3] +÷ 0378 × 0308 ÷ D800 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ D800 ÷ 0020 ÷ # ÷ [0.2] (Control) ÷ [4.0] SPACE (Other) ÷ [0.3] +÷ D800 ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ D800 ÷ 000D ÷ # ÷ [0.2] (Control) ÷ [4.0] (CR) ÷ [0.3] +÷ D800 ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ D800 ÷ 000A ÷ # ÷ [0.2] (Control) ÷ [4.0] (LF) ÷ [0.3] +÷ D800 ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ D800 ÷ 0001 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Control) ÷ [0.3] +÷ D800 ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ D800 ÷ 0300 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] +÷ D800 ÷ 0308 × 0300 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] +÷ D800 ÷ 0903 ÷ # ÷ [0.2] (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ D800 ÷ 0308 × 0903 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ D800 ÷ 1100 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ D800 ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ D800 ÷ 1160 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ D800 ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ D800 ÷ 11A8 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ D800 ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ D800 ÷ AC00 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ D800 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ D800 ÷ AC01 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ D800 ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ D800 ÷ 1F1E6 ÷ # ÷ [0.2] (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ D800 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ D800 ÷ 0378 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Other) ÷ [0.3] +÷ D800 ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ D800 ÷ D800 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Control) ÷ [0.3] +÷ D800 ÷ 0308 ÷ D800 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] (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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/regex/GraphemeTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/regex/GraphemeTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; + } +} diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/regex/RegExTest.java --- a/jdk/test/java/util/regex/RegExTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/regex/RegExTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 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"); + } } diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/zip/ZipCoding.java --- a/jdk/test/java/util/zip/ZipCoding.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/zip/ZipCoding.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, 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 @@ -25,6 +25,7 @@ * @test * @bug 4244499 4532049 4700978 4820807 4980042 * @summary Test ZipInputStream, ZipOutputStream and ZipFile with non-UTF8 encoding + * @modules jdk.charsets */ import java.io.*; diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/java/util/zip/ZipFile/DeleteTempJar.java --- a/jdk/test/java/util/zip/ZipFile/DeleteTempJar.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/java/util/zip/ZipFile/DeleteTempJar.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, 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 @@ -26,6 +26,7 @@ @summary Make sure URL-downloaded jar files (jar_cache files) will be deleted when VM exits. + @modules jdk.httpserver @build DeleteTempJar @run shell deletetempjar.sh */ diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/javax/xml/jaxp/parsers/8027359/FragmentScannerBufferLimitTest.java --- a/jdk/test/javax/xml/jaxp/parsers/8027359/FragmentScannerBufferLimitTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/javax/xml/jaxp/parsers/8027359/FragmentScannerBufferLimitTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2014, SAP AG. All rights reserved. + * Copyright (c) 2014 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/jdk/internal/jimage/ExecutableTest.java --- a/jdk/test/jdk/internal/jimage/ExecutableTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/jdk/internal/jimage/ExecutableTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2015 SAP SE. All Rights Reserved. + * Copyright (c) 2015 SAP SE. 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 diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/security/smartcardio/TestChannel.java --- a/jdk/test/sun/security/smartcardio/TestChannel.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/security/smartcardio/TestChannel.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, 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 @@ -47,6 +47,11 @@ public static void main(String[] args) throws Exception { CardTerminal terminal = getTerminal(args); + if (terminal == null) { + System.out.println("Skipping the test: " + + "no card terminals available"); + return; + } // establish a connection with the card Card card = terminal.connect("T=0"); diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/security/smartcardio/TestConnect.java --- a/jdk/test/sun/security/smartcardio/TestConnect.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/security/smartcardio/TestConnect.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, 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 @@ -40,23 +40,12 @@ public class TestConnect extends Utils { public static void main(String[] args) throws Exception { - TerminalFactory factory = TerminalFactory.getInstance("PC/SC", null, "SunPCSC"); - System.out.println(factory); - - List terminals = factory.terminals().list(); - System.out.println("Terminals: " + terminals); - if (terminals.isEmpty()) { - throw new Exception("No card terminals available"); + CardTerminal terminal = getTerminal(args, "SunPCSC"); + if (terminal == null) { + System.out.println("Skipping the test: " + + "no card terminals available"); + return; } - CardTerminal terminal = terminals.get(0); - - if (terminal.isCardPresent() == false) { - System.out.println("*** Insert card"); - if (terminal.waitForCardPresent(20 * 1000) == false) { - throw new Exception("no card available"); - } - } - System.out.println("card present: " + terminal.isCardPresent()); Card card = terminal.connect("*"); System.out.println("card: " + card); diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/security/smartcardio/TestConnectAgain.java --- a/jdk/test/sun/security/smartcardio/TestConnectAgain.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/security/smartcardio/TestConnectAgain.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, 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 @@ -40,6 +40,11 @@ public static void main(String[] args) throws Exception { CardTerminal terminal = getTerminal(args); + if (terminal == null) { + System.out.println("Skipping the test: " + + "no card terminals available"); + return; + } Card card = terminal.connect("T=0"); CardChannel channel = card.getBasicChannel(); diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/security/smartcardio/TestControl.java --- a/jdk/test/sun/security/smartcardio/TestControl.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/security/smartcardio/TestControl.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, 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 @@ -41,6 +41,11 @@ public static void main(String[] args) throws Exception { CardTerminal terminal = getTerminal(args); + if (terminal == null) { + System.out.println("Skipping the test: " + + "no card terminals available"); + return; + } // establish a connection with the card Card card = terminal.connect("T=0"); diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/security/smartcardio/TestDefault.java --- a/jdk/test/sun/security/smartcardio/TestDefault.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/security/smartcardio/TestDefault.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, 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 @@ -41,10 +41,12 @@ TerminalFactory factory = TerminalFactory.getDefault(); System.out.println("Type: " + factory.getType()); List terminals = factory.terminals().list(); + if (terminals.isEmpty()) { + System.out.println("Skipping the test: " + + "no card terminals available"); + return; + } System.out.println("Terminals: " + terminals); - if (terminals.isEmpty()) { - throw new Exception("no terminals"); - } System.out.println("OK."); } diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/security/smartcardio/TestDirect.java --- a/jdk/test/sun/security/smartcardio/TestDirect.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/security/smartcardio/TestDirect.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 @@ -40,10 +40,12 @@ public static void main(String[] args) throws Exception { TerminalFactory terminalFactory = TerminalFactory.getDefault(); List cardTerminals = terminalFactory.terminals().list(); + if (cardTerminals.isEmpty()) { + System.out.println("Skipping the test: " + + "no card terminals available"); + return; + } System.out.println("Terminals: " + cardTerminals); - if (cardTerminals.isEmpty()) { - throw new Exception("No card terminals available"); - } CardTerminal cardTerminal = cardTerminals.get(0); Card card = cardTerminal.connect("DIRECT"); card.disconnect(true); diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/security/smartcardio/TestExclusive.java --- a/jdk/test/sun/security/smartcardio/TestExclusive.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/security/smartcardio/TestExclusive.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, 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 @@ -45,6 +45,11 @@ public static void main(String[] args) throws Exception { CardTerminal terminal = getTerminal(args); + if (terminal == null) { + System.out.println("Skipping the test: " + + "no card terminals available"); + return; + } // establish a connection with the card Card card = terminal.connect("T=0"); diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/security/smartcardio/TestMultiplePresent.java --- a/jdk/test/sun/security/smartcardio/TestMultiplePresent.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/security/smartcardio/TestMultiplePresent.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, 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 @@ -41,7 +41,12 @@ public static void main(String[] args) throws Exception { Utils.setLibrary(args); - TerminalFactory factory = TerminalFactory.getInstance("PC/SC", null); + TerminalFactory factory = Utils.getTerminalFactory(null); + if (factory == null) { + System.out.println("Skipping the test: " + + "no card terminals available"); + return; + } System.out.println(factory); CardTerminals terminals = factory.terminals(); @@ -50,7 +55,9 @@ boolean multipleReaders = true; if (list.size() < 2) { if (list.isEmpty()) { - throw new Exception("no terminals"); + System.out.println("Skipping the test: " + + "no card terminals available"); + return; } System.out.println("Only one reader present, using simplified test"); multipleReaders = false; diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/security/smartcardio/TestPresent.java --- a/jdk/test/sun/security/smartcardio/TestPresent.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/security/smartcardio/TestPresent.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, 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 @@ -35,7 +35,7 @@ import javax.smartcardio.CardTerminal; import javax.smartcardio.TerminalFactory; -public class TestPresent { +public class TestPresent extends Utils { private static class Timer { private long time = System.currentTimeMillis(); @@ -67,15 +67,12 @@ } public static void main(String[] args) throws Exception { - TerminalFactory factory = TerminalFactory.getInstance("PC/SC", null); - System.out.println(factory); - - List terminals = factory.terminals().list(); - System.out.println("Terminals: " + terminals); - if (terminals.isEmpty()) { - throw new Exception("No card terminals available"); + CardTerminal terminal = getTerminal(args); + if (terminal == null) { + System.out.println("Skipping the test: " + + "no card terminals available"); + return; } - CardTerminal terminal = terminals.get(0); while (terminal.isCardPresent()) { System.out.println("*** Remove card!"); diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/security/smartcardio/TestTransmit.java --- a/jdk/test/sun/security/smartcardio/TestTransmit.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/security/smartcardio/TestTransmit.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, 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 @@ -49,6 +49,11 @@ public static void main(String[] args) throws Exception { CardTerminal terminal = getTerminal(args); + if (terminal == null) { + System.out.println("Skipping the test: " + + "no card terminals available"); + return; + } Card card = terminal.connect("T=0"); CardChannel channel = card.getBasicChannel(); diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/security/smartcardio/Utils.java --- a/jdk/test/sun/security/smartcardio/Utils.java Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/security/smartcardio/Utils.java Wed Jul 05 21:20:45 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, 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 @@ -27,6 +27,7 @@ import java.io.StringReader; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.List; import javax.smartcardio.CardTerminal; @@ -43,26 +44,59 @@ } } + static TerminalFactory getTerminalFactory(String provName) throws Exception { + try { + TerminalFactory factory = (provName == null) + ? TerminalFactory.getInstance("PC/SC", null) + : TerminalFactory.getInstance("PC/SC", null, provName); + System.out.println(factory); + return factory; + } catch (NoSuchAlgorithmException e) { + Throwable cause = e.getCause(); + if (cause != null && cause.getMessage().startsWith("PC/SC not available")) { + return null; + } + throw e; + } + } + static CardTerminal getTerminal(String[] args) throws Exception { + return getTerminal(args, null); + } + + static CardTerminal getTerminal(String[] args, String provider) throws Exception { setLibrary(args); - TerminalFactory factory = TerminalFactory.getInstance("PC/SC", null); - System.out.println(factory); + try { + TerminalFactory factory = (provider == null) + ? TerminalFactory.getInstance("PC/SC", null) + : TerminalFactory.getInstance("PC/SC", null, provider); + System.out.println(factory); + + List terminals = factory.terminals().list(); + System.out.println("Terminals: " + terminals); + if (terminals.isEmpty()) { + return null; + } + CardTerminal terminal = terminals.get(0); - List terminals = factory.terminals().list(); - System.out.println("Terminals: " + terminals); - if (terminals.isEmpty()) { - throw new Exception("No card terminals available"); + if (terminal.isCardPresent() == false) { + System.out.println("*** Insert card"); + if (terminal.waitForCardPresent(20 * 1000) == false) { + throw new Exception("no card available"); + } + } + System.out.println("card present: " + terminal.isCardPresent()); + + return terminal; + + } catch (NoSuchAlgorithmException e) { + Throwable cause = e.getCause(); + if (cause != null && cause.getMessage().startsWith("PC/SC not available")) { + return null; + } + throw e; } - CardTerminal terminal = terminals.get(0); - - if (terminal.isCardPresent() == false) { - System.out.println("*** Insert card"); - if (terminal.waitForCardPresent(20 * 1000) == false) { - throw new Exception("no card available"); - } - } - return terminal; } static final byte[] C1 = parse("00 A4 04 00 07 A0 00 00 00 62 81 01 00"); diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/util/calendar/zi/tzdata/VERSION --- a/jdk/test/sun/util/calendar/zi/tzdata/VERSION Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/VERSION Wed Jul 05 21:20:45 2017 +0200 @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2015g +tzdata2016a diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/util/calendar/zi/tzdata/asia --- a/jdk/test/sun/util/calendar/zi/tzdata/asia Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/asia Wed Jul 05 21:20:45 2017 +0200 @@ -897,6 +897,15 @@ 9:00 - TLT # India + +# From Ian P. Beacock, in "A brief history of (modern) time", The Atlantic +# http://www.theatlantic.com/technology/archive/2015/12/the-creation-of-modern-time/421419/ +# (2015-12-22): +# In January 1906, several thousand cotton-mill workers rioted on the +# outskirts of Bombay.... They were protesting the proposed abolition of +# local time in favor of Indian Standard Time.... Journalists called this +# dispute the "Battle of the Clocks." It lasted nearly half a century. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata 5:53:20 - HMT 1941 Oct # Howrah Mean Time? @@ -1107,8 +1116,15 @@ Rule Iran 2032 2033 - Sep 21 0:00 0 S Rule Iran 2034 2035 - Mar 22 0:00 1:00 D Rule Iran 2034 2035 - Sep 22 0:00 0 S -Rule Iran 2036 2037 - Mar 21 0:00 1:00 D -Rule Iran 2036 2037 - Sep 21 0:00 0 S +# +# The following rules are approximations starting in the year 2038. +# These are the best post-2037 approximations available, given the +# restrictions of a single rule using a Gregorian-based data format. +# At some point this table will need to be extended, though quite +# possibly Iran will change the rules first. +Rule Iran 2036 max - Mar 21 0:00 1:00 D +Rule Iran 2036 max - Sep 21 0:00 0 S + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Tehran 3:25:44 - LMT 1916 3:25:44 - TMT 1946 # Tehran Mean Time @@ -2134,8 +2150,8 @@ # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -Rule Pakistan 2002 only - Apr Sun>=2 0:01 1:00 S -Rule Pakistan 2002 only - Oct Sun>=2 0:01 0 - +Rule Pakistan 2002 only - Apr Sun>=2 0:00 1:00 S +Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 - Rule Pakistan 2008 only - Jun 1 0:00 1:00 S Rule Pakistan 2008 2009 - Nov 1 0:00 0 - Rule Pakistan 2009 only - Apr 15 0:00 1:00 S diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/util/calendar/zi/tzdata/backward --- a/jdk/test/sun/util/calendar/zi/tzdata/backward Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/backward Wed Jul 05 21:20:45 2017 +0200 @@ -46,6 +46,7 @@ Link America/Toronto America/Montreal Link America/Rio_Branco America/Porto_Acre Link America/Argentina/Cordoba America/Rosario +Link America/Tijuana America/Santa_Isabel Link America/Denver America/Shiprock Link America/Port_of_Spain America/Virgin Link Pacific/Auckland Antarctica/South_Pole diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/util/calendar/zi/tzdata/europe --- a/jdk/test/sun/util/calendar/zi/tzdata/europe Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/europe Wed Jul 05 21:20:45 2017 +0200 @@ -2616,13 +2616,20 @@ # Note: Effective 2008-03-01, (75) Chita Oblast and (80) Agin-Buryat # Autonomous Okrug merged to form (92, RU-ZAB) Zabaykalsky Krai. +# From Alexander Krivenyshev (2016-01-02): +# [The] time zone in the Trans-Baikal Territory (Zabaykalsky Krai) - +# Asia/Chita [is changing] from UTC+8 to UTC+9. Effective date will +# be March 27, 2016 at 2:00am.... +# http://publication.pravo.gov.ru/Document/View/000120151230010 + Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15 8:00 - YAKT 1930 Jun 21 # Yakutsk Time 9:00 Russia YAK%sT 1991 Mar 31 2:00s 8:00 Russia YAK%sT 1992 Jan 19 2:00s 9:00 Russia YAK%sT 2011 Mar 27 2:00s 10:00 - YAKT 2014 Oct 26 2:00s - 8:00 - IRKT + 8:00 - IRKT 2016 Mar 27 2:00 + 9:00 - YAKT # From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29): @@ -3177,6 +3184,12 @@ # It's officially announced now by the Ministry of Energy. # Turkey delays winter time to 8th of November 04:00 # http://www.aa.com.tr/tr/turkiye/yaz-saati-uygulamasi-8-kasimda-sona-erecek/362217 +# +# From BBC News (2015-10-25): +# Confused Turks are asking "what's the time?" after automatic clocks defied a +# government decision ... "For the next two weeks #Turkey is on EEST... Erdogan +# Engineered Standard Time," said Twitter user @aysekarahasan. +# http://www.bbc.com/news/world-europe-34631326 # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Turkey 1916 only - May 1 0:00 1:00 S diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/util/calendar/zi/tzdata/northamerica --- a/jdk/test/sun/util/calendar/zi/tzdata/northamerica Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/northamerica Wed Jul 05 21:20:45 2017 +0200 @@ -348,6 +348,16 @@ # Statue 175 closer in synch with the US Congress' intent.... # http://www.legis.state.wi.us/2007/data/acts/07Act3.pdf +# From an email administrator of the City of Fort Pierre, SD (2015-12-21): +# Fort Pierre is technically located in the Mountain time zone as is +# the rest of Stanley County. Most of Stanley County and Fort Pierre +# uses the Central time zone due to doing most of their business in +# Pierre so it simplifies schedules. I have lived in Stanley County +# all my life and it has been that way since I can remember. (43 years!) +# +# From Paul Eggert (2015-12-25): +# Assume this practice predates 1970, so Fort Pierre can use America/Chicago. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER Rule Chicago 1920 only - Jun 13 2:00 1:00 D Rule Chicago 1920 1921 - Oct lastSun 2:00 0 S @@ -504,6 +514,12 @@ # For lack of better information, assume that Metlakatla's # abandonment of use of daylight saving resulted from the 1983 vote. +# From Steffen Thorsen (2015-11-09): +# It seems Metlakatla did go off PST on Sunday, November 1, changing +# their time to AKST and are going to follow Alaska's DST, switching +# between AKST and AKDT from now on.... +# http://www.krbd.org/2015/10/30/annette-island-times-they-are-a-changing/ + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Juneau 15:02:19 - LMT 1867 Oct 18 -8:57:41 - LMT 1900 Aug 20 12:00 @@ -529,7 +545,8 @@ -8:00 US P%sT 1946 -8:00 - PST 1969 -8:00 US P%sT 1983 Oct 30 2:00 - -8:00 - PST + -8:00 - PST 2015 Nov 1 2:00 + -9:00 US AK%sT Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18 -9:18:55 - LMT 1900 Aug 20 12:00 -9:00 - YST 1942 @@ -2610,25 +2627,6 @@ -8:00 US P%sT 2002 Feb 20 -8:00 Mexico P%sT 2010 -8:00 US P%sT -# Baja California (away from US border) -Zone America/Santa_Isabel -7:39:28 - LMT 1922 Jan 1 0:20:32 - -7:00 - MST 1924 - -8:00 - PST 1927 Jun 10 23:00 - -7:00 - MST 1930 Nov 15 - -8:00 - PST 1931 Apr 1 - -8:00 1:00 PDT 1931 Sep 30 - -8:00 - PST 1942 Apr 24 - -8:00 1:00 PWT 1945 Aug 14 23:00u - -8:00 1:00 PPT 1945 Nov 12 # Peace - -8:00 - PST 1948 Apr 5 - -8:00 1:00 PDT 1949 Jan 14 - -8:00 - PST 1954 - -8:00 CA P%sT 1961 - -8:00 - PST 1976 - -8:00 US P%sT 1996 - -8:00 Mexico P%sT 2001 - -8:00 US P%sT 2002 Feb 20 - -8:00 Mexico P%sT # From Paul Eggert (2006-03-22): # Formerly there was an America/Ensenada zone, which differed from # America/Tijuana only in that it did not observe DST from 1976 @@ -2641,6 +2639,13 @@ # other than America/Tijuana for Baja, but it's not clear yet what its # name or contents should be. # +# From Paul Eggert (2015-10-08): +# Formerly there was an America/Santa_Isabel zone, but this appears to +# have come from a misreading of +# http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010 +# It has been moved to the 'backward' file. +# +# # Revillagigedo Is # no information @@ -2715,17 +2720,7 @@ -4:00 US A%sT # Cayman Is - -# From Paul Eggert (2015-05-15): -# The Cayman government has decided to introduce DST in 2016, the idea being -# to keep in sync with New York. The legislation hasn't passed but the change -# seems quite likely. See: Meade B. Cayman 27. -# http://www.cayman27.com.ky/2015/05/15/clock-ticks-toward-daylight-saving-time-in-cayman - -Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown - -5:07:11 - KMT 1912 Feb # Kingston Mean Time - -5:00 - EST 2016 - -5:00 US E%sT +# See America/Panama. # Costa Rica @@ -3248,6 +3243,7 @@ Zone America/Panama -5:18:08 - LMT 1890 -5:19:36 - CMT 1908 Apr 22 # Colón Mean Time -5:00 - EST +Link America/Panama America/Cayman # Puerto Rico # There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'. diff -r f535b24cd53a -r 6c644cca3f3f jdk/test/sun/util/calendar/zi/tzdata/zone.tab --- a/jdk/test/sun/util/calendar/zi/tzdata/zone.tab Wed Jul 05 21:19:33 2017 +0200 +++ b/jdk/test/sun/util/calendar/zi/tzdata/zone.tab Wed Jul 05 21:20:45 2017 +0200 @@ -306,8 +306,7 @@ MX +2838-10605 America/Chihuahua Mexican Mountain Time - Chihuahua away from US border MX +2934-10425 America/Ojinaga US Mountain Time - Chihuahua near US border MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora -MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border -MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border +MX +3232-11701 America/Tijuana US Pacific Time - Baja California state MX +2048-10515 America/Bahia_Banderas Mexican Central Time - Bahia de Banderas MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia MY +0133+11020 Asia/Kuching Sabah & Sarawak @@ -437,10 +436,10 @@ US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona (except Navajo) US +340308-1181434 America/Los_Angeles Pacific Time -US +550737-1313435 America/Metlakatla Pacific Standard Time - Annette Island, Alaska US +611305-1495401 America/Anchorage Alaska Time US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle +US +550737-1313435 America/Metlakatla Alaska Time - Annette Island US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck US +643004-1652423 America/Nome Alaska Time - west Alaska US +515248-1763929 America/Adak Aleutian Islands diff -r f535b24cd53a -r 6c644cca3f3f langtools/.hgtags --- a/langtools/.hgtags Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/.hgtags Wed Jul 05 21:20:45 2017 +0200 @@ -347,3 +347,4 @@ 6149fc30cd710eb3484dc9863d8837ecaedb96b6 jdk-9+102 94cfc50c1b8a74fd7b0ed2e9e4f4a9dab4f2c6a1 jdk-9+103 3f60a4808377a276f6398ff19e61c1b9086f4d97 jdk-9+104 +81bd82222f8a1f2b291a44a49e063973caa4e73b jdk-9+105 diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java Wed Jul 05 21:20:45 2017 +0200 @@ -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"), diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Wed Jul 05 21:20:45 2017 +0200 @@ -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); }); } } diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java Wed Jul 05 21:20:45 2017 +0200 @@ -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) diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/PathFileObject.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/PathFileObject.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/PathFileObject.java Wed Jul 05 21:20:45 2017 +0200 @@ -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()); diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Wed Jul 05 21:20:45 2017 +0200 @@ -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(); } /** diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Wed Jul 05 21:20:45 2017 +0200 @@ -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> diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties Wed Jul 05 21:20:45 2017 +0200 @@ -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). diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/options/Options.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/options/Options.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/options/Options.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 toAdd) { @@ -337,10 +335,11 @@ // Helper method to join a list of source locations separated by // File.pathSeparator private static String concatenateSourceLocations(List 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. diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ExternalEditor.java --- a/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ExternalEditor.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ExternalEditor.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 errorHandler, String initialText, + static void edit(String[] cmd, Consumer errorHandler, String initialText, Consumer saveHandler, IOContext input) { ExternalEditor ed = new ExternalEditor(errorHandler, saveHandler, input); ed.edit(cmd, initialText); diff -r f535b24cd53a -r 6c644cca3f3f langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java --- a/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 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 run; public final CompletionProvider completions; public final CommandKind kind; - public Command(String command, String params, String description, Function run, CompletionProvider completions) { - this(command, params, description, run, completions, CommandKind.NORMAL); + // NORMAL Commands + public Command(String command, String params, String description, String help, + Function run, CompletionProvider completions) { + this(command, params, description, help, + run, completions, CommandKind.NORMAL); } - public Command(String command, String params, String description, Function 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 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|]", "list the source you have typed", - arg -> cmdList(arg), - editKeywordCompletion())); - registerCommand(new Command("/seteditor", "", "set the external editor command to use", - arg -> cmdSetEditor(arg), - EMPTY_COMPLETION_PROVIDER)); + registerCommand(new Command("/list", "[all|start|]", "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 \n" + + " -- List snippets with the specified name (preference for active snippets)\n" + + "/list \n" + + " -- List the snippet with the specified snippet id\n", + arg -> cmdList(arg), + editKeywordCompletion())); + registerCommand(new Command("/seteditor", "", "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", "", "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 \n" + + " -- Edit the snippet or snippets with the specified name (preference for active snippets)\n" + + "/edit \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", "", "delete a source entry referenced by name or id", - arg -> cmdDrop(arg), - editCompletion(), - CommandKind.REPLAY)); - registerCommand(new Command("/save", "[all|history|start] ", "save: - 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 \n" + + " -- Drop the snippet with the specified name\n" + + "/drop \n" + + " -- Drop the snippet with the specified snippet id\n", + arg -> cmdDrop(arg), + editCompletion(), + CommandKind.REPLAY)); + registerCommand(new Command("/save", "[all|history|start] ", "Save snippet source to a file.", + "Save the specified snippets and/or commands to the specified file.\n\n" + + "/save \n" + + " -- Save the source of current active snippets to the file\n" + + "/save all \n" + + " -- Save the source of all snippets to the file\n" + + " Includes source including overwritten, failed, and start-up code\n" + + "/save history \n" + + " -- Save the sequential history of all commands and snippets entered since jshell was launched\n" + + "/save start \n" + + " -- Save the default start-up definitions to the file\n", + arg -> cmdSave(arg), + saveCompletion())); registerCommand(new Command("/open", "", "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 \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", "", "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", "", "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", "", "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", "[|]", "get information about jshell", + "Display information about jshell.\n" + + "/help\n" + + " -- List the jshell commands and help subjects.\n" + + "/help \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 \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" + + "/? \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" + + "/? \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("/", "", "re-run snippet by id", - arg -> { throw new IllegalStateException(); }, - EMPTY_COMPLETION_PROVIDER, - CommandKind.HELP_ONLY)); - registerCommand(new Command("/-", "", "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("/", "re-run snippet by id", + "", + CommandKind.HELP_ONLY)); + registerCommand(new Command("/-", "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" + + " -- 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 key to complete the input.\n" + + " If there is more than one completion, show possible completions.\n" + + "Shift- -- After the name and open parenthesis of a method or constructor invocation,\n" + + " hold the key and press the to see a synopsis of all\n" + + " matching methods/constructors.\n", + CommandKind.HELP_SUBJECT)); } public List 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 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 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(" -- show possible completions for the current text"); - cmdout.println("Shift- -- 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() { diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/Makefile --- a/langtools/test/Makefile Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/Makefile Wed Jul 05 21:20:45 2017 +0200 @@ -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 \ diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/jdk/jshell/ToolBasicTest.java --- a/langtools/test/jdk/jshell/ToolBasicTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/jdk/jshell/ToolBasicTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 testOutput = (s) -> { List 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", ""), + (a) -> assertHelp(a, "/? /li", "/list all", "snippets"), + (a) -> assertHelp(a, "/help /help", "/help ") + ); + } + + 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")) diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/jdk/jshell/ToolReloadTest.java --- a/langtools/test/jdk/jshell/ToolReloadTest.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/jdk/jshell/ToolReloadTest.java Wed Jul 05 21:20:45 2017 +0200 @@ -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"), diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javac/T6873845.java --- a/langtools/test/tools/javac/T6873845.java Wed Jul 05 21:19:33 2017 +0200 +++ /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 opts(String... opts) { - return Arrays.asList(opts); - } - - void test(List opts, String expect) throws Exception { - List args = new ArrayList(); - 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 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"); -} - diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javac/diags/CheckResourceKeys.java --- a/langtools/test/tools/javac/diags/CheckResourceKeys.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/tools/javac/diags/CheckResourceKeys.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.", diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javac/diags/examples.not-yet.txt --- a/langtools/test/tools/javac/diags/examples.not-yet.txt Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/tools/javac/diags/examples.not-yet.txt Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javac/diags/examples/SunApiFilename.java --- a/langtools/test/tools/javac/diags/examples/SunApiFilename.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/tools/javac/diags/examples/SunApiFilename.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javac/diags/examples/SunApiFilenameAdditional.java --- a/langtools/test/tools/javac/diags/examples/SunApiFilenameAdditional.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/tools/javac/diags/examples/SunApiFilenameAdditional.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javac/diags/examples/SunApiPlural/SunApiPlural.java --- a/langtools/test/tools/javac/diags/examples/SunApiPlural/SunApiPlural.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/tools/javac/diags/examples/SunApiPlural/SunApiPlural.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javac/diags/examples/SunApiPluralAdditional/SunApiPluralAdditional.java --- a/langtools/test/tools/javac/diags/examples/SunApiPluralAdditional/SunApiPluralAdditional.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/tools/javac/diags/examples/SunApiPluralAdditional/SunApiPluralAdditional.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javac/lambda/Conditional01.java --- a/langtools/test/tools/javac/lambda/Conditional01.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/tools/javac/lambda/Conditional01.java Wed Jul 05 21:20:45 2017 +0200 @@ -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.*; diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javac/lambda/Conditional02.java --- a/langtools/test/tools/javac/lambda/Conditional02.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/tools/javac/lambda/Conditional02.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 { diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javac/lambda/Conditional03.java --- a/langtools/test/tools/javac/lambda/Conditional03.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/tools/javac/lambda/Conditional03.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 { diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javac/lambda/TargetType27.java --- a/langtools/test/tools/javac/lambda/TargetType27.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/tools/javac/lambda/TargetType27.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 { diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javac/lambda/TargetType34.java --- a/langtools/test/tools/javac/lambda/TargetType34.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/tools/javac/lambda/TargetType34.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 { diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javac/warnings/6594914/T6594914b.java --- a/langtools/test/tools/javac/warnings/6594914/T6594914b.java Wed Jul 05 21:19:33 2017 +0200 +++ /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; - - - sun.security.x509.X509CertInfo m1(sun.security.x509.X509CertInfo a) - throws sun.security.x509.CertException { return null; } //warn - - @SuppressWarnings("sunapi") - - 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; - } -} diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javadoc/8147801/T8147801.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javadoc/8147801/T8147801.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 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; + } +} diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javadoc/8147801/jarsrc/lib/Lib1.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javadoc/8147801/jarsrc/lib/Lib1.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; +} diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javadoc/8147801/jarsrc/lib/Lib2.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javadoc/8147801/jarsrc/lib/Lib2.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; +} diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/javadoc/8147801/p/Test.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javadoc/8147801/p/Test.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; +} + diff -r f535b24cd53a -r 6c644cca3f3f langtools/test/tools/sjavac/JavacOptionPrep.java --- a/langtools/test/tools/sjavac/JavacOptionPrep.java Wed Jul 05 21:19:33 2017 +0200 +++ b/langtools/test/tools/sjavac/JavacOptionPrep.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 + diff -r f535b24cd53a -r 6c644cca3f3f make/Init.gmk --- a/make/Init.gmk Wed Jul 05 21:19:33 2017 +0200 +++ b/make/Init.gmk Wed Jul 05 21:20:45 2017 +0200 @@ -319,6 +319,7 @@ $(call PrepareCompareBuild) post-compare-build: + $(call WaitForSmartJavacFinish) $(call CleanupCompareBuild) $(call CompareBuildDoComparison) diff -r f535b24cd53a -r 6c644cca3f3f make/InitSupport.gmk --- a/make/InitSupport.gmk Wed Jul 05 21:19:33 2017 +0200 +++ b/make/InitSupport.gmk Wed Jul 05 21:20:45 2017 +0200 @@ -353,14 +353,17 @@ # Parse COMPARE_BUILD into COMPARE_BUILD_* # Syntax: COMPARE_BUILD=CONF=:PATCH=: # MAKE=:COMP_OPTS=: - # COMP_DIR=| + # COMP_DIR=|: + # FAIL= # If neither CONF or PATCH is given, assume 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 diff -r f535b24cd53a -r 6c644cca3f3f make/Main.gmk --- a/make/Main.gmk Wed Jul 05 21:19:33 2017 +0200 +++ b/make/Main.gmk Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f make/StripBinaries.gmk --- a/make/StripBinaries.gmk Wed Jul 05 21:19:33 2017 +0200 +++ b/make/StripBinaries.gmk Wed Jul 05 21:20:45 2017 +0200 @@ -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)) diff -r f535b24cd53a -r 6c644cca3f3f make/common/NativeCompilation.gmk --- a/make/common/NativeCompilation.gmk Wed Jul 05 21:19:33 2017 +0200 +++ b/make/common/NativeCompilation.gmk Wed Jul 05 21:20:45 2017 +0200 @@ -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='"$$( $$($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)) diff -r f535b24cd53a -r 6c644cca3f3f make/jprt.properties --- a/make/jprt.properties Wed Jul 05 21:19:33 2017 +0200 +++ b/make/jprt.properties Wed Jul 05 21:20:45 2017 +0200 @@ -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) diff -r f535b24cd53a -r 6c644cca3f3f modules.xml --- a/modules.xml Wed Jul 05 21:19:33 2017 +0200 +++ b/modules.xml Wed Jul 05 21:20:45 2017 +0200 @@ -297,7 +297,6 @@ java.security.jgss java.security.sasl java.xml - java.xml.ws jdk.charsets jdk.crypto.pkcs11 jdk.deploy.osx diff -r f535b24cd53a -r 6c644cca3f3f nashorn/.hgignore --- a/nashorn/.hgignore Wed Jul 05 21:19:33 2017 +0200 +++ b/nashorn/.hgignore Wed Jul 05 21:20:45 2017 +0200 @@ -23,8 +23,7 @@ CC/* jcov2/* .idea/* -test/lib/testng*.zip -test/lib/testng.jar +test/lib/*.jar test/script/external/* .project .externalToolBuilders/* diff -r f535b24cd53a -r 6c644cca3f3f nashorn/.hgtags --- a/nashorn/.hgtags Wed Jul 05 21:19:33 2017 +0200 +++ b/nashorn/.hgtags Wed Jul 05 21:20:45 2017 +0200 @@ -338,3 +338,4 @@ e5620875888583d35e9492b62fe27e054df26049 jdk-9+102 c9406f325a23e9093fa667ad3c594e2efe078f47 jdk-9+103 a618d3e89fdea5361895ef142a59074fe7ae3d98 jdk-9+104 +4e9749cc32f15251d9b2d0eab4373529952902a3 jdk-9+105 diff -r f535b24cd53a -r 6c644cca3f3f nashorn/make/build.xml --- a/nashorn/make/build.xml Wed Jul 05 21:19:33 2017 +0200 +++ b/nashorn/make/build.xml Wed Jul 05 21:20:45 2017 +0200 @@ -48,10 +48,16 @@ - - + - + + + + + + + + - + @@ -314,7 +320,7 @@ + classpath="${testng.ant.classpath}"/> - + @@ -569,7 +594,7 @@ - + @@ -804,15 +829,13 @@ - - - - - - - - - + + + + + + + diff -r f535b24cd53a -r 6c644cca3f3f nashorn/make/project.properties --- a/nashorn/make/project.properties Wed Jul 05 21:19:33 2017 +0200 +++ b/nashorn/make/project.properties Wed Jul 05 21:20:45 2017 +0200 @@ -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} diff -r f535b24cd53a -r 6c644cca3f3f nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/BooleanType.java --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/BooleanType.java Wed Jul 05 21:19:33 2017 +0200 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/BooleanType.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; } } diff -r f535b24cd53a -r 6c644cca3f3f nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/IntType.java --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/IntType.java Wed Jul 05 21:19:33 2017 +0200 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/IntType.java Wed Jul 05 21:20:45 2017 +0200 @@ -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; } diff -r f535b24cd53a -r 6c644cca3f3f nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/LongType.java --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/LongType.java Wed Jul 05 21:19:33 2017 +0200 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/LongType.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/Type.java --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/Type.java Wed Jul 05 21:19:33 2017 +0200 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/Type.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 * diff -r f535b24cd53a -r 6c644cca3f3f nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/Global.java --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/Global.java Wed Jul 05 21:19:33 2017 +0200 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/Global.java Wed Jul 05 21:20:45 2017 +0200 @@ -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); diff -r f535b24cd53a -r 6c644cca3f3f nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/CommandExecutor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/CommandExecutor.java Wed Jul 05 21:20:45 2017 +0200 @@ -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)() -> { + return System.getProperty("os.name").contains("Windows"); + }); + + // User's home directory + private static final String HOME_DIRECTORY = + AccessController.doPrivileged((PrivilegedAction)() -> { + 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 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 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 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 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 preprocessCommand(final List tokens, + final String cwd, final RedirectInfo redirectInfo) { + // Tokens remaining for actual command. + final List command = new ArrayList<>(); + + // iterate through all tokens. + final Iterator 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 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 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 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 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 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 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 tokens) { + // Prepare to accumulate command tokens. + final List command = new ArrayList<>(); + + // Iterate through tokens. + final Iterator 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 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; + } +} diff -r f535b24cd53a -r 6c644cca3f3f nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptingFunctions.java --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptingFunctions.java Wed Jul 05 21:19:33 2017 +0200 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptingFunctions.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 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 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 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 environment = processBuilder.environment(); - environment.clear(); - for (final Map.Entry 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 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 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; - } - } } diff -r f535b24cd53a -r 6c644cca3f3f nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/Bootstrap.java --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/Bootstrap.java Wed Jul 05 21:19:33 2017 +0200 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/Bootstrap.java Wed Jul 05 21:20:45 2017 +0200 @@ -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. diff -r f535b24cd53a -r 6c644cca3f3f nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Messages.properties --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Messages.properties Wed Jul 05 21:19:33 2017 +0200 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Messages.properties Wed Jul 05 21:20:45 2017 +0200 @@ -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 diff -r f535b24cd53a -r 6c644cca3f3f nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/tools/Shell.java --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/tools/Shell.java Wed Jul 05 21:19:33 2017 +0200 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/tools/Shell.java Wed Jul 05 21:20:45 2017 +0200 @@ -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 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 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 diff -r f535b24cd53a -r 6c644cca3f3f nashorn/test/script/basic/JDK-8141209.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8141209.js Wed Jul 05 21:20:45 2017 +0200 @@ -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 = << ${tempFile()} -e '/^d/ d'` + +$EXEC(["ls", "-l", "|", "sed", "-e", "/^d/ d", ">", tempFile()]) + +var t1 = tempFile(); + +$EXEC(<<${t1} +sed <${t1} >${tempFile()} -e '/^d/ d' +EOD + +$EXEC(<<${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(<< scanner = ScriptingFunctions.tokenizeString(allContent).iterator(); + Iterator scanner = Shell.tokenizeString(allContent).iterator(); while (scanner.hasNext()) { // TODO: Scan for /ref=file qualifiers, etc, to determine run // behavior diff -r f535b24cd53a -r 6c644cca3f3f test/Makefile --- a/test/Makefile Wed Jul 05 21:19:33 2017 +0200 +++ b/test/Makefile Wed Jul 05 21:20:45 2017 +0200 @@ -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; \