--- a/doc/building.html Wed Nov 21 13:20:52 2018 -0500
+++ b/doc/building.html Wed Nov 21 13:53:17 2018 -0500
@@ -93,7 +93,7 @@
<li><a href="#getting-help">Getting Help</a></li>
</ul></li>
<li><a href="#hints-and-suggestions-for-advanced-users">Hints and Suggestions for Advanced Users</a><ul>
-<li><a href="#setting-up-a-forest-for-pushing-changes-defpath">Setting Up a Forest for Pushing Changes (defpath)</a></li>
+<li><a href="#setting-up-a-repository-for-pushing-changes-defpath">Setting Up a Repository for Pushing Changes (defpath)</a></li>
<li><a href="#bash-completion">Bash Completion</a></li>
<li><a href="#using-multiple-configurations">Using Multiple Configurations</a></li>
<li><a href="#handling-reconfigurations">Handling Reconfigurations</a></li>
@@ -131,7 +131,7 @@
<p>The JDK is a complex software project. Building it requires a certain amount of technical expertise, a fair number of dependencies on external software, and reasonably powerful hardware.</p>
<p>If you just want to use the JDK and not build it yourself, this document is not for you. See for instance <a href="http://openjdk.java.net/install">OpenJDK installation</a> for some methods of installing a prebuilt JDK.</p>
<h2 id="getting-the-source-code">Getting the Source Code</h2>
-<p>Make sure you are getting the correct version. As of JDK 10, the source is no longer split into separate repositories so you only need to clone one single repository. At the <a href="http://hg.openjdk.java.net/">OpenJDK Mercurial server</a> you can see a list of all available forests. If you want to build an older version, e.g. JDK 8, it is recommended that you get the <code>jdk8u</code> forest, which contains incremental updates, instead of the <code>jdk8</code> forest, which was frozen at JDK 8 GA.</p>
+<p>Make sure you are getting the correct version. As of JDK 10, the source is no longer split into separate repositories so you only need to clone one single repository. At the <a href="http://hg.openjdk.java.net/">OpenJDK Mercurial server</a> you can see a list of all available repositories. If you want to build an older version, e.g. JDK 8, it is recommended that you get the <code>jdk8u</code> forest, which contains incremental updates, instead of the <code>jdk8</code> forest, which was frozen at JDK 8 GA.</p>
<p>If you are new to Mercurial, a good place to start is the <a href="http://www.mercurial-scm.org/guide">Mercurial Beginner's Guide</a>. The rest of this document assumes a working knowledge of Mercurial.</p>
<h3 id="special-considerations">Special Considerations</h3>
<p>For a smooth building experience, it is recommended that you follow these rules on where and how to check out the source code.</p>
@@ -780,11 +780,11 @@
<p>Verify that the summary at the end looks correct. Are you indeed using the Boot JDK and native toolchain that you expect?</p>
<p>By default, the JDK has a strict approach where warnings from the compiler is considered errors which fail the build. For very new or very old compiler versions, this can trigger new classes of warnings, which thus fails the build. Run <code>configure</code> with <code>--disable-warnings-as-errors</code> to turn of this behavior. (The warnings will still show, but not make the build fail.)</p>
<h4 id="problems-with-incremental-rebuilds">Problems with Incremental Rebuilds</h4>
-<p>Incremental rebuilds mean that when you modify part of the product, only the affected parts get rebuilt. While this works great in most cases, and significantly speed up the development process, from time to time complex interdependencies will result in an incorrect build result. This is the most common cause for unexpected build problems, together with inconsistencies between the different Mercurial repositories in the forest.</p>
+<p>Incremental rebuilds mean that when you modify part of the product, only the affected parts get rebuilt. While this works great in most cases, and significantly speed up the development process, from time to time complex interdependencies will result in an incorrect build result. This is the most common cause for unexpected build problems.</p>
<p>Here are a suggested list of things to try if you are having unexpected build problems. Each step requires more time than the one before, so try them in order. Most issues will be solved at step 1 or 2.</p>
<ol type="1">
-<li><p>Make sure your forest is up-to-date</p>
-<p>Run <code>bash get_source.sh</code> to make sure you have the latest version of all repositories.</p></li>
+<li><p>Make sure your repository is up-to-date</p>
+<p>Run <code>hg pull -u</code> to make sure you have the latest changes.</p></li>
<li><p>Clean build results</p>
<p>The simplest way to fix incremental rebuild issues is to run <code>make clean</code>. This will remove all build results, but not the configuration or any build system support artifacts. In most cases, this will solve build errors resulting from incremental build mismatches.</p></li>
<li><p>Completely clean the build directory.</p>
@@ -793,8 +793,8 @@
make dist-clean
bash configure $(cat current-configuration)
make</code></pre></li>
-<li><p>Re-clone the Mercurial forest</p>
-<p>Sometimes the Mercurial repositories themselves gets in a state that causes the product to be un-buildable. In such a case, the simplest solution is often the "sledgehammer approach": delete the entire forest, and re-clone it. If you have local changes, save them first to a different location using <code>hg export</code>.</p></li>
+<li><p>Re-clone the Mercurial repository</p>
+<p>Sometimes the Mercurial repository gets in a state that causes the product to be un-buildable. In such a case, the simplest solution is often the "sledgehammer approach": delete the entire repository, and re-clone it. If you have local changes, save them first to a different location using <code>hg export</code>.</p></li>
</ol>
<h3 id="specific-build-issues">Specific Build Issues</h3>
<h4 id="clock-skew">Clock Skew</h4>
@@ -816,7 +816,7 @@
<p>If none of the suggestions in this document helps you, or if you find what you believe is a bug in the build system, please contact the Build Group by sending a mail to <a href="mailto:build-dev@openjdk.java.net">build-dev@openjdk.java.net</a>. Please include the relevant parts of the configure and/or build log.</p>
<p>If you need general help or advice about developing for the JDK, you can also contact the Adoption Group. See the section on <a href="#contributing-to-openjdk">Contributing to OpenJDK</a> for more information.</p>
<h2 id="hints-and-suggestions-for-advanced-users">Hints and Suggestions for Advanced Users</h2>
-<h3 id="setting-up-a-forest-for-pushing-changes-defpath">Setting Up a Forest for Pushing Changes (defpath)</h3>
+<h3 id="setting-up-a-repository-for-pushing-changes-defpath">Setting Up a Repository for Pushing Changes (defpath)</h3>
<p>To help you prepare a proper push path for a Mercurial repository, there exists a useful tool known as <a href="http://openjdk.java.net/projects/code-tools/defpath">defpath</a>. It will help you setup a proper push path for pushing changes to the JDK.</p>
<p>Install the extension by cloning <code>http://hg.openjdk.java.net/code-tools/defpath</code> and updating your <code>.hgrc</code> file. Here's one way to do this:</p>
<pre><code>cd ~
@@ -829,7 +829,6 @@
EOT</code></pre>
<p>You can now setup a proper push path using:</p>
<pre><code>hg defpath -d -u <your OpenJDK username></code></pre>
-<p>If you also have the <code>trees</code> extension installed in Mercurial, you will automatically get a <code>tdefpath</code> command, which is even more useful. By running <code>hg tdefpath -du <username></code> in the top repository of your forest, all repos will get setup automatically. This is the recommended usage.</p>
<h3 id="bash-completion">Bash Completion</h3>
<p>The <code>configure</code> and <code>make</code> commands tries to play nice with bash command-line completion (using <code><tab></code> or <code><tab><tab></code>). To use this functionality, make sure you enable completion in your <code>~/.bashrc</code> (see instructions for bash in your operating system).</p>
<p>Make completion will work out of the box, and will complete valid make targets. For instance, typing <code>make jdk-i<tab></code> will complete to <code>make jdk-image</code>.</p>
@@ -847,10 +846,10 @@
sudo mv /tmp/configure /usr/local/bin</code></pre>
<p>Now <code>configure --en<tab>-dt<tab></code> will result in <code>configure --enable-dtrace</code>.</p>
<h3 id="using-multiple-configurations">Using Multiple Configurations</h3>
-<p>You can have multiple configurations for a single source forest. When you create a new configuration, run <code>configure --with-conf-name=<name></code> to create a configuration with the name <code><name></code>. Alternatively, you can create a directory under <code>build</code> and run <code>configure</code> from there, e.g. <code>mkdir build/<name> && cd build/<name> && bash ../../configure</code>.</p>
+<p>You can have multiple configurations for a single source repository. When you create a new configuration, run <code>configure --with-conf-name=<name></code> to create a configuration with the name <code><name></code>. Alternatively, you can create a directory under <code>build</code> and run <code>configure</code> from there, e.g. <code>mkdir build/<name> && cd build/<name> && bash ../../configure</code>.</p>
<p>Then you can build that configuration using <code>make CONF_NAME=<name></code> or <code>make CONF=<pattern></code>, where <code><pattern></code> is a substring matching one or several configurations, e.g. <code>CONF=debug</code>. The special empty pattern (<code>CONF=</code>) will match <em>all</em> available configuration, so <code>make CONF= hotspot</code> will build the <code>hotspot</code> target for all configurations. Alternatively, you can execute <code>make</code> in the configuration directory, e.g. <code>cd build/<name> && make</code>.</p>
<h3 id="handling-reconfigurations">Handling Reconfigurations</h3>
-<p>If you update the forest and part of the configure script has changed, the build system will force you to re-run <code>configure</code>.</p>
+<p>If you update the repository and part of the configure script has changed, the build system will force you to re-run <code>configure</code>.</p>
<p>Most of the time, you will be fine by running <code>configure</code> again with the same arguments as the last time, which can easily be performed by <code>make reconfigure</code>. To simplify this, you can use the <code>CONF_CHECK</code> make control variable, either as <code>make CONF_CHECK=auto</code>, or by setting an environment variable. For instance, if you add <code>export CONF_CHECK=auto</code> to your <code>.bashrc</code> file, <code>make</code> will always run <code>reconfigure</code> automatically whenever the configure script has changed.</p>
<p>You can also use <code>CONF_CHECK=ignore</code> to skip the check for a needed configure update. This might speed up the build, but comes at the risk of an incorrect build result. This is only recommended if you know what you're doing.</p>
<p>From time to time, you will also need to modify the command line to <code>configure</code> due to changes. Use <code>make print-configure</code> to show the command line used for your current configuration.</p>
--- a/doc/building.md Wed Nov 21 13:20:52 2018 -0500
+++ b/doc/building.md Wed Nov 21 13:53:17 2018 -0500
@@ -48,7 +48,7 @@
Make sure you are getting the correct version. As of JDK 10, the source is no
longer split into separate repositories so you only need to clone one single
repository. At the [OpenJDK Mercurial server](http://hg.openjdk.java.net/) you
-can see a list of all available forests. If you want to build an older version,
+can see a list of all available repositories. If you want to build an older version,
e.g. JDK 8, it is recommended that you get the `jdk8u` forest, which contains
incremental updates, instead of the `jdk8` forest, which was frozen at JDK 8 GA.
@@ -1301,17 +1301,15 @@
affected parts get rebuilt. While this works great in most cases, and
significantly speed up the development process, from time to time complex
interdependencies will result in an incorrect build result. This is the most
-common cause for unexpected build problems, together with inconsistencies
-between the different Mercurial repositories in the forest.
+common cause for unexpected build problems.
Here are a suggested list of things to try if you are having unexpected build
problems. Each step requires more time than the one before, so try them in
order. Most issues will be solved at step 1 or 2.
- 1. Make sure your forest is up-to-date
+ 1. Make sure your repository is up-to-date
- Run `bash get_source.sh` to make sure you have the latest version of all
- repositories.
+ Run `hg pull -u` to make sure you have the latest changes.
2. Clean build results
@@ -1336,13 +1334,13 @@
make
```
- 4. Re-clone the Mercurial forest
+ 4. Re-clone the Mercurial repository
- Sometimes the Mercurial repositories themselves gets in a state that causes
- the product to be un-buildable. In such a case, the simplest solution is
- often the "sledgehammer approach": delete the entire forest, and re-clone
- it. If you have local changes, save them first to a different location
- using `hg export`.
+ Sometimes the Mercurial repository gets in a state that causes the product
+ to be un-buildable. In such a case, the simplest solution is often the
+ "sledgehammer approach": delete the entire repository, and re-clone it.
+ If you have local changes, save them first to a different location using
+ `hg export`.
### Specific Build Issues
@@ -1393,7 +1391,7 @@
## Hints and Suggestions for Advanced Users
-### Setting Up a Forest for Pushing Changes (defpath)
+### Setting Up a Repository for Pushing Changes (defpath)
To help you prepare a proper push path for a Mercurial repository, there exists
a useful tool known as [defpath](
@@ -1420,11 +1418,6 @@
hg defpath -d -u <your OpenJDK username>
```
-If you also have the `trees` extension installed in Mercurial, you will
-automatically get a `tdefpath` command, which is even more useful. By running
-`hg tdefpath -du <username>` in the top repository of your forest, all repos
-will get setup automatically. This is the recommended usage.
-
### Bash Completion
The `configure` and `make` commands tries to play nice with bash command-line
@@ -1459,7 +1452,7 @@
### Using Multiple Configurations
-You can have multiple configurations for a single source forest. When you
+You can have multiple configurations for a single source repository. When you
create a new configuration, run `configure --with-conf-name=<name>` to create a
configuration with the name `<name>`. Alternatively, you can create a directory
under `build` and run `configure` from there, e.g. `mkdir build/<name> && cd
@@ -1474,7 +1467,7 @@
### Handling Reconfigurations
-If you update the forest and part of the configure script has changed, the
+If you update the repository and part of the configure script has changed, the
build system will force you to re-run `configure`.
Most of the time, you will be fine by running `configure` again with the same
--- a/make/Main.gmk Wed Nov 21 13:20:52 2018 -0500
+++ b/make/Main.gmk Wed Nov 21 13:53:17 2018 -0500
@@ -793,7 +793,7 @@
jrtfs-jar: interim-langtools
- build-microbenchmark: interim-langtools jdk.unsupported java.management
+ build-microbenchmark: interim-langtools exploded-image
ifeq ($(ENABLE_GENERATE_CLASSLIST), true)
ifeq ($(CREATE_BUILDJDK), true)
--- a/make/data/characterdata/CharacterData00.java.template Wed Nov 21 13:20:52 2018 -0500
+++ b/make/data/characterdata/CharacterData00.java.template Wed Nov 21 13:53:17 2018 -0500
@@ -25,7 +25,7 @@
package java.lang;
-/**
+/**
* The CharacterData00 class encapsulates the large tables once found in
* java.lang.Character
*/
@@ -265,6 +265,54 @@
case 0x13ED: mapChar = 0xABBD; break;
case 0x13EE: mapChar = 0xABBE; break;
case 0x13EF: mapChar = 0xABBF; break;
+ case 0x1C90: mapChar = 0x10D0; break;
+ case 0x1C91: mapChar = 0x10D1; break;
+ case 0x1C92: mapChar = 0x10D2; break;
+ case 0x1C93: mapChar = 0x10D3; break;
+ case 0x1C94: mapChar = 0x10D4; break;
+ case 0x1C95: mapChar = 0x10D5; break;
+ case 0x1C96: mapChar = 0x10D6; break;
+ case 0x1C97: mapChar = 0x10D7; break;
+ case 0x1C98: mapChar = 0x10D8; break;
+ case 0x1C99: mapChar = 0x10D9; break;
+ case 0x1C9A: mapChar = 0x10DA; break;
+ case 0x1C9B: mapChar = 0x10DB; break;
+ case 0x1C9C: mapChar = 0x10DC; break;
+ case 0x1C9D: mapChar = 0x10DD; break;
+ case 0x1C9E: mapChar = 0x10DE; break;
+ case 0x1C9F: mapChar = 0x10DF; break;
+ case 0x1CA0: mapChar = 0x10E0; break;
+ case 0x1CA1: mapChar = 0x10E1; break;
+ case 0x1CA2: mapChar = 0x10E2; break;
+ case 0x1CA3: mapChar = 0x10E3; break;
+ case 0x1CA4: mapChar = 0x10E4; break;
+ case 0x1CA5: mapChar = 0x10E5; break;
+ case 0x1CA6: mapChar = 0x10E6; break;
+ case 0x1CA7: mapChar = 0x10E7; break;
+ case 0x1CA8: mapChar = 0x10E8; break;
+ case 0x1CA9: mapChar = 0x10E9; break;
+ case 0x1CAA: mapChar = 0x10EA; break;
+ case 0x1CAB: mapChar = 0x10EB; break;
+ case 0x1CAC: mapChar = 0x10EC; break;
+ case 0x1CAD: mapChar = 0x10ED; break;
+ case 0x1CAE: mapChar = 0x10EE; break;
+ case 0x1CAF: mapChar = 0x10EF; break;
+ case 0x1CB0: mapChar = 0x10F0; break;
+ case 0x1CB1: mapChar = 0x10F1; break;
+ case 0x1CB2: mapChar = 0x10F2; break;
+ case 0x1CB3: mapChar = 0x10F3; break;
+ case 0x1CB4: mapChar = 0x10F4; break;
+ case 0x1CB5: mapChar = 0x10F5; break;
+ case 0x1CB6: mapChar = 0x10F6; break;
+ case 0x1CB7: mapChar = 0x10F7; break;
+ case 0x1CB8: mapChar = 0x10F8; break;
+ case 0x1CB9: mapChar = 0x10F9; break;
+ case 0x1CBA: mapChar = 0x10FA; break;
+ case 0x1CBB: mapChar = 0x10FB; break;
+ case 0x1CBC: mapChar = 0x10FC; break;
+ case 0x1CBD: mapChar = 0x10FD; break;
+ case 0x1CBE: mapChar = 0x10FE; break;
+ case 0x1CBF: mapChar = 0x10FF; break;
case 0x1E9E: mapChar = 0x00DF; break;
case 0x1F88: mapChar = 0x1F80; break;
case 0x1F89: mapChar = 0x1F81; break;
@@ -355,6 +403,52 @@
case 0x0287: mapChar = 0xA7B1; break;
case 0x029D: mapChar = 0xA7B2; break;
case 0x029E: mapChar = 0xA7B0; break;
+ case 0x10D0: mapChar = 0x1C90; break;
+ case 0x10D1: mapChar = 0x1C91; break;
+ case 0x10D2: mapChar = 0x1C92; break;
+ case 0x10D3: mapChar = 0x1C93; break;
+ case 0x10D4: mapChar = 0x1C94; break;
+ case 0x10D5: mapChar = 0x1C95; break;
+ case 0x10D6: mapChar = 0x1C96; break;
+ case 0x10D7: mapChar = 0x1C97; break;
+ case 0x10D8: mapChar = 0x1C98; break;
+ case 0x10D9: mapChar = 0x1C99; break;
+ case 0x10DA: mapChar = 0x1C9A; break;
+ case 0x10DB: mapChar = 0x1C9B; break;
+ case 0x10DC: mapChar = 0x1C9C; break;
+ case 0x10DD: mapChar = 0x1C9D; break;
+ case 0x10DE: mapChar = 0x1C9E; break;
+ case 0x10DF: mapChar = 0x1C9F; break;
+ case 0x10E0: mapChar = 0x1CA0; break;
+ case 0x10E1: mapChar = 0x1CA1; break;
+ case 0x10E2: mapChar = 0x1CA2; break;
+ case 0x10E3: mapChar = 0x1CA3; break;
+ case 0x10E4: mapChar = 0x1CA4; break;
+ case 0x10E5: mapChar = 0x1CA5; break;
+ case 0x10E6: mapChar = 0x1CA6; break;
+ case 0x10E7: mapChar = 0x1CA7; break;
+ case 0x10E8: mapChar = 0x1CA8; break;
+ case 0x10E9: mapChar = 0x1CA9; break;
+ case 0x10EA: mapChar = 0x1CAA; break;
+ case 0x10EB: mapChar = 0x1CAB; break;
+ case 0x10EC: mapChar = 0x1CAC; break;
+ case 0x10ED: mapChar = 0x1CAD; break;
+ case 0x10EE: mapChar = 0x1CAE; break;
+ case 0x10EF: mapChar = 0x1CAF; break;
+ case 0x10F0: mapChar = 0x1CB0; break;
+ case 0x10F1: mapChar = 0x1CB1; break;
+ case 0x10F2: mapChar = 0x1CB2; break;
+ case 0x10F3: mapChar = 0x1CB3; break;
+ case 0x10F4: mapChar = 0x1CB4; break;
+ case 0x10F5: mapChar = 0x1CB5; break;
+ case 0x10F6: mapChar = 0x1CB6; break;
+ case 0x10F7: mapChar = 0x1CB7; break;
+ case 0x10F8: mapChar = 0x1CB8; break;
+ case 0x10F9: mapChar = 0x1CB9; break;
+ case 0x10FA: mapChar = 0x1CBA; break;
+ case 0x10FD: mapChar = 0x1CBD; break;
+ case 0x10FE: mapChar = 0x1CBE; break;
+ case 0x10FF: mapChar = 0x1CBF; break;
case 0x1C80: mapChar = 0x0412; break;
case 0x1C81: mapChar = 0x0414; break;
case 0x1C82: mapChar = 0x041E; break;
@@ -544,9 +638,16 @@
mapChar = ch + 1;
}
else if ((val & $$maskLowerCase) == 0) {
- // The character does not have a lowercase equivalent, so it must
- // already be lowercase; so subtract 1 to get the titlecase form.
- mapChar = ch - 1;
+ // For some Georgian letters, titlecase form is
+ // same as this character.
+ if(ch >= 0x10D0 && ch <= 0x10FF) {
+ mapChar = ch;
+ }
+ else {
+ // The character does not have a lowercase equivalent, so it must
+ // already be lowercase; so subtract 1 to get the titlecase form.
+ mapChar = ch - 1;
+ }
}
// else {
// The character has both an uppercase equivalent and a lowercase
@@ -741,6 +842,52 @@
case 0x0287: mapChar = 0xA7B1; break;
case 0x029D: mapChar = 0xA7B2; break;
case 0x029E: mapChar = 0xA7B0; break;
+ case 0x10D0: mapChar = 0x1C90; break;
+ case 0x10D1: mapChar = 0x1C91; break;
+ case 0x10D2: mapChar = 0x1C92; break;
+ case 0x10D3: mapChar = 0x1C93; break;
+ case 0x10D4: mapChar = 0x1C94; break;
+ case 0x10D5: mapChar = 0x1C95; break;
+ case 0x10D6: mapChar = 0x1C96; break;
+ case 0x10D7: mapChar = 0x1C97; break;
+ case 0x10D8: mapChar = 0x1C98; break;
+ case 0x10D9: mapChar = 0x1C99; break;
+ case 0x10DA: mapChar = 0x1C9A; break;
+ case 0x10DB: mapChar = 0x1C9B; break;
+ case 0x10DC: mapChar = 0x1C9C; break;
+ case 0x10DD: mapChar = 0x1C9D; break;
+ case 0x10DE: mapChar = 0x1C9E; break;
+ case 0x10DF: mapChar = 0x1C9F; break;
+ case 0x10E0: mapChar = 0x1CA0; break;
+ case 0x10E1: mapChar = 0x1CA1; break;
+ case 0x10E2: mapChar = 0x1CA2; break;
+ case 0x10E3: mapChar = 0x1CA3; break;
+ case 0x10E4: mapChar = 0x1CA4; break;
+ case 0x10E5: mapChar = 0x1CA5; break;
+ case 0x10E6: mapChar = 0x1CA6; break;
+ case 0x10E7: mapChar = 0x1CA7; break;
+ case 0x10E8: mapChar = 0x1CA8; break;
+ case 0x10E9: mapChar = 0x1CA9; break;
+ case 0x10EA: mapChar = 0x1CAA; break;
+ case 0x10EB: mapChar = 0x1CAB; break;
+ case 0x10EC: mapChar = 0x1CAC; break;
+ case 0x10ED: mapChar = 0x1CAD; break;
+ case 0x10EE: mapChar = 0x1CAE; break;
+ case 0x10EF: mapChar = 0x1CAF; break;
+ case 0x10F0: mapChar = 0x1CB0; break;
+ case 0x10F1: mapChar = 0x1CB1; break;
+ case 0x10F2: mapChar = 0x1CB2; break;
+ case 0x10F3: mapChar = 0x1CB3; break;
+ case 0x10F4: mapChar = 0x1CB4; break;
+ case 0x10F5: mapChar = 0x1CB5; break;
+ case 0x10F6: mapChar = 0x1CB6; break;
+ case 0x10F7: mapChar = 0x1CB7; break;
+ case 0x10F8: mapChar = 0x1CB8; break;
+ case 0x10F9: mapChar = 0x1CB9; break;
+ case 0x10FA: mapChar = 0x1CBA; break;
+ case 0x10FD: mapChar = 0x1CBD; break;
+ case 0x10FE: mapChar = 0x1CBE; break;
+ case 0x10FF: mapChar = 0x1CBF; break;
case 0x1C80: mapChar = 0x0412; break;
case 0x1C81: mapChar = 0x0414; break;
case 0x1C82: mapChar = 0x041E; break;
@@ -928,5 +1075,5 @@
static {
$$Initializers
- }
+ }
}
--- a/make/data/characterdata/CharacterData01.java.template Wed Nov 21 13:20:52 2018 -0500
+++ b/make/data/characterdata/CharacterData01.java.template Wed Nov 21 13:53:17 2018 -0500
@@ -364,6 +364,8 @@
case 0x10E78: retval = 700; break; // RUMI NUMBER SEVEN HUNDRED
case 0x10E79: retval = 800; break; // RUMI NUMBER EIGHT HUNDRED
case 0x10E7A: retval = 900; break; // RUMI NUMBER NINE HUNDRED
+ case 0x10F25: retval = 100; break; // OLD SOGDIAN NUMBER ONE HUNDRED
+ case 0x10F54: retval = 100; break; // SOGDIAN NUMBER ONE HUNDRED
case 0x1105E: retval = 40; break; // BRAHMI NUMBER FORTY
case 0x1105F: retval = 50; break; // BRAHMI NUMBER FIFTY
case 0x11060: retval = 60; break; // BRAHMI NUMBER SIXTY
@@ -407,6 +409,46 @@
case 0x1D36F: retval = 70; break; // COUNTING ROD TENS DIGIT SEVEN
case 0x1D370: retval = 80; break; // COUNTING ROD TENS DIGIT EIGHT
case 0x1D371: retval = 90; break; // COUNTING ROD TENS DIGIT NINE
+ case 0x1EC7D: retval = 40; break; // INDIC SIYAQ NUMBER FORTY
+ case 0x1EC7E: retval = 50; break; // INDIC SIYAQ NUMBER FIFTY
+ case 0x1EC7F: retval = 60; break; // INDIC SIYAQ NUMBER SIXTY
+ case 0X1EC80: retval = 70; break; // INDIC SIYAQ NUMBER SEVENTY
+ case 0X1EC81: retval = 80; break; // INDIC SIYAQ NUMBER EIGHTY
+ case 0X1EC82: retval = 90; break; // INDIC SIYAQ NUMBER NINETY
+ case 0X1EC83: retval = 100; break; // INDIC SIYAQ NUMBER ONE HUNDRED
+ case 0X1EC84: retval = 200; break; // INDIC SIYAQ NUMBER TWO HUNDRED
+ case 0X1EC85: retval = 300; break; // INDIC SIYAQ NUMBER THREE HUNDRED
+ case 0X1EC86: retval = 400; break; // INDIC SIYAQ NUMBER FOUR HUNDRED
+ case 0X1EC87: retval = 500; break; // INDIC SIYAQ NUMBER FIVE HUNDRED
+ case 0X1EC88: retval = 600; break; // INDIC SIYAQ NUMBER SIX HUNDRED
+ case 0X1EC89: retval = 700; break; // INDIC SIYAQ NUMBER SEVEN HUNDRED
+ case 0X1EC8A: retval = 800; break; // INDIC SIYAQ NUMBER EIGHT HUNDRED
+ case 0X1EC8B: retval = 900; break; // INDIC SIYAQ NUMBER NINE HUNDRED
+ case 0X1EC8C: retval = 1000; break; // INDIC SIYAQ NUMBER ONE THOUSAND
+ case 0X1EC8D: retval = 2000; break; // INDIC SIYAQ NUMBER TWO THOUSAND
+ case 0X1EC8E: retval = 3000; break; // INDIC SIYAQ NUMBER THREE THOUSAND
+ case 0X1EC8F: retval = 4000; break; // INDIC SIYAQ NUMBER FOUR THOUSAND
+ case 0X1EC90: retval = 5000; break; // INDIC SIYAQ NUMBER FIVE THOUSAND
+ case 0X1EC91: retval = 6000; break; // INDIC SIYAQ NUMBER SIX THOUSAND
+ case 0X1EC92: retval = 7000; break; // INDIC SIYAQ NUMBER SEVEN THOUSAND
+ case 0X1EC93: retval = 8000; break; // INDIC SIYAQ NUMBER EIGHT THOUSAND
+ case 0X1EC94: retval = 9000; break; // INDIC SIYAQ NUMBER NINE THOUSAND
+ case 0X1EC95: retval = 10000; break; // INDIC SIYAQ NUMBER TEN THOUSAND
+ case 0X1EC96: retval = 20000; break; // INDIC SIYAQ NUMBER TWENTY THOUSAND
+ case 0X1EC97: retval = 30000; break; // INDIC SIYAQ NUMBER THIRTY THOUSAND
+ case 0X1EC98: retval = 40000; break; // INDIC SIYAQ NUMBER FORTY THOUSAND
+ case 0X1EC99: retval = 50000; break; // INDIC SIYAQ NUMBER FIFTY THOUSAND
+ case 0X1EC9A: retval = 60000; break; // INDIC SIYAQ NUMBER SIXTY THOUSAND
+ case 0X1EC9B: retval = 70000; break; // INDIC SIYAQ NUMBER SEVENTY THOUSAND
+ case 0X1EC9C: retval = 80000; break; // INDIC SIYAQ NUMBER EIGHTY THOUSAND
+ case 0X1EC9D: retval = 90000; break; // INDIC SIYAQ NUMBER NINETY THOUSAND
+ case 0X1EC9E: retval = 100000; break; // INDIC SIYAQ NUMBER LAKH
+ case 0X1EC9F: retval = 200000; break; // INDIC SIYAQ NUMBER LAKHAN
+ case 0X1ECA0: retval = 100000; break; // INDIC SIYAQ LAKH MARK
+ case 0X1ECA1: retval = 10000000; break; // INDIC SIYAQ NUMBER KAROR
+ case 0X1ECA2: retval = 20000000; break; // INDIC SIYAQ NUMBER KARORAN
+ case 0X1ECB3: retval = 10000; break; // INDIC SIYAQ NUMBER ALTERNATE TEN THOUSAND
+ case 0X1ECB4: retval = 100000; break; // INDIC SIYAQ NUMBER ALTERNATE LAKH MARK
default: retval = -2; break;
}
--- a/make/data/unicodedata/PropList.txt Wed Nov 21 13:20:52 2018 -0500
+++ b/make/data/unicodedata/PropList.txt Wed Nov 21 13:53:17 2018 -0500
@@ -1,6 +1,6 @@
-# PropList-10.0.0.txt
-# Date: 2017-03-10, 08:25:30 GMT
-# Copyright (c) 2017 Unicode, Inc.
+# PropList-11.0.0.txt
+# Date: 2018-03-15, 04:28:35 GMT
+# Copyright (c) 2018 Unicode, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -125,7 +125,7 @@
05C3 ; Terminal_Punctuation # Po HEBREW PUNCTUATION SOF PASUQ
060C ; Terminal_Punctuation # Po ARABIC COMMA
061B ; Terminal_Punctuation # Po ARABIC SEMICOLON
-061F ; Terminal_Punctuation # Po ARABIC QUESTION MARK
+061E..061F ; Terminal_Punctuation # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
06D4 ; Terminal_Punctuation # Po ARABIC FULL STOP
0700..070A ; Terminal_Punctuation # Po [11] SYRIAC END OF PARAGRAPH..SYRIAC CONTRACTION
070C ; Terminal_Punctuation # Po SYRIAC HARKLEAN METOBELUS
@@ -156,6 +156,8 @@
2E2E ; Terminal_Punctuation # Po REVERSED QUESTION MARK
2E3C ; Terminal_Punctuation # Po STENOGRAPHIC FULL STOP
2E41 ; Terminal_Punctuation # Po REVERSED COMMA
+2E4C ; Terminal_Punctuation # Po MEDIEVAL COMMA
+2E4E ; Terminal_Punctuation # Po PUNCTUS ELEVATUS MARK
3001..3002 ; Terminal_Punctuation # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP
A4FE..A4FF ; Terminal_Punctuation # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
A60D..A60F ; Terminal_Punctuation # Po [3] VAI COMMA..VAI QUESTION MARK
@@ -185,6 +187,7 @@
10AF0..10AF5 ; Terminal_Punctuation # Po [6] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION TWO DOTS
10B3A..10B3F ; Terminal_Punctuation # Po [6] TINY TWO DOTS OVER ONE DOT PUNCTUATION..LARGE ONE RING OVER TWO RINGS PUNCTUATION
10B99..10B9C ; Terminal_Punctuation # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
+10F55..10F59 ; Terminal_Punctuation # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
11047..1104D ; Terminal_Punctuation # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
110BE..110C1 ; Terminal_Punctuation # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
11141..11143 ; Terminal_Punctuation # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
@@ -204,15 +207,17 @@
11AA1..11AA2 ; Terminal_Punctuation # Po [2] SOYOMBO TERMINAL MARK-1..SOYOMBO TERMINAL MARK-2
11C41..11C43 ; Terminal_Punctuation # Po [3] BHAIKSUKI DANDA..BHAIKSUKI WORD SEPARATOR
11C71 ; Terminal_Punctuation # Po MARCHEN MARK SHAD
+11EF7..11EF8 ; Terminal_Punctuation # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
12470..12474 ; Terminal_Punctuation # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
16A6E..16A6F ; Terminal_Punctuation # Po [2] MRO DANDA..MRO DOUBLE DANDA
16AF5 ; Terminal_Punctuation # Po BASSA VAH FULL STOP
16B37..16B39 ; Terminal_Punctuation # Po [3] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN CIM CHEEM
16B44 ; Terminal_Punctuation # Po PAHAWH HMONG SIGN XAUS
+16E97..16E98 ; Terminal_Punctuation # Po [2] MEDEFAIDRIN COMMA..MEDEFAIDRIN FULL STOP
1BC9F ; Terminal_Punctuation # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1DA87..1DA8A ; Terminal_Punctuation # Po [4] SIGNWRITING COMMA..SIGNWRITING COLON
-# Total code points: 252
+# Total code points: 264
# ================================================
@@ -661,6 +666,7 @@
10A01..10A03 ; Other_Alphabetic # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
10A05..10A06 ; Other_Alphabetic # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
10A0C..10A0F ; Other_Alphabetic # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10D24..10D27 ; Other_Alphabetic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
11000 ; Other_Alphabetic # Mc BRAHMI SIGN CANDRABINDU
11001 ; Other_Alphabetic # Mn BRAHMI SIGN ANUSVARA
11002 ; Other_Alphabetic # Mc BRAHMI SIGN VISARGA
@@ -673,6 +679,7 @@
11127..1112B ; Other_Alphabetic # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
1112C ; Other_Alphabetic # Mc CHAKMA VOWEL SIGN E
1112D..11132 ; Other_Alphabetic # Mn [6] CHAKMA VOWEL SIGN AI..CHAKMA AU MARK
+11145..11146 ; Other_Alphabetic # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
11180..11181 ; Other_Alphabetic # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
11182 ; Other_Alphabetic # Mc SHARADA SIGN VISARGA
111B3..111B5 ; Other_Alphabetic # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
@@ -730,9 +737,10 @@
11722..11725 ; Other_Alphabetic # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
11726 ; Other_Alphabetic # Mc AHOM VOWEL SIGN E
11727..1172A ; Other_Alphabetic # Mn [4] AHOM VOWEL SIGN AW..AHOM VOWEL SIGN AM
-11A01..11A06 ; Other_Alphabetic # Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O
-11A07..11A08 ; Other_Alphabetic # Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU
-11A09..11A0A ; Other_Alphabetic # Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+1182C..1182E ; Other_Alphabetic # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+1182F..11837 ; Other_Alphabetic # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+11838 ; Other_Alphabetic # Mc DOGRA SIGN VISARGA
+11A01..11A0A ; Other_Alphabetic # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
11A35..11A38 ; Other_Alphabetic # Mn [4] ZANABAZAR SQUARE SIGN CANDRABINDU..ZANABAZAR SQUARE SIGN ANUSVARA
11A39 ; Other_Alphabetic # Mc ZANABAZAR SQUARE SIGN VISARGA
11A3B..11A3E ; Other_Alphabetic # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
@@ -758,6 +766,13 @@
11D3F..11D41 ; Other_Alphabetic # Mn [3] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI SIGN VISARGA
11D43 ; Other_Alphabetic # Mn MASARAM GONDI SIGN CANDRA
11D47 ; Other_Alphabetic # Mn MASARAM GONDI RA-KARA
+11D8A..11D8E ; Other_Alphabetic # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+11D90..11D91 ; Other_Alphabetic # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D93..11D94 ; Other_Alphabetic # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+11D95 ; Other_Alphabetic # Mn GUNJALA GONDI SIGN ANUSVARA
+11D96 ; Other_Alphabetic # Mc GUNJALA GONDI SIGN VISARGA
+11EF3..11EF4 ; Other_Alphabetic # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+11EF5..11EF6 ; Other_Alphabetic # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
16B30..16B36 ; Other_Alphabetic # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
16F51..16F7E ; Other_Alphabetic # Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG
1BC9E ; Other_Alphabetic # Mn DUPLOYAN DOUBLE MARK
@@ -771,7 +786,7 @@
1F150..1F169 ; Other_Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F170..1F189 ; Other_Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
-# Total code points: 1300
+# Total code points: 1334
# ================================================
@@ -780,10 +795,10 @@
3021..3029 ; Ideographic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
3038..303A ; Ideographic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
3400..4DB5 ; Ideographic # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEA ; Ideographic # Lo [20971] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEA
+4E00..9FEF ; Ideographic # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
F900..FA6D ; Ideographic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
-17000..187EC ; Ideographic # Lo [6125] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC
+17000..187F1 ; Ideographic # Lo [6130] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F1
18800..18AF2 ; Ideographic # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
1B170..1B2FB ; Ideographic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
20000..2A6D6 ; Ideographic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
@@ -793,7 +808,7 @@
2CEB0..2EBE0 ; Ideographic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 96174
+# Total code points: 96184
# ================================================
@@ -953,6 +968,9 @@
FFE3 ; Diacritic # Sk FULLWIDTH MACRON
102E0 ; Diacritic # Mn COPTIC EPACT THOUSANDS MARK
10AE5..10AE6 ; Diacritic # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
+10D22..10D23 ; Diacritic # Lo [2] HANIFI ROHINGYA MARK SAKIN..HANIFI ROHINGYA MARK NA KHONNA
+10D24..10D27 ; Diacritic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10F46..10F50 ; Diacritic # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
110B9..110BA ; Diacritic # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
11133..11134 ; Diacritic # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA
11173 ; Diacritic # Mn MAHAJANI SIGN NUKTA
@@ -973,12 +991,14 @@
116B6 ; Diacritic # Mc TAKRI SIGN VIRAMA
116B7 ; Diacritic # Mn TAKRI SIGN NUKTA
1172B ; Diacritic # Mn AHOM SIGN KILLER
+11839..1183A ; Diacritic # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
11A34 ; Diacritic # Mn ZANABAZAR SQUARE SIGN VIRAMA
11A47 ; Diacritic # Mn ZANABAZAR SQUARE SUBJOINER
11A99 ; Diacritic # Mn SOYOMBO SUBJOINER
11C3F ; Diacritic # Mn BHAIKSUKI SIGN VIRAMA
11D42 ; Diacritic # Mn MASARAM GONDI SIGN NUKTA
11D44..11D45 ; Diacritic # Mn [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA
+11D97 ; Diacritic # Mn GUNJALA GONDI VIRAMA
16AF0..16AF4 ; Diacritic # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
16F8F..16F92 ; Diacritic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
16F93..16F9F ; Diacritic # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
@@ -991,7 +1011,7 @@
1E944..1E946 ; Diacritic # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK
1E948..1E94A ; Diacritic # Mn [3] ADLAM CONSONANT MODIFIER..ADLAM NUKTA
-# Total code points: 798
+# Total code points: 818
# ================================================
@@ -1137,7 +1157,7 @@
# ================================================
3400..4DB5 ; Unified_Ideograph # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEA ; Unified_Ideograph # Lo [20971] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEA
+4E00..9FEF ; Unified_Ideograph # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
FA0E..FA0F ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F
FA11 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA11
FA13..FA14 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14
@@ -1151,7 +1171,7 @@
2B820..2CEA1 ; Unified_Ideograph # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; Unified_Ideograph # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
-# Total code points: 87882
+# Total code points: 87887
# ================================================
@@ -1255,10 +1275,13 @@
002E ; Sentence_Terminal # Po FULL STOP
003F ; Sentence_Terminal # Po QUESTION MARK
0589 ; Sentence_Terminal # Po ARMENIAN FULL STOP
-061F ; Sentence_Terminal # Po ARABIC QUESTION MARK
+061E..061F ; Sentence_Terminal # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
06D4 ; Sentence_Terminal # Po ARABIC FULL STOP
0700..0702 ; Sentence_Terminal # Po [3] SYRIAC END OF PARAGRAPH..SYRIAC SUBLINEAR FULL STOP
07F9 ; Sentence_Terminal # Po NKO EXCLAMATION MARK
+0837 ; Sentence_Terminal # Po SAMARITAN PUNCTUATION MELODIC QITSA
+0839 ; Sentence_Terminal # Po SAMARITAN PUNCTUATION QITSA
+083D..083E ; Sentence_Terminal # Po [2] SAMARITAN PUNCTUATION SOF MASHFAAT..SAMARITAN PUNCTUATION ANNAAU
0964..0965 ; Sentence_Terminal # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
104A..104B ; Sentence_Terminal # Po [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION
1362 ; Sentence_Terminal # Po ETHIOPIC FULL STOP
@@ -1296,6 +1319,7 @@
FF1F ; Sentence_Terminal # Po FULLWIDTH QUESTION MARK
FF61 ; Sentence_Terminal # Po HALFWIDTH IDEOGRAPHIC FULL STOP
10A56..10A57 ; Sentence_Terminal # Po [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10F55..10F59 ; Sentence_Terminal # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
11047..11048 ; Sentence_Terminal # Po [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA
110BE..110C1 ; Sentence_Terminal # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
11141..11143 ; Sentence_Terminal # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
@@ -1313,14 +1337,16 @@
11A42..11A43 ; Sentence_Terminal # Po [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD
11A9B..11A9C ; Sentence_Terminal # Po [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD
11C41..11C42 ; Sentence_Terminal # Po [2] BHAIKSUKI DANDA..BHAIKSUKI DOUBLE DANDA
+11EF7..11EF8 ; Sentence_Terminal # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
16A6E..16A6F ; Sentence_Terminal # Po [2] MRO DANDA..MRO DOUBLE DANDA
16AF5 ; Sentence_Terminal # Po BASSA VAH FULL STOP
16B37..16B38 ; Sentence_Terminal # Po [2] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS TSHAB CEEB
16B44 ; Sentence_Terminal # Po PAHAWH HMONG SIGN XAUS
+16E98 ; Sentence_Terminal # Po MEDEFAIDRIN FULL STOP
1BC9F ; Sentence_Terminal # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1DA88 ; Sentence_Terminal # Po SIGNWRITING FULL STOP
-# Total code points: 128
+# Total code points: 141
# ================================================
@@ -1521,14 +1547,10 @@
2B74..2B75 ; Pattern_Syntax # Cn [2] <reserved-2B74>..<reserved-2B75>
2B76..2B95 ; Pattern_Syntax # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
2B96..2B97 ; Pattern_Syntax # Cn [2] <reserved-2B96>..<reserved-2B97>
-2B98..2BB9 ; Pattern_Syntax # So [34] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX
-2BBA..2BBC ; Pattern_Syntax # Cn [3] <reserved-2BBA>..<reserved-2BBC>
-2BBD..2BC8 ; Pattern_Syntax # So [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
+2B98..2BC8 ; Pattern_Syntax # So [49] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
2BC9 ; Pattern_Syntax # Cn <reserved-2BC9>
-2BCA..2BD2 ; Pattern_Syntax # So [9] TOP HALF BLACK CIRCLE..GROUP MARK
-2BD3..2BEB ; Pattern_Syntax # Cn [25] <reserved-2BD3>..<reserved-2BEB>
-2BEC..2BEF ; Pattern_Syntax # So [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
-2BF0..2BFF ; Pattern_Syntax # Cn [16] <reserved-2BF0>..<reserved-2BFF>
+2BCA..2BFE ; Pattern_Syntax # So [53] TOP HALF BLACK CIRCLE..REVERSED RIGHT ANGLE
+2BFF ; Pattern_Syntax # Cn <reserved-2BFF>
2E00..2E01 ; Pattern_Syntax # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
2E02 ; Pattern_Syntax # Pi LEFT SUBSTITUTION BRACKET
2E03 ; Pattern_Syntax # Pf RIGHT SUBSTITUTION BRACKET
@@ -1566,8 +1588,8 @@
2E40 ; Pattern_Syntax # Pd DOUBLE HYPHEN
2E41 ; Pattern_Syntax # Po REVERSED COMMA
2E42 ; Pattern_Syntax # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
-2E43..2E49 ; Pattern_Syntax # Po [7] DASH WITH LEFT UPTURN..DOUBLE STACKED COMMA
-2E4A..2E7F ; Pattern_Syntax # Cn [54] <reserved-2E4A>..<reserved-2E7F>
+2E43..2E4E ; Pattern_Syntax # Po [12] DASH WITH LEFT UPTURN..PUNCTUS ELEVATUS MARK
+2E4F..2E7F ; Pattern_Syntax # Cn [49] <reserved-2E4F>..<reserved-2E7F>
3001..3003 ; Pattern_Syntax # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
3008 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET
3009 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET
@@ -1606,8 +1628,9 @@
070F ; Prepended_Concatenation_Mark # Cf SYRIAC ABBREVIATION MARK
08E2 ; Prepended_Concatenation_Mark # Cf ARABIC DISPUTED END OF AYAH
110BD ; Prepended_Concatenation_Mark # Cf KAITHI NUMBER SIGN
+110CD ; Prepended_Concatenation_Mark # Cf KAITHI NUMBER SIGN ABOVE
-# Total code points: 10
+# Total code points: 11
# ================================================
--- a/make/data/unicodedata/Scripts.txt Wed Nov 21 13:20:52 2018 -0500
+++ b/make/data/unicodedata/Scripts.txt Wed Nov 21 13:53:17 2018 -0500
@@ -1,6 +1,6 @@
-# Scripts-10.0.0.txt
-# Date: 2017-03-11, 06:40:37 GMT
-# Copyright (c) 2017 Unicode, Inc.
+# Scripts-11.0.0.txt
+# Date: 2018-02-21, 05:34:31 GMT
+# Copyright (c) 2018 Unicode, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -308,10 +308,8 @@
2B47..2B4C ; Common # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
2B4D..2B73 ; Common # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B76..2B95 ; Common # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-2B98..2BB9 ; Common # So [34] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX
-2BBD..2BC8 ; Common # So [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
-2BCA..2BD2 ; Common # So [9] TOP HALF BLACK CIRCLE..GROUP MARK
-2BEC..2BEF ; Common # So [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+2B98..2BC8 ; Common # So [49] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
+2BCA..2BFE ; Common # So [53] TOP HALF BLACK CIRCLE..REVERSED RIGHT ANGLE
2E00..2E01 ; Common # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
2E02 ; Common # Pi LEFT SUBSTITUTION BRACKET
2E03 ; Common # Pf RIGHT SUBSTITUTION BRACKET
@@ -349,7 +347,7 @@
2E40 ; Common # Pd DOUBLE HYPHEN
2E41 ; Common # Po REVERSED COMMA
2E42 ; Common # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
-2E43..2E49 ; Common # Po [7] DASH WITH LEFT UPTURN..DOUBLE STACKED COMMA
+2E43..2E4E ; Common # Po [12] DASH WITH LEFT UPTURN..PUNCTUS ELEVATUS MARK
2FF0..2FFB ; Common # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
3000 ; Common # Zs IDEOGRAPHIC SPACE
3001..3003 ; Common # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
@@ -522,8 +520,9 @@
1D183..1D184 ; Common # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
1D18C..1D1A9 ; Common # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
1D1AE..1D1E8 ; Common # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN
+1D2E0..1D2F3 ; Common # No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN
1D300..1D356 ; Common # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
-1D360..1D371 ; Common # No [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE
+1D360..1D378 ; Common # No [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE
1D400..1D454 ; Common # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
1D456..1D49C ; Common # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
1D49E..1D49F ; Common # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
@@ -565,6 +564,11 @@
1D7C3 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
1D7C4..1D7CB ; Common # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
1D7CE..1D7FF ; Common # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1EC71..1ECAB ; Common # No [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE
+1ECAC ; Common # So INDIC SIYAQ PLACEHOLDER
+1ECAD..1ECAF ; Common # No [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS
+1ECB0 ; Common # Sc INDIC SIYAQ RUPEE MARK
+1ECB1..1ECB4 ; Common # No [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK
1F000..1F02B ; Common # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
1F030..1F093 ; Common # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
1F0A0..1F0AE ; Common # So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
@@ -572,8 +576,7 @@
1F0C1..1F0CF ; Common # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
1F0D1..1F0F5 ; Common # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
1F100..1F10C ; Common # No [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
-1F110..1F12E ; Common # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
-1F130..1F16B ; Common # So [60] SQUARED LATIN CAPITAL LETTER A..RAISED MD SIGN
+1F110..1F16B ; Common # So [92] PARENTHESIZED LATIN CAPITAL LETTER A..RAISED MD SIGN
1F170..1F1AC ; Common # So [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD
1F1E6..1F1FF ; Common # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
1F201..1F202 ; Common # So [2] SQUARED KATAKANA KOKO..SQUARED KATAKANA SA
@@ -585,9 +588,9 @@
1F3FB..1F3FF ; Common # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
1F400..1F6D4 ; Common # So [725] RAT..PAGODA
1F6E0..1F6EC ; Common # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
-1F6F0..1F6F8 ; Common # So [9] SATELLITE..FLYING SAUCER
+1F6F0..1F6F9 ; Common # So [10] SATELLITE..SKATEBOARD
1F700..1F773 ; Common # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
-1F780..1F7D4 ; Common # So [85] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR
+1F780..1F7D8 ; Common # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
1F800..1F80B ; Common # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
1F810..1F847 ; Common # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
1F850..1F859 ; Common # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
@@ -595,15 +598,18 @@
1F890..1F8AD ; Common # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
1F900..1F90B ; Common # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
1F910..1F93E ; Common # So [47] ZIPPER-MOUTH FACE..HANDBALL
-1F940..1F94C ; Common # So [13] WILTED FLOWER..CURLING STONE
-1F950..1F96B ; Common # So [28] CROISSANT..CANNED FOOD
-1F980..1F997 ; Common # So [24] CRAB..CRICKET
-1F9C0 ; Common # So CHEESE WEDGE
-1F9D0..1F9E6 ; Common # So [23] FACE WITH MONOCLE..SOCKS
+1F940..1F970 ; Common # So [49] WILTED FLOWER..SMILING FACE WITH SMILING EYES AND THREE HEARTS
+1F973..1F976 ; Common # So [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
+1F97A ; Common # So FACE WITH PLEADING EYES
+1F97C..1F9A2 ; Common # So [39] LAB COAT..SWAN
+1F9B0..1F9B9 ; Common # So [10] EMOJI COMPONENT RED HAIR..SUPERVILLAIN
+1F9C0..1F9C2 ; Common # So [3] CHEESE WEDGE..SALT SHAKER
+1F9D0..1F9FF ; Common # So [48] FACE WITH MONOCLE..NAZAR AMULET
+1FA60..1FA6D ; Common # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
E0001 ; Common # Cf LANGUAGE TAG
E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
-# Total code points: 7363
+# Total code points: 7591
# ================================================
@@ -646,8 +652,7 @@
A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
A78B..A78E ; Latin # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; Latin # Lo LATIN LETTER SINOLOGICAL DOT
-A790..A7AE ; Latin # L& [31] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER SMALL CAPITAL I
-A7B0..A7B7 ; Latin # L& [8] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER OMEGA
+A790..A7B9 ; Latin # L& [42] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER U WITH STROKE
A7F7 ; Latin # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; Latin # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; Latin # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -659,7 +664,7 @@
FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
-# Total code points: 1350
+# Total code points: 1353
# ================================================
@@ -753,13 +758,13 @@
0531..0556 ; Armenian # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
0559 ; Armenian # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
055A..055F ; Armenian # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
-0561..0587 ; Armenian # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+0560..0588 ; Armenian # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
058A ; Armenian # Pd ARMENIAN HYPHEN
058D..058E ; Armenian # So [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN
058F ; Armenian # Sc ARMENIAN DRAM SIGN
FB13..FB17 ; Armenian # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
-# Total code points: 93
+# Total code points: 95
# ================================================
@@ -773,7 +778,7 @@
05C6 ; Hebrew # Po HEBREW PUNCTUATION NUN HAFUKHA
05C7 ; Hebrew # Mn HEBREW POINT QAMATS QATAN
05D0..05EA ; Hebrew # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
-05F0..05F2 ; Hebrew # Lo [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
+05EF..05F2 ; Hebrew # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
05F3..05F4 ; Hebrew # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
FB1D ; Hebrew # Lo HEBREW LETTER YOD WITH HIRIQ
FB1E ; Hebrew # Mn HEBREW POINT JUDEO-SPANISH VARIKA
@@ -786,7 +791,7 @@
FB43..FB44 ; Hebrew # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
-# Total code points: 133
+# Total code points: 134
# ================================================
@@ -823,7 +828,7 @@
0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
08A0..08B4 ; Arabic # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
08B6..08BD ; Arabic # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
-08D4..08E1 ; Arabic # Mn [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA
+08D3..08E1 ; Arabic # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
08E3..08FF ; Arabic # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
FBB2..FBC1 ; Arabic # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
@@ -871,7 +876,7 @@
1EEAB..1EEBB ; Arabic # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
1EEF0..1EEF1 ; Arabic # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
-# Total code points: 1280
+# Total code points: 1281
# ================================================
@@ -921,9 +926,10 @@
A8F8..A8FA ; Devanagari # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
A8FC ; Devanagari # Po DEVANAGARI SIGN SIDDHAM
-A8FD ; Devanagari # Lo DEVANAGARI JAIN OM
-
-# Total code points: 154
+A8FD..A8FE ; Devanagari # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
+A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY
+
+# Total code points: 156
# ================================================
@@ -956,8 +962,9 @@
09FB ; Bengali # Sc BENGALI GANDA MARK
09FC ; Bengali # Lo BENGALI LETTER VEDIC ANUSVARA
09FD ; Bengali # Po BENGALI ABBREVIATION SIGN
-
-# Total code points: 95
+09FE ; Bengali # Mn BENGALI SANDHI MARK
+
+# Total code points: 96
# ================================================
@@ -982,8 +989,9 @@
0A70..0A71 ; Gurmukhi # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
0A72..0A74 ; Gurmukhi # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
0A75 ; Gurmukhi # Mn GURMUKHI SIGN YAKASH
-
-# Total code points: 79
+0A76 ; Gurmukhi # Po GURMUKHI ABBREVIATION SIGN
+
+# Total code points: 80
# ================================================
@@ -1078,6 +1086,7 @@
0C00 ; Telugu # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE
0C01..0C03 ; Telugu # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C04 ; Telugu # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE
0C05..0C0C ; Telugu # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
0C0E..0C10 ; Telugu # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
0C12..0C28 ; Telugu # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
@@ -1095,13 +1104,14 @@
0C78..0C7E ; Telugu # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
0C7F ; Telugu # So TELUGU SIGN TUUMU
-# Total code points: 96
+# Total code points: 97
# ================================================
0C80 ; Kannada # Lo KANNADA SIGN SPACING CANDRABINDU
0C81 ; Kannada # Mn KANNADA SIGN CANDRABINDU
0C82..0C83 ; Kannada # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C84 ; Kannada # Po KANNADA SIGN SIDDHAM
0C85..0C8C ; Kannada # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
0C8E..0C90 ; Kannada # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
0C92..0CA8 ; Kannada # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
@@ -1123,7 +1133,7 @@
0CE6..0CEF ; Kannada # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
0CF1..0CF2 ; Kannada # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-# Total code points: 88
+# Total code points: 89
# ================================================
@@ -1317,14 +1327,16 @@
10A0..10C5 ; Georgian # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
10C7 ; Georgian # L& GEORGIAN CAPITAL LETTER YN
10CD ; Georgian # L& GEORGIAN CAPITAL LETTER AEN
-10D0..10FA ; Georgian # Lo [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10D0..10FA ; Georgian # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
10FC ; Georgian # Lm MODIFIER LETTER GEORGIAN NAR
-10FD..10FF ; Georgian # Lo [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+10FD..10FF ; Georgian # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+1C90..1CBA ; Georgian # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; Georgian # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
2D00..2D25 ; Georgian # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
2D27 ; Georgian # L& GEORGIAN SMALL LETTER YN
2D2D ; Georgian # L& GEORGIAN SMALL LETTER AEN
-# Total code points: 127
+# Total code points: 173
# ================================================
@@ -1453,7 +1465,7 @@
1810..1819 ; Mongolian # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
1820..1842 ; Mongolian # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
1843 ; Mongolian # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
-1844..1877 ; Mongolian # Lo [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
+1844..1878 ; Mongolian # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
1880..1884 ; Mongolian # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
1885..1886 ; Mongolian # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
1887..18A8 ; Mongolian # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
@@ -1461,7 +1473,7 @@
18AA ; Mongolian # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
11660..1166C ; Mongolian # Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
-# Total code points: 166
+# Total code points: 167
# ================================================
@@ -1490,10 +1502,10 @@
# ================================================
02EA..02EB ; Bopomofo # Sk [2] MODIFIER LETTER YIN DEPARTING TONE MARK..MODIFIER LETTER YANG DEPARTING TONE MARK
-3105..312E ; Bopomofo # Lo [42] BOPOMOFO LETTER B..BOPOMOFO LETTER O WITH DOT ABOVE
+3105..312F ; Bopomofo # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
31A0..31BA ; Bopomofo # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
-# Total code points: 71
+# Total code points: 72
# ================================================
@@ -1506,7 +1518,7 @@
3038..303A ; Han # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
303B ; Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
3400..4DB5 ; Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEA ; Han # Lo [20971] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEA
+4E00..9FEF ; Han # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
F900..FA6D ; Han # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
@@ -1516,7 +1528,7 @@
2CEB0..2EBE0 ; Han # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 89228
+# Total code points: 89233
# ================================================
@@ -1579,13 +1591,14 @@
FE20..FE2D ; Inherited # Mn [14] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON BELOW
101FD ; Inherited # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
102E0 ; Inherited # Mn COPTIC EPACT THOUSANDS MARK
+1133B ; Inherited # Mn COMBINING BINDU BELOW
1D167..1D169 ; Inherited # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
1D17B..1D182 ; Inherited # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
1D185..1D18B ; Inherited # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
1D1AA..1D1AD ; Inherited # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 568
+# Total code points: 569
# ================================================
@@ -1778,13 +1791,13 @@
10A0C..10A0F ; Kharoshthi # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
10A10..10A13 ; Kharoshthi # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
10A15..10A17 ; Kharoshthi # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
-10A19..10A33 ; Kharoshthi # Lo [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
+10A19..10A35 ; Kharoshthi # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
10A38..10A3A ; Kharoshthi # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
10A3F ; Kharoshthi # Mn KHAROSHTHI VIRAMA
-10A40..10A47 ; Kharoshthi # No [8] KHAROSHTHI DIGIT ONE..KHAROSHTHI NUMBER ONE THOUSAND
+10A40..10A48 ; Kharoshthi # No [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF
10A50..10A58 ; Kharoshthi # Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
-# Total code points: 65
+# Total code points: 68
# ================================================
@@ -1841,8 +1854,10 @@
07F6 ; Nko # So NKO SYMBOL OO DENNEN
07F7..07F9 ; Nko # Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK
07FA ; Nko # Lm NKO LAJANYALAN
-
-# Total code points: 59
+07FD ; Nko # Mn NKO DANTAYALAN
+07FE..07FF ; Nko # Sc [2] NKO DOROME SIGN..NKO TAMAN SIGN
+
+# Total code points: 62
# ================================================
@@ -2137,8 +2152,9 @@
110BB..110BC ; Kaithi # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
110BD ; Kaithi # Cf KAITHI NUMBER SIGN
110BE..110C1 ; Kaithi # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
-
-# Total code points: 66
+110CD ; Kaithi # Cf KAITHI NUMBER SIGN ABOVE
+
+# Total code points: 67
# ================================================
@@ -2186,8 +2202,10 @@
1112D..11134 ; Chakma # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
11136..1113F ; Chakma # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
11140..11143 ; Chakma # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
-
-# Total code points: 67
+11144 ; Chakma # Lo CHAKMA LETTER LHAA
+11145..11146 ; Chakma # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+
+# Total code points: 70
# ================================================
@@ -2224,8 +2242,8 @@
111B6..111BE ; Sharada # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111BF..111C0 ; Sharada # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
111C1..111C4 ; Sharada # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
-111C5..111C9 ; Sharada # Po [5] SHARADA DANDA..SHARADA SANDHI MARK
-111CA..111CC ; Sharada # Mn [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK
+111C5..111C8 ; Sharada # Po [4] SHARADA DANDA..SHARADA SEPARATOR
+111C9..111CC ; Sharada # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
111CD ; Sharada # Po SHARADA SUTRA MARK
111D0..111D9 ; Sharada # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
111DA ; Sharada # Lo SHARADA EKAM
@@ -2502,7 +2520,7 @@
# ================================================
-11700..11719 ; Ahom # Lo [26] AHOM LETTER KA..AHOM LETTER JHA
+11700..1171A ; Ahom # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
1171D..1171F ; Ahom # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
11720..11721 ; Ahom # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
11722..11725 ; Ahom # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
@@ -2513,7 +2531,7 @@
1173C..1173E ; Ahom # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
1173F ; Ahom # So AHOM SYMBOL VI
-# Total code points: 57
+# Total code points: 58
# ================================================
@@ -2618,8 +2636,9 @@
11450..11459 ; Newa # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
1145B ; Newa # Po NEWA PLACEHOLDER MARK
1145D ; Newa # Po NEWA INSERTION SIGN
-
-# Total code points: 92
+1145E ; Newa # Mn NEWA SANDHI MARK
+
+# Total code points: 93
# ================================================
@@ -2631,10 +2650,10 @@
# ================================================
16FE0 ; Tangut # Lm TANGUT ITERATION MARK
-17000..187EC ; Tangut # Lo [6125] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC
+17000..187F1 ; Tangut # Lo [6130] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F1
18800..18AF2 ; Tangut # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
-# Total code points: 6881
+# Total code points: 6886
# ================================================
@@ -2670,16 +2689,15 @@
11A97 ; Soyombo # Mc SOYOMBO SIGN VISARGA
11A98..11A99 ; Soyombo # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
11A9A..11A9C ; Soyombo # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
+11A9D ; Soyombo # Lo SOYOMBO MARK PLUTA
11A9E..11AA2 ; Soyombo # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
-# Total code points: 80
+# Total code points: 81
# ================================================
11A00 ; Zanabazar_Square # Lo ZANABAZAR SQUARE LETTER A
-11A01..11A06 ; Zanabazar_Square # Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O
-11A07..11A08 ; Zanabazar_Square # Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU
-11A09..11A0A ; Zanabazar_Square # Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A01..11A0A ; Zanabazar_Square # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
11A0B..11A32 ; Zanabazar_Square # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
11A33..11A38 ; Zanabazar_Square # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
11A39 ; Zanabazar_Square # Mc ZANABAZAR SQUARE SIGN VISARGA
@@ -2690,4 +2708,73 @@
# Total code points: 72
+# ================================================
+
+11800..1182B ; Dogra # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
+1182C..1182E ; Dogra # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+1182F..11837 ; Dogra # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+11838 ; Dogra # Mc DOGRA SIGN VISARGA
+11839..1183A ; Dogra # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+1183B ; Dogra # Po DOGRA ABBREVIATION SIGN
+
+# Total code points: 60
+
+# ================================================
+
+11D60..11D65 ; Gunjala_Gondi # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+11D67..11D68 ; Gunjala_Gondi # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+11D6A..11D89 ; Gunjala_Gondi # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
+11D8A..11D8E ; Gunjala_Gondi # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+11D90..11D91 ; Gunjala_Gondi # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D93..11D94 ; Gunjala_Gondi # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+11D95 ; Gunjala_Gondi # Mn GUNJALA GONDI SIGN ANUSVARA
+11D96 ; Gunjala_Gondi # Mc GUNJALA GONDI SIGN VISARGA
+11D97 ; Gunjala_Gondi # Mn GUNJALA GONDI VIRAMA
+11D98 ; Gunjala_Gondi # Lo GUNJALA GONDI OM
+11DA0..11DA9 ; Gunjala_Gondi # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
+
+# Total code points: 63
+
+# ================================================
+
+11EE0..11EF2 ; Makasar # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11EF3..11EF4 ; Makasar # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+11EF5..11EF6 ; Makasar # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+11EF7..11EF8 ; Makasar # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+
+# Total code points: 25
+
+# ================================================
+
+16E40..16E7F ; Medefaidrin # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+16E80..16E96 ; Medefaidrin # No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM
+16E97..16E9A ; Medefaidrin # Po [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH
+
+# Total code points: 91
+
+# ================================================
+
+10D00..10D23 ; Hanifi_Rohingya # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10D24..10D27 ; Hanifi_Rohingya # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10D30..10D39 ; Hanifi_Rohingya # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
+
+# Total code points: 50
+
+# ================================================
+
+10F30..10F45 ; Sogdian # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10F46..10F50 ; Sogdian # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+10F51..10F54 ; Sogdian # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
+10F55..10F59 ; Sogdian # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+
+# Total code points: 42
+
+# ================================================
+
+10F00..10F1C ; Old_Sogdian # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+10F1D..10F26 ; Old_Sogdian # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
+10F27 ; Old_Sogdian # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
+
+# Total code points: 40
+
# EOF
--- a/make/data/unicodedata/SpecialCasing.txt Wed Nov 21 13:20:52 2018 -0500
+++ b/make/data/unicodedata/SpecialCasing.txt Wed Nov 21 13:53:17 2018 -0500
@@ -1,6 +1,6 @@
-# SpecialCasing-10.0.0.txt
-# Date: 2017-04-14, 05:40:43 GMT
-# Copyright (c) 2017 Unicode, Inc.
+# SpecialCasing-11.0.0.txt
+# Date: 2018-02-22, 06:16:47 GMT
+# Copyright (c) 2018 Unicode, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -121,7 +121,7 @@
# The following cases are already in the UnicodeData.txt file, so are only commented here.
-# 0345; 0345; 0345; 0399; # COMBINING GREEK YPOGEGRAMMENI
+# 0345; 0345; 0399; 0399; # COMBINING GREEK YPOGEGRAMMENI
# All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript)
# have special uppercases.
--- a/make/data/unicodedata/UnicodeData.txt Wed Nov 21 13:20:52 2018 -0500
+++ b/make/data/unicodedata/UnicodeData.txt Wed Nov 21 13:53:17 2018 -0500
@@ -1362,6 +1362,7 @@
055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0560;ARMENIAN SMALL LETTER TURNED AYB;Ll;0;L;;;;;N;;;;;
0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
@@ -1401,6 +1402,7 @@
0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0588;ARMENIAN SMALL LETTER YI WITH STROKE;Ll;0;L;;;;;N;;;;;
0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
058D;RIGHT-FACING ARMENIAN ETERNITY SIGN;So;0;ON;;;;;N;;;;;
@@ -1488,6 +1490,7 @@
05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05EF;HEBREW YOD TRIANGLE;Lo;0;R;;;;;N;;;;;
05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
@@ -1982,6 +1985,9 @@
07F8;NKO COMMA;Po;0;ON;;;;;N;;;;;
07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;;
+07FD;NKO DANTAYALAN;Mn;220;NSM;;;;;N;;;;;
+07FE;NKO DOROME SIGN;Sc;0;R;;;;;N;;;;;
+07FF;NKO TAMAN SIGN;Sc;0;R;;;;;N;;;;;
0800;SAMARITAN LETTER ALAF;Lo;0;R;;;;;N;;;;;
0801;SAMARITAN LETTER BIT;Lo;0;R;;;;;N;;;;;
0802;SAMARITAN LETTER GAMAN;Lo;0;R;;;;;N;;;;;
@@ -2112,6 +2118,7 @@
08BB;ARABIC LETTER AFRICAN FEH;Lo;0;AL;;;;;N;;;;;
08BC;ARABIC LETTER AFRICAN QAF;Lo;0;AL;;;;;N;;;;;
08BD;ARABIC LETTER AFRICAN NOON;Lo;0;AL;;;;;N;;;;;
+08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;;
08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;;
08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;;
08D6;ARABIC SMALL HIGH AIN;Mn;230;NSM;;;;;N;;;;;
@@ -2379,6 +2386,7 @@
09FB;BENGALI GANDA MARK;Sc;0;ET;;;;;N;;;;;
09FC;BENGALI LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;
09FD;BENGALI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+09FE;BENGALI SANDHI MARK;Mn;230;NSM;;;;;N;;;;;
0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;;
0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
@@ -2458,6 +2466,7 @@
0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;;
+0A76;GURMUKHI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
@@ -2715,6 +2724,7 @@
0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C04;TELUGU SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;;
0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
@@ -2811,6 +2821,7 @@
0C81;KANNADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C84;KANNADA SIGN SIDDHAM;Po;0;L;;;;;N;;;;;
0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
@@ -3667,54 +3678,54 @@
10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;2D25;
10C7;GEORGIAN CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;2D27;
10CD;GEORGIAN CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;2D2D;
-10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
-10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
-10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
-10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
-10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
-10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
-10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
-10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
-10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
-10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
-10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
-10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
-10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
-10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
-10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
-10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
-10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
-10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
-10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
-10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
-10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
-10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
-10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
-10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
-10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
-10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
-10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
-10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
-10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
-10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
-10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
-10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
-10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
-10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
-10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
-10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
-10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
-10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
-10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
-10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;;
-10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;;
-10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;;
-10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;;
+10D0;GEORGIAN LETTER AN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;1C90;;10D0
+10D1;GEORGIAN LETTER BAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;1C91;;10D1
+10D2;GEORGIAN LETTER GAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;1C92;;10D2
+10D3;GEORGIAN LETTER DON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;1C93;;10D3
+10D4;GEORGIAN LETTER EN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;1C94;;10D4
+10D5;GEORGIAN LETTER VIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;1C95;;10D5
+10D6;GEORGIAN LETTER ZEN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;1C96;;10D6
+10D7;GEORGIAN LETTER TAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;1C97;;10D7
+10D8;GEORGIAN LETTER IN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;1C98;;10D8
+10D9;GEORGIAN LETTER KAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;1C99;;10D9
+10DA;GEORGIAN LETTER LAS;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;1C9A;;10DA
+10DB;GEORGIAN LETTER MAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;1C9B;;10DB
+10DC;GEORGIAN LETTER NAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;1C9C;;10DC
+10DD;GEORGIAN LETTER ON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;1C9D;;10DD
+10DE;GEORGIAN LETTER PAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;1C9E;;10DE
+10DF;GEORGIAN LETTER ZHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;1C9F;;10DF
+10E0;GEORGIAN LETTER RAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;1CA0;;10E0
+10E1;GEORGIAN LETTER SAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;1CA1;;10E1
+10E2;GEORGIAN LETTER TAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;1CA2;;10E2
+10E3;GEORGIAN LETTER UN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;1CA3;;10E3
+10E4;GEORGIAN LETTER PHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;1CA4;;10E4
+10E5;GEORGIAN LETTER KHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;1CA5;;10E5
+10E6;GEORGIAN LETTER GHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;1CA6;;10E6
+10E7;GEORGIAN LETTER QAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;1CA7;;10E7
+10E8;GEORGIAN LETTER SHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;1CA8;;10E8
+10E9;GEORGIAN LETTER CHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;1CA9;;10E9
+10EA;GEORGIAN LETTER CAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;1CAA;;10EA
+10EB;GEORGIAN LETTER JIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;1CAB;;10EB
+10EC;GEORGIAN LETTER CIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;1CAC;;10EC
+10ED;GEORGIAN LETTER CHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;1CAD;;10ED
+10EE;GEORGIAN LETTER XAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;1CAE;;10EE
+10EF;GEORGIAN LETTER JHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;1CAF;;10EF
+10F0;GEORGIAN LETTER HAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;1CB0;;10F0
+10F1;GEORGIAN LETTER HE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;1CB1;;10F1
+10F2;GEORGIAN LETTER HIE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;1CB2;;10F2
+10F3;GEORGIAN LETTER WE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;1CB3;;10F3
+10F4;GEORGIAN LETTER HAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;1CB4;;10F4
+10F5;GEORGIAN LETTER HOE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;1CB5;;10F5
+10F6;GEORGIAN LETTER FI;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;1CB6;;10F6
+10F7;GEORGIAN LETTER YN;Ll;0;L;;;;;N;;;1CB7;;10F7
+10F8;GEORGIAN LETTER ELIFI;Ll;0;L;;;;;N;;;1CB8;;10F8
+10F9;GEORGIAN LETTER TURNED GAN;Ll;0;L;;;;;N;;;1CB9;;10F9
+10FA;GEORGIAN LETTER AIN;Ll;0;L;;;;;N;;;1CBA;;10FA
10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;;
-10FD;GEORGIAN LETTER AEN;Lo;0;L;;;;;N;;;;;
-10FE;GEORGIAN LETTER HARD SIGN;Lo;0;L;;;;;N;;;;;
-10FF;GEORGIAN LETTER LABIAL SIGN;Lo;0;L;;;;;N;;;;;
+10FD;GEORGIAN LETTER AEN;Ll;0;L;;;;;N;;;1CBD;;10FD
+10FE;GEORGIAN LETTER HARD SIGN;Ll;0;L;;;;;N;;;1CBE;;10FE
+10FF;GEORGIAN LETTER LABIAL SIGN;Ll;0;L;;;;;N;;;1CBF;;10FF
1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;;
@@ -5513,6 +5524,7 @@
1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
+1878;MONGOLIAN LETTER CHA WITH TWO DOTS;Lo;0;L;;;;;N;;;;;
1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
@@ -6388,6 +6400,52 @@
1C86;CYRILLIC SMALL LETTER TALL HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
1C87;CYRILLIC SMALL LETTER TALL YAT;Ll;0;L;;;;;N;;;0462;;0462
1C88;CYRILLIC SMALL LETTER UNBLENDED UK;Ll;0;L;;;;;N;;;A64A;;A64A
+1C90;GEORGIAN MTAVRULI CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;10D0;
+1C91;GEORGIAN MTAVRULI CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;10D1;
+1C92;GEORGIAN MTAVRULI CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;10D2;
+1C93;GEORGIAN MTAVRULI CAPITAL LETTER DON;Lu;0;L;;;;;N;;;;10D3;
+1C94;GEORGIAN MTAVRULI CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;10D4;
+1C95;GEORGIAN MTAVRULI CAPITAL LETTER VIN;Lu;0;L;;;;;N;;;;10D5;
+1C96;GEORGIAN MTAVRULI CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;;;10D6;
+1C97;GEORGIAN MTAVRULI CAPITAL LETTER TAN;Lu;0;L;;;;;N;;;;10D7;
+1C98;GEORGIAN MTAVRULI CAPITAL LETTER IN;Lu;0;L;;;;;N;;;;10D8;
+1C99;GEORGIAN MTAVRULI CAPITAL LETTER KAN;Lu;0;L;;;;;N;;;;10D9;
+1C9A;GEORGIAN MTAVRULI CAPITAL LETTER LAS;Lu;0;L;;;;;N;;;;10DA;
+1C9B;GEORGIAN MTAVRULI CAPITAL LETTER MAN;Lu;0;L;;;;;N;;;;10DB;
+1C9C;GEORGIAN MTAVRULI CAPITAL LETTER NAR;Lu;0;L;;;;;N;;;;10DC;
+1C9D;GEORGIAN MTAVRULI CAPITAL LETTER ON;Lu;0;L;;;;;N;;;;10DD;
+1C9E;GEORGIAN MTAVRULI CAPITAL LETTER PAR;Lu;0;L;;;;;N;;;;10DE;
+1C9F;GEORGIAN MTAVRULI CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;;;10DF;
+1CA0;GEORGIAN MTAVRULI CAPITAL LETTER RAE;Lu;0;L;;;;;N;;;;10E0;
+1CA1;GEORGIAN MTAVRULI CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;10E1;
+1CA2;GEORGIAN MTAVRULI CAPITAL LETTER TAR;Lu;0;L;;;;;N;;;;10E2;
+1CA3;GEORGIAN MTAVRULI CAPITAL LETTER UN;Lu;0;L;;;;;N;;;;10E3;
+1CA4;GEORGIAN MTAVRULI CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;;;10E4;
+1CA5;GEORGIAN MTAVRULI CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;;;10E5;
+1CA6;GEORGIAN MTAVRULI CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;;;10E6;
+1CA7;GEORGIAN MTAVRULI CAPITAL LETTER QAR;Lu;0;L;;;;;N;;;;10E7;
+1CA8;GEORGIAN MTAVRULI CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;;;10E8;
+1CA9;GEORGIAN MTAVRULI CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;;;10E9;
+1CAA;GEORGIAN MTAVRULI CAPITAL LETTER CAN;Lu;0;L;;;;;N;;;;10EA;
+1CAB;GEORGIAN MTAVRULI CAPITAL LETTER JIL;Lu;0;L;;;;;N;;;;10EB;
+1CAC;GEORGIAN MTAVRULI CAPITAL LETTER CIL;Lu;0;L;;;;;N;;;;10EC;
+1CAD;GEORGIAN MTAVRULI CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;;;10ED;
+1CAE;GEORGIAN MTAVRULI CAPITAL LETTER XAN;Lu;0;L;;;;;N;;;;10EE;
+1CAF;GEORGIAN MTAVRULI CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;;;10EF;
+1CB0;GEORGIAN MTAVRULI CAPITAL LETTER HAE;Lu;0;L;;;;;N;;;;10F0;
+1CB1;GEORGIAN MTAVRULI CAPITAL LETTER HE;Lu;0;L;;;;;N;;;;10F1;
+1CB2;GEORGIAN MTAVRULI CAPITAL LETTER HIE;Lu;0;L;;;;;N;;;;10F2;
+1CB3;GEORGIAN MTAVRULI CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;10F3;
+1CB4;GEORGIAN MTAVRULI CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;10F4;
+1CB5;GEORGIAN MTAVRULI CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;10F5;
+1CB6;GEORGIAN MTAVRULI CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;10F6;
+1CB7;GEORGIAN MTAVRULI CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;10F7;
+1CB8;GEORGIAN MTAVRULI CAPITAL LETTER ELIFI;Lu;0;L;;;;;N;;;;10F8;
+1CB9;GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN;Lu;0;L;;;;;N;;;;10F9;
+1CBA;GEORGIAN MTAVRULI CAPITAL LETTER AIN;Lu;0;L;;;;;N;;;;10FA;
+1CBD;GEORGIAN MTAVRULI CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;10FD;
+1CBE;GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;10FE;
+1CBF;GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN;Lu;0;L;;;;;N;;;;10FF;
1CC0;SUNDANESE PUNCTUATION BINDU SURYA;Po;0;L;;;;;N;;;;;
1CC1;SUNDANESE PUNCTUATION BINDU PANGLONG;Po;0;L;;;;;N;;;;;
1CC2;SUNDANESE PUNCTUATION BINDU PURNAMA;Po;0;L;;;;;N;;;;;
@@ -9559,7 +9617,7 @@
299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;;
299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;;
29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
-29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;
+29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;N;;;;;
29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;;
29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;;
29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
@@ -10092,6 +10150,9 @@
2BB7;RIBBON ARROW RIGHT DOWN;So;0;ON;;;;;N;;;;;
2BB8;UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
2BB9;UP ARROWHEAD IN A RECTANGLE BOX;So;0;ON;;;;;N;;;;;
+2BBA;OVERLAPPING WHITE SQUARES;So;0;ON;;;;;N;;;;;
+2BBB;OVERLAPPING WHITE AND BLACK SQUARES;So;0;ON;;;;;N;;;;;
+2BBC;OVERLAPPING BLACK SQUARES;So;0;ON;;;;;N;;;;;
2BBD;BALLOT BOX WITH LIGHT X;So;0;ON;;;;;N;;;;;
2BBE;CIRCLED X;So;0;ON;;;;;N;;;;;
2BBF;CIRCLED BOLD X;So;0;ON;;;;;N;;;;;
@@ -10113,10 +10174,50 @@
2BD0;SQUARE POSITION INDICATOR;So;0;ON;;;;;N;;;;;
2BD1;UNCERTAINTY SIGN;So;0;ON;;;;;N;;;;;
2BD2;GROUP MARK;So;0;ON;;;;;N;;;;;
+2BD3;PLUTO FORM TWO;So;0;ON;;;;;N;;;;;
+2BD4;PLUTO FORM THREE;So;0;ON;;;;;N;;;;;
+2BD5;PLUTO FORM FOUR;So;0;ON;;;;;N;;;;;
+2BD6;PLUTO FORM FIVE;So;0;ON;;;;;N;;;;;
+2BD7;TRANSPLUTO;So;0;ON;;;;;N;;;;;
+2BD8;PROSERPINA;So;0;ON;;;;;N;;;;;
+2BD9;ASTRAEA;So;0;ON;;;;;N;;;;;
+2BDA;HYGIEA;So;0;ON;;;;;N;;;;;
+2BDB;PHOLUS;So;0;ON;;;;;N;;;;;
+2BDC;NESSUS;So;0;ON;;;;;N;;;;;
+2BDD;WHITE MOON SELENA;So;0;ON;;;;;N;;;;;
+2BDE;BLACK DIAMOND ON CROSS;So;0;ON;;;;;N;;;;;
+2BDF;TRUE LIGHT MOON ARTA;So;0;ON;;;;;N;;;;;
+2BE0;CUPIDO;So;0;ON;;;;;N;;;;;
+2BE1;HADES;So;0;ON;;;;;N;;;;;
+2BE2;ZEUS;So;0;ON;;;;;N;;;;;
+2BE3;KRONOS;So;0;ON;;;;;N;;;;;
+2BE4;APOLLON;So;0;ON;;;;;N;;;;;
+2BE5;ADMETOS;So;0;ON;;;;;N;;;;;
+2BE6;VULCANUS;So;0;ON;;;;;N;;;;;
+2BE7;POSEIDON;So;0;ON;;;;;N;;;;;
+2BE8;LEFT HALF BLACK STAR;So;0;ON;;;;;N;;;;;
+2BE9;RIGHT HALF BLACK STAR;So;0;ON;;;;;N;;;;;
+2BEA;STAR WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+2BEB;STAR WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
2BEC;LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
2BED;UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
2BEE;RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
2BEF;DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
+2BF0;ERIS FORM ONE;So;0;ON;;;;;N;;;;;
+2BF1;ERIS FORM TWO;So;0;ON;;;;;N;;;;;
+2BF2;SEDNA;So;0;ON;;;;;N;;;;;
+2BF3;RUSSIAN ASTROLOGICAL SYMBOL VIGINTILE;So;0;ON;;;;;N;;;;;
+2BF4;RUSSIAN ASTROLOGICAL SYMBOL NOVILE;So;0;ON;;;;;N;;;;;
+2BF5;RUSSIAN ASTROLOGICAL SYMBOL QUINTILE;So;0;ON;;;;;N;;;;;
+2BF6;RUSSIAN ASTROLOGICAL SYMBOL BINOVILE;So;0;ON;;;;;N;;;;;
+2BF7;RUSSIAN ASTROLOGICAL SYMBOL SENTAGON;So;0;ON;;;;;N;;;;;
+2BF8;RUSSIAN ASTROLOGICAL SYMBOL TREDECILE;So;0;ON;;;;;N;;;;;
+2BF9;EQUALS SIGN WITH INFINITY BELOW;So;0;ON;;;;;N;;;;;
+2BFA;UNITED SYMBOL;So;0;ON;;;;;N;;;;;
+2BFB;SEPARATED SYMBOL;So;0;ON;;;;;N;;;;;
+2BFC;DOUBLED SYMBOL;So;0;ON;;;;;N;;;;;
+2BFD;PASSED SYMBOL;So;0;ON;;;;;N;;;;;
+2BFE;REVERSED RIGHT ANGLE;So;0;ON;;;;;Y;;;;;
2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30;
2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31;
2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32;
@@ -10650,6 +10751,11 @@
2E47;LOW KAVYKA;Po;0;ON;;;;;N;;;;;
2E48;LOW KAVYKA WITH DOT;Po;0;ON;;;;;N;;;;;
2E49;DOUBLE STACKED COMMA;Po;0;ON;;;;;N;;;;;
+2E4A;DOTTED SOLIDUS;Po;0;ON;;;;;N;;;;;
+2E4B;TRIPLE DAGGER;Po;0;ON;;;;;N;;;;;
+2E4C;MEDIEVAL COMMA;Po;0;ON;;;;;N;;;;;
+2E4D;PARAGRAPHUS MARK;Po;0;ON;;;;;N;;;;;
+2E4E;PUNCTUS ELEVATUS MARK;Po;0;ON;;;;;N;;;;;
2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
@@ -11286,6 +11392,7 @@
312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;;
312E;BOPOMOFO LETTER O WITH DOT ABOVE;Lo;0;L;;;;;N;;;;;
+312F;BOPOMOFO LETTER NN;Lo;0;L;;;;;N;;;;;
3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
@@ -12053,7 +12160,7 @@
4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
-9FEA;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+9FEF;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
@@ -13981,6 +14088,7 @@
A7AC;LATIN CAPITAL LETTER SCRIPT G;Lu;0;L;;;;;N;;;;0261;
A7AD;LATIN CAPITAL LETTER L WITH BELT;Lu;0;L;;;;;N;;;;026C;
A7AE;LATIN CAPITAL LETTER SMALL CAPITAL I;Lu;0;L;;;;;N;;;;026A;
+A7AF;LATIN LETTER SMALL CAPITAL Q;Ll;0;L;;;;;N;;;;;
A7B0;LATIN CAPITAL LETTER TURNED K;Lu;0;L;;;;;N;;;;029E;
A7B1;LATIN CAPITAL LETTER TURNED T;Lu;0;L;;;;;N;;;;0287;
A7B2;LATIN CAPITAL LETTER J WITH CROSSED-TAIL;Lu;0;L;;;;;N;;;;029D;
@@ -13989,6 +14097,8 @@
A7B5;LATIN SMALL LETTER BETA;Ll;0;L;;;;;N;;;A7B4;;A7B4
A7B6;LATIN CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;A7B7;
A7B7;LATIN SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;A7B6;;A7B6
+A7B8;LATIN CAPITAL LETTER U WITH STROKE;Lu;0;L;;;;;N;;;;A7B9;
+A7B9;LATIN SMALL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;A7B8;;A7B8
A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;;
A7F8;MODIFIER LETTER CAPITAL H WITH STROKE;Lm;0;L;<super> 0126;;;;N;;;;;
A7F9;MODIFIER LETTER SMALL LIGATURE OE;Lm;0;L;<super> 0153;;;;N;;;;;
@@ -14220,6 +14330,8 @@
A8FB;DEVANAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;;
A8FC;DEVANAGARI SIGN SIDDHAM;Po;0;L;;;;;N;;;;;
A8FD;DEVANAGARI JAIN OM;Lo;0;L;;;;;N;;;;;
+A8FE;DEVANAGARI LETTER AY;Lo;0;L;;;;;N;;;;;
+A8FF;DEVANAGARI VOWEL SIGN AY;Mn;0;NSM;;;;;N;;;;;
A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -18364,6 +18476,8 @@
10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;;
10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;;
10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;;
+10A34;KHAROSHTHI LETTER TTTA;Lo;0;R;;;;;N;;;;;
+10A35;KHAROSHTHI LETTER VHA;Lo;0;R;;;;;N;;;;;
10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;;
10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;;
10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
@@ -18376,6 +18490,7 @@
10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;;
10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10A48;KHAROSHTHI FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;;
10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;;
10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;;
10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;;
@@ -18828,6 +18943,56 @@
10CFD;OLD HUNGARIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;;
10CFE;OLD HUNGARIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
10CFF;OLD HUNGARIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10D00;HANIFI ROHINGYA LETTER A;Lo;0;AL;;;;;N;;;;;
+10D01;HANIFI ROHINGYA LETTER BA;Lo;0;AL;;;;;N;;;;;
+10D02;HANIFI ROHINGYA LETTER PA;Lo;0;AL;;;;;N;;;;;
+10D03;HANIFI ROHINGYA LETTER TA;Lo;0;AL;;;;;N;;;;;
+10D04;HANIFI ROHINGYA LETTER TTA;Lo;0;AL;;;;;N;;;;;
+10D05;HANIFI ROHINGYA LETTER JA;Lo;0;AL;;;;;N;;;;;
+10D06;HANIFI ROHINGYA LETTER CA;Lo;0;AL;;;;;N;;;;;
+10D07;HANIFI ROHINGYA LETTER HA;Lo;0;AL;;;;;N;;;;;
+10D08;HANIFI ROHINGYA LETTER KHA;Lo;0;AL;;;;;N;;;;;
+10D09;HANIFI ROHINGYA LETTER FA;Lo;0;AL;;;;;N;;;;;
+10D0A;HANIFI ROHINGYA LETTER DA;Lo;0;AL;;;;;N;;;;;
+10D0B;HANIFI ROHINGYA LETTER DDA;Lo;0;AL;;;;;N;;;;;
+10D0C;HANIFI ROHINGYA LETTER RA;Lo;0;AL;;;;;N;;;;;
+10D0D;HANIFI ROHINGYA LETTER RRA;Lo;0;AL;;;;;N;;;;;
+10D0E;HANIFI ROHINGYA LETTER ZA;Lo;0;AL;;;;;N;;;;;
+10D0F;HANIFI ROHINGYA LETTER SA;Lo;0;AL;;;;;N;;;;;
+10D10;HANIFI ROHINGYA LETTER SHA;Lo;0;AL;;;;;N;;;;;
+10D11;HANIFI ROHINGYA LETTER KA;Lo;0;AL;;;;;N;;;;;
+10D12;HANIFI ROHINGYA LETTER GA;Lo;0;AL;;;;;N;;;;;
+10D13;HANIFI ROHINGYA LETTER LA;Lo;0;AL;;;;;N;;;;;
+10D14;HANIFI ROHINGYA LETTER MA;Lo;0;AL;;;;;N;;;;;
+10D15;HANIFI ROHINGYA LETTER NA;Lo;0;AL;;;;;N;;;;;
+10D16;HANIFI ROHINGYA LETTER WA;Lo;0;AL;;;;;N;;;;;
+10D17;HANIFI ROHINGYA LETTER KINNA WA;Lo;0;AL;;;;;N;;;;;
+10D18;HANIFI ROHINGYA LETTER YA;Lo;0;AL;;;;;N;;;;;
+10D19;HANIFI ROHINGYA LETTER KINNA YA;Lo;0;AL;;;;;N;;;;;
+10D1A;HANIFI ROHINGYA LETTER NGA;Lo;0;AL;;;;;N;;;;;
+10D1B;HANIFI ROHINGYA LETTER NYA;Lo;0;AL;;;;;N;;;;;
+10D1C;HANIFI ROHINGYA LETTER VA;Lo;0;AL;;;;;N;;;;;
+10D1D;HANIFI ROHINGYA VOWEL A;Lo;0;AL;;;;;N;;;;;
+10D1E;HANIFI ROHINGYA VOWEL I;Lo;0;AL;;;;;N;;;;;
+10D1F;HANIFI ROHINGYA VOWEL U;Lo;0;AL;;;;;N;;;;;
+10D20;HANIFI ROHINGYA VOWEL E;Lo;0;AL;;;;;N;;;;;
+10D21;HANIFI ROHINGYA VOWEL O;Lo;0;AL;;;;;N;;;;;
+10D22;HANIFI ROHINGYA MARK SAKIN;Lo;0;AL;;;;;N;;;;;
+10D23;HANIFI ROHINGYA MARK NA KHONNA;Lo;0;AL;;;;;N;;;;;
+10D24;HANIFI ROHINGYA SIGN HARBAHAY;Mn;230;NSM;;;;;N;;;;;
+10D25;HANIFI ROHINGYA SIGN TAHALA;Mn;230;NSM;;;;;N;;;;;
+10D26;HANIFI ROHINGYA SIGN TANA;Mn;230;NSM;;;;;N;;;;;
+10D27;HANIFI ROHINGYA SIGN TASSI;Mn;230;NSM;;;;;N;;;;;
+10D30;HANIFI ROHINGYA DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+10D31;HANIFI ROHINGYA DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+10D32;HANIFI ROHINGYA DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+10D33;HANIFI ROHINGYA DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+10D34;HANIFI ROHINGYA DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+10D35;HANIFI ROHINGYA DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+10D36;HANIFI ROHINGYA DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+10D37;HANIFI ROHINGYA DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+10D38;HANIFI ROHINGYA DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+10D39;HANIFI ROHINGYA DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
10E60;RUMI DIGIT ONE;No;0;AN;;;1;1;N;;;;;
10E61;RUMI DIGIT TWO;No;0;AN;;;2;2;N;;;;;
10E62;RUMI DIGIT THREE;No;0;AN;;;3;3;N;;;;;
@@ -18859,6 +19024,88 @@
10E7C;RUMI FRACTION ONE QUARTER;No;0;AN;;;;1/4;N;;;;;
10E7D;RUMI FRACTION ONE THIRD;No;0;AN;;;;1/3;N;;;;;
10E7E;RUMI FRACTION TWO THIRDS;No;0;AN;;;;2/3;N;;;;;
+10F00;OLD SOGDIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10F01;OLD SOGDIAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;;
+10F02;OLD SOGDIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
+10F03;OLD SOGDIAN LETTER FINAL BETH;Lo;0;R;;;;;N;;;;;
+10F04;OLD SOGDIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10F05;OLD SOGDIAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10F06;OLD SOGDIAN LETTER FINAL HE;Lo;0;R;;;;;N;;;;;
+10F07;OLD SOGDIAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+10F08;OLD SOGDIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10F09;OLD SOGDIAN LETTER HETH;Lo;0;R;;;;;N;;;;;
+10F0A;OLD SOGDIAN LETTER YODH;Lo;0;R;;;;;N;;;;;
+10F0B;OLD SOGDIAN LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10F0C;OLD SOGDIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10F0D;OLD SOGDIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+10F0E;OLD SOGDIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+10F0F;OLD SOGDIAN LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+10F10;OLD SOGDIAN LETTER FINAL NUN WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;;
+10F11;OLD SOGDIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10F12;OLD SOGDIAN LETTER AYIN;Lo;0;R;;;;;N;;;;;
+10F13;OLD SOGDIAN LETTER ALTERNATE AYIN;Lo;0;R;;;;;N;;;;;
+10F14;OLD SOGDIAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10F15;OLD SOGDIAN LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10F16;OLD SOGDIAN LETTER FINAL SADHE;Lo;0;R;;;;;N;;;;;
+10F17;OLD SOGDIAN LETTER FINAL SADHE WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;;
+10F18;OLD SOGDIAN LETTER RESH-AYIN-DALETH;Lo;0;R;;;;;N;;;;;
+10F19;OLD SOGDIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10F1A;OLD SOGDIAN LETTER TAW;Lo;0;R;;;;;N;;;;;
+10F1B;OLD SOGDIAN LETTER FINAL TAW;Lo;0;R;;;;;N;;;;;
+10F1C;OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;;
+10F1D;OLD SOGDIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10F1E;OLD SOGDIAN NUMBER TWO;No;0;R;;;;2;N;;;;;
+10F1F;OLD SOGDIAN NUMBER THREE;No;0;R;;;;3;N;;;;;
+10F20;OLD SOGDIAN NUMBER FOUR;No;0;R;;;;4;N;;;;;
+10F21;OLD SOGDIAN NUMBER FIVE;No;0;R;;;;5;N;;;;;
+10F22;OLD SOGDIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10F23;OLD SOGDIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10F24;OLD SOGDIAN NUMBER THIRTY;No;0;R;;;;30;N;;;;;
+10F25;OLD SOGDIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10F26;OLD SOGDIAN FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;;
+10F27;OLD SOGDIAN LIGATURE AYIN-DALETH;Lo;0;R;;;;;N;;;;;
+10F30;SOGDIAN LETTER ALEPH;Lo;0;AL;;;;;N;;;;;
+10F31;SOGDIAN LETTER BETH;Lo;0;AL;;;;;N;;;;;
+10F32;SOGDIAN LETTER GIMEL;Lo;0;AL;;;;;N;;;;;
+10F33;SOGDIAN LETTER HE;Lo;0;AL;;;;;N;;;;;
+10F34;SOGDIAN LETTER WAW;Lo;0;AL;;;;;N;;;;;
+10F35;SOGDIAN LETTER ZAYIN;Lo;0;AL;;;;;N;;;;;
+10F36;SOGDIAN LETTER HETH;Lo;0;AL;;;;;N;;;;;
+10F37;SOGDIAN LETTER YODH;Lo;0;AL;;;;;N;;;;;
+10F38;SOGDIAN LETTER KAPH;Lo;0;AL;;;;;N;;;;;
+10F39;SOGDIAN LETTER LAMEDH;Lo;0;AL;;;;;N;;;;;
+10F3A;SOGDIAN LETTER MEM;Lo;0;AL;;;;;N;;;;;
+10F3B;SOGDIAN LETTER NUN;Lo;0;AL;;;;;N;;;;;
+10F3C;SOGDIAN LETTER SAMEKH;Lo;0;AL;;;;;N;;;;;
+10F3D;SOGDIAN LETTER AYIN;Lo;0;AL;;;;;N;;;;;
+10F3E;SOGDIAN LETTER PE;Lo;0;AL;;;;;N;;;;;
+10F3F;SOGDIAN LETTER SADHE;Lo;0;AL;;;;;N;;;;;
+10F40;SOGDIAN LETTER RESH-AYIN;Lo;0;AL;;;;;N;;;;;
+10F41;SOGDIAN LETTER SHIN;Lo;0;AL;;;;;N;;;;;
+10F42;SOGDIAN LETTER TAW;Lo;0;AL;;;;;N;;;;;
+10F43;SOGDIAN LETTER FETH;Lo;0;AL;;;;;N;;;;;
+10F44;SOGDIAN LETTER LESH;Lo;0;AL;;;;;N;;;;;
+10F45;SOGDIAN INDEPENDENT SHIN;Lo;0;AL;;;;;N;;;;;
+10F46;SOGDIAN COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+10F47;SOGDIAN COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+10F48;SOGDIAN COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F49;SOGDIAN COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F4A;SOGDIAN COMBINING CURVE ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F4B;SOGDIAN COMBINING CURVE BELOW;Mn;220;NSM;;;;;N;;;;;
+10F4C;SOGDIAN COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F4D;SOGDIAN COMBINING HOOK BELOW;Mn;220;NSM;;;;;N;;;;;
+10F4E;SOGDIAN COMBINING LONG HOOK BELOW;Mn;220;NSM;;;;;N;;;;;
+10F4F;SOGDIAN COMBINING RESH BELOW;Mn;220;NSM;;;;;N;;;;;
+10F50;SOGDIAN COMBINING STROKE BELOW;Mn;220;NSM;;;;;N;;;;;
+10F51;SOGDIAN NUMBER ONE;No;0;AL;;;;1;N;;;;;
+10F52;SOGDIAN NUMBER TEN;No;0;AL;;;;10;N;;;;;
+10F53;SOGDIAN NUMBER TWENTY;No;0;AL;;;;20;N;;;;;
+10F54;SOGDIAN NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;;
+10F55;SOGDIAN PUNCTUATION TWO VERTICAL BARS;Po;0;AL;;;;;N;;;;;
+10F56;SOGDIAN PUNCTUATION TWO VERTICAL BARS WITH DOTS;Po;0;AL;;;;;N;;;;;
+10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
+10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;;
+10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
11000;BRAHMI SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
11001;BRAHMI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
11002;BRAHMI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
@@ -19034,6 +19281,7 @@
110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;
110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;;
110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+110CD;KAITHI NUMBER SIGN ABOVE;Cf;0;L;;;;;N;;;;;
110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;;
110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;;
110D2;SORA SOMPENG LETTER BAH;Lo;0;L;;;;;N;;;;;
@@ -19136,6 +19384,9 @@
11141;CHAKMA DANDA;Po;0;L;;;;;N;;;;;
11142;CHAKMA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
11143;CHAKMA QUESTION MARK;Po;0;L;;;;;N;;;;;
+11144;CHAKMA LETTER LHAA;Lo;0;L;;;;;N;;;;;
+11145;CHAKMA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11146;CHAKMA VOWEL SIGN EI;Mc;0;L;;;;;N;;;;;
11150;MAHAJANI LETTER A;Lo;0;L;;;;;N;;;;;
11151;MAHAJANI LETTER I;Lo;0;L;;;;;N;;;;;
11152;MAHAJANI LETTER U;Lo;0;L;;;;;N;;;;;
@@ -19248,7 +19499,7 @@
111C6;SHARADA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
111C7;SHARADA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
111C8;SHARADA SEPARATOR;Po;0;L;;;;;N;;;;;
-111C9;SHARADA SANDHI MARK;Po;0;L;;;;;N;;;;;
+111C9;SHARADA SANDHI MARK;Mn;0;NSM;;;;;N;;;;;
111CA;SHARADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
111CB;SHARADA VOWEL MODIFIER MARK;Mn;0;NSM;;;;;N;;;;;
111CC;SHARADA EXTRA SHORT VOWEL MARK;Mn;0;NSM;;;;;N;;;;;
@@ -19508,6 +19759,7 @@
11337;GRANTHA LETTER SSA;Lo;0;L;;;;;N;;;;;
11338;GRANTHA LETTER SA;Lo;0;L;;;;;N;;;;;
11339;GRANTHA LETTER HA;Lo;0;L;;;;;N;;;;;
+1133B;COMBINING BINDU BELOW;Mn;7;NSM;;;;;N;;;;;
1133C;GRANTHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
1133D;GRANTHA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
1133E;GRANTHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
@@ -19635,6 +19887,7 @@
11459;NEWA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
1145B;NEWA PLACEHOLDER MARK;Po;0;L;;;;;N;;;;;
1145D;NEWA INSERTION SIGN;Po;0;L;;;;;N;;;;;
+1145E;NEWA SANDHI MARK;Mn;230;NSM;;;;;N;;;;;
11480;TIRHUTA ANJI;Lo;0;L;;;;;N;;;;;
11481;TIRHUTA LETTER A;Lo;0;L;;;;;N;;;;;
11482;TIRHUTA LETTER AA;Lo;0;L;;;;;N;;;;;
@@ -19993,6 +20246,7 @@
11717;AHOM LETTER GHA;Lo;0;L;;;;;N;;;;;
11718;AHOM LETTER BHA;Lo;0;L;;;;;N;;;;;
11719;AHOM LETTER JHA;Lo;0;L;;;;;N;;;;;
+1171A;AHOM LETTER ALTERNATE BA;Lo;0;L;;;;;N;;;;;
1171D;AHOM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;;
1171E;AHOM CONSONANT SIGN MEDIAL RA;Mn;0;NSM;;;;;N;;;;;
1171F;AHOM CONSONANT SIGN MEDIAL LIGATING RA;Mn;0;NSM;;;;;N;;;;;
@@ -20024,6 +20278,66 @@
1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;;
1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;;
1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;;
+11800;DOGRA LETTER A;Lo;0;L;;;;;N;;;;;
+11801;DOGRA LETTER AA;Lo;0;L;;;;;N;;;;;
+11802;DOGRA LETTER I;Lo;0;L;;;;;N;;;;;
+11803;DOGRA LETTER II;Lo;0;L;;;;;N;;;;;
+11804;DOGRA LETTER U;Lo;0;L;;;;;N;;;;;
+11805;DOGRA LETTER UU;Lo;0;L;;;;;N;;;;;
+11806;DOGRA LETTER E;Lo;0;L;;;;;N;;;;;
+11807;DOGRA LETTER AI;Lo;0;L;;;;;N;;;;;
+11808;DOGRA LETTER O;Lo;0;L;;;;;N;;;;;
+11809;DOGRA LETTER AU;Lo;0;L;;;;;N;;;;;
+1180A;DOGRA LETTER KA;Lo;0;L;;;;;N;;;;;
+1180B;DOGRA LETTER KHA;Lo;0;L;;;;;N;;;;;
+1180C;DOGRA LETTER GA;Lo;0;L;;;;;N;;;;;
+1180D;DOGRA LETTER GHA;Lo;0;L;;;;;N;;;;;
+1180E;DOGRA LETTER NGA;Lo;0;L;;;;;N;;;;;
+1180F;DOGRA LETTER CA;Lo;0;L;;;;;N;;;;;
+11810;DOGRA LETTER CHA;Lo;0;L;;;;;N;;;;;
+11811;DOGRA LETTER JA;Lo;0;L;;;;;N;;;;;
+11812;DOGRA LETTER JHA;Lo;0;L;;;;;N;;;;;
+11813;DOGRA LETTER NYA;Lo;0;L;;;;;N;;;;;
+11814;DOGRA LETTER TTA;Lo;0;L;;;;;N;;;;;
+11815;DOGRA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11816;DOGRA LETTER DDA;Lo;0;L;;;;;N;;;;;
+11817;DOGRA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11818;DOGRA LETTER NNA;Lo;0;L;;;;;N;;;;;
+11819;DOGRA LETTER TA;Lo;0;L;;;;;N;;;;;
+1181A;DOGRA LETTER THA;Lo;0;L;;;;;N;;;;;
+1181B;DOGRA LETTER DA;Lo;0;L;;;;;N;;;;;
+1181C;DOGRA LETTER DHA;Lo;0;L;;;;;N;;;;;
+1181D;DOGRA LETTER NA;Lo;0;L;;;;;N;;;;;
+1181E;DOGRA LETTER PA;Lo;0;L;;;;;N;;;;;
+1181F;DOGRA LETTER PHA;Lo;0;L;;;;;N;;;;;
+11820;DOGRA LETTER BA;Lo;0;L;;;;;N;;;;;
+11821;DOGRA LETTER BHA;Lo;0;L;;;;;N;;;;;
+11822;DOGRA LETTER MA;Lo;0;L;;;;;N;;;;;
+11823;DOGRA LETTER YA;Lo;0;L;;;;;N;;;;;
+11824;DOGRA LETTER RA;Lo;0;L;;;;;N;;;;;
+11825;DOGRA LETTER LA;Lo;0;L;;;;;N;;;;;
+11826;DOGRA LETTER VA;Lo;0;L;;;;;N;;;;;
+11827;DOGRA LETTER SHA;Lo;0;L;;;;;N;;;;;
+11828;DOGRA LETTER SSA;Lo;0;L;;;;;N;;;;;
+11829;DOGRA LETTER SA;Lo;0;L;;;;;N;;;;;
+1182A;DOGRA LETTER HA;Lo;0;L;;;;;N;;;;;
+1182B;DOGRA LETTER RRA;Lo;0;L;;;;;N;;;;;
+1182C;DOGRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+1182D;DOGRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+1182E;DOGRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+1182F;DOGRA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11830;DOGRA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+11831;DOGRA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+11832;DOGRA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+11833;DOGRA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11834;DOGRA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11835;DOGRA VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11836;DOGRA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+11837;DOGRA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11838;DOGRA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11839;DOGRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1183A;DOGRA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+1183B;DOGRA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
118A0;WARANG CITI CAPITAL LETTER NGAA;Lu;0;L;;;;;N;;;;118C0;
118A1;WARANG CITI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;118C1;
118A2;WARANG CITI CAPITAL LETTER WI;Lu;0;L;;;;;N;;;;118C2;
@@ -20115,8 +20429,8 @@
11A04;ZANABAZAR SQUARE VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
11A05;ZANABAZAR SQUARE VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;
11A06;ZANABAZAR SQUARE VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
-11A07;ZANABAZAR SQUARE VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-11A08;ZANABAZAR SQUARE VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+11A07;ZANABAZAR SQUARE VOWEL SIGN AI;Mn;0;L;;;;;N;;;;;
+11A08;ZANABAZAR SQUARE VOWEL SIGN AU;Mn;0;L;;;;;N;;;;;
11A09;ZANABAZAR SQUARE VOWEL SIGN REVERSED I;Mn;0;NSM;;;;;N;;;;;
11A0A;ZANABAZAR SQUARE VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
11A0B;ZANABAZAR SQUARE LETTER KA;Lo;0;L;;;;;N;;;;;
@@ -20255,6 +20569,7 @@
11A9A;SOYOMBO MARK TSHEG;Po;0;L;;;;;N;;;;;
11A9B;SOYOMBO MARK SHAD;Po;0;L;;;;;N;;;;;
11A9C;SOYOMBO MARK DOUBLE SHAD;Po;0;L;;;;;N;;;;;
+11A9D;SOYOMBO MARK PLUTA;Lo;0;L;;;;;N;;;;;
11A9E;SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME;Po;0;L;;;;;N;;;;;
11A9F;SOYOMBO HEAD MARK WITH MOON AND SUN AND FLAME;Po;0;L;;;;;N;;;;;
11AA0;SOYOMBO HEAD MARK WITH MOON AND SUN;Po;0;L;;;;;N;;;;;
@@ -20557,6 +20872,94 @@
11D57;MASARAM GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
11D58;MASARAM GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
11D59;MASARAM GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11D60;GUNJALA GONDI LETTER A;Lo;0;L;;;;;N;;;;;
+11D61;GUNJALA GONDI LETTER AA;Lo;0;L;;;;;N;;;;;
+11D62;GUNJALA GONDI LETTER I;Lo;0;L;;;;;N;;;;;
+11D63;GUNJALA GONDI LETTER II;Lo;0;L;;;;;N;;;;;
+11D64;GUNJALA GONDI LETTER U;Lo;0;L;;;;;N;;;;;
+11D65;GUNJALA GONDI LETTER UU;Lo;0;L;;;;;N;;;;;
+11D67;GUNJALA GONDI LETTER EE;Lo;0;L;;;;;N;;;;;
+11D68;GUNJALA GONDI LETTER AI;Lo;0;L;;;;;N;;;;;
+11D6A;GUNJALA GONDI LETTER OO;Lo;0;L;;;;;N;;;;;
+11D6B;GUNJALA GONDI LETTER AU;Lo;0;L;;;;;N;;;;;
+11D6C;GUNJALA GONDI LETTER YA;Lo;0;L;;;;;N;;;;;
+11D6D;GUNJALA GONDI LETTER VA;Lo;0;L;;;;;N;;;;;
+11D6E;GUNJALA GONDI LETTER BA;Lo;0;L;;;;;N;;;;;
+11D6F;GUNJALA GONDI LETTER BHA;Lo;0;L;;;;;N;;;;;
+11D70;GUNJALA GONDI LETTER MA;Lo;0;L;;;;;N;;;;;
+11D71;GUNJALA GONDI LETTER KA;Lo;0;L;;;;;N;;;;;
+11D72;GUNJALA GONDI LETTER KHA;Lo;0;L;;;;;N;;;;;
+11D73;GUNJALA GONDI LETTER TA;Lo;0;L;;;;;N;;;;;
+11D74;GUNJALA GONDI LETTER THA;Lo;0;L;;;;;N;;;;;
+11D75;GUNJALA GONDI LETTER LA;Lo;0;L;;;;;N;;;;;
+11D76;GUNJALA GONDI LETTER GA;Lo;0;L;;;;;N;;;;;
+11D77;GUNJALA GONDI LETTER GHA;Lo;0;L;;;;;N;;;;;
+11D78;GUNJALA GONDI LETTER DA;Lo;0;L;;;;;N;;;;;
+11D79;GUNJALA GONDI LETTER DHA;Lo;0;L;;;;;N;;;;;
+11D7A;GUNJALA GONDI LETTER NA;Lo;0;L;;;;;N;;;;;
+11D7B;GUNJALA GONDI LETTER CA;Lo;0;L;;;;;N;;;;;
+11D7C;GUNJALA GONDI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11D7D;GUNJALA GONDI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11D7E;GUNJALA GONDI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11D7F;GUNJALA GONDI LETTER LLA;Lo;0;L;;;;;N;;;;;
+11D80;GUNJALA GONDI LETTER JA;Lo;0;L;;;;;N;;;;;
+11D81;GUNJALA GONDI LETTER JHA;Lo;0;L;;;;;N;;;;;
+11D82;GUNJALA GONDI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11D83;GUNJALA GONDI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11D84;GUNJALA GONDI LETTER NGA;Lo;0;L;;;;;N;;;;;
+11D85;GUNJALA GONDI LETTER PA;Lo;0;L;;;;;N;;;;;
+11D86;GUNJALA GONDI LETTER PHA;Lo;0;L;;;;;N;;;;;
+11D87;GUNJALA GONDI LETTER HA;Lo;0;L;;;;;N;;;;;
+11D88;GUNJALA GONDI LETTER RA;Lo;0;L;;;;;N;;;;;
+11D89;GUNJALA GONDI LETTER SA;Lo;0;L;;;;;N;;;;;
+11D8A;GUNJALA GONDI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11D8B;GUNJALA GONDI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+11D8C;GUNJALA GONDI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+11D8D;GUNJALA GONDI VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+11D8E;GUNJALA GONDI VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+11D90;GUNJALA GONDI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+11D91;GUNJALA GONDI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11D93;GUNJALA GONDI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+11D94;GUNJALA GONDI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+11D95;GUNJALA GONDI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11D96;GUNJALA GONDI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11D97;GUNJALA GONDI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11D98;GUNJALA GONDI OM;Lo;0;L;;;;;N;;;;;
+11DA0;GUNJALA GONDI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11DA1;GUNJALA GONDI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11DA2;GUNJALA GONDI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11DA3;GUNJALA GONDI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11DA4;GUNJALA GONDI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11DA5;GUNJALA GONDI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11DA6;GUNJALA GONDI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11DA7;GUNJALA GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11DA8;GUNJALA GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11DA9;GUNJALA GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11EE0;MAKASAR LETTER KA;Lo;0;L;;;;;N;;;;;
+11EE1;MAKASAR LETTER GA;Lo;0;L;;;;;N;;;;;
+11EE2;MAKASAR LETTER NGA;Lo;0;L;;;;;N;;;;;
+11EE3;MAKASAR LETTER PA;Lo;0;L;;;;;N;;;;;
+11EE4;MAKASAR LETTER BA;Lo;0;L;;;;;N;;;;;
+11EE5;MAKASAR LETTER MA;Lo;0;L;;;;;N;;;;;
+11EE6;MAKASAR LETTER TA;Lo;0;L;;;;;N;;;;;
+11EE7;MAKASAR LETTER DA;Lo;0;L;;;;;N;;;;;
+11EE8;MAKASAR LETTER NA;Lo;0;L;;;;;N;;;;;
+11EE9;MAKASAR LETTER CA;Lo;0;L;;;;;N;;;;;
+11EEA;MAKASAR LETTER JA;Lo;0;L;;;;;N;;;;;
+11EEB;MAKASAR LETTER NYA;Lo;0;L;;;;;N;;;;;
+11EEC;MAKASAR LETTER YA;Lo;0;L;;;;;N;;;;;
+11EED;MAKASAR LETTER RA;Lo;0;L;;;;;N;;;;;
+11EEE;MAKASAR LETTER LA;Lo;0;L;;;;;N;;;;;
+11EEF;MAKASAR LETTER VA;Lo;0;L;;;;;N;;;;;
+11EF0;MAKASAR LETTER SA;Lo;0;L;;;;;N;;;;;
+11EF1;MAKASAR LETTER A;Lo;0;L;;;;;N;;;;;
+11EF2;MAKASAR ANGKA;Lo;0;L;;;;;N;;;;;
+11EF3;MAKASAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11EF4;MAKASAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11EF5;MAKASAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+11EF6;MAKASAR VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+11EF7;MAKASAR PASSIMBANG;Po;0;L;;;;;N;;;;;
+11EF8;MAKASAR END OF SECTION;Po;0;L;;;;;N;;;;;
12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;;
12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;;
12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;;
@@ -24220,6 +24623,97 @@
16B8D;PAHAWH HMONG CLAN SIGN TSWB;Lo;0;L;;;;;N;;;;;
16B8E;PAHAWH HMONG CLAN SIGN KWM;Lo;0;L;;;;;N;;;;;
16B8F;PAHAWH HMONG CLAN SIGN VWJ;Lo;0;L;;;;;N;;;;;
+16E40;MEDEFAIDRIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;16E60;
+16E41;MEDEFAIDRIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;16E61;
+16E42;MEDEFAIDRIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;16E62;
+16E43;MEDEFAIDRIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;16E63;
+16E44;MEDEFAIDRIN CAPITAL LETTER ATIU;Lu;0;L;;;;;N;;;;16E64;
+16E45;MEDEFAIDRIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;16E65;
+16E46;MEDEFAIDRIN CAPITAL LETTER KP;Lu;0;L;;;;;N;;;;16E66;
+16E47;MEDEFAIDRIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;16E67;
+16E48;MEDEFAIDRIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;16E68;
+16E49;MEDEFAIDRIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;16E69;
+16E4A;MEDEFAIDRIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;16E6A;
+16E4B;MEDEFAIDRIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;16E6B;
+16E4C;MEDEFAIDRIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;16E6C;
+16E4D;MEDEFAIDRIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;16E6D;
+16E4E;MEDEFAIDRIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;16E6E;
+16E4F;MEDEFAIDRIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;16E6F;
+16E50;MEDEFAIDRIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;16E70;
+16E51;MEDEFAIDRIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;16E71;
+16E52;MEDEFAIDRIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;16E72;
+16E53;MEDEFAIDRIN CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;16E73;
+16E54;MEDEFAIDRIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;16E74;
+16E55;MEDEFAIDRIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;16E75;
+16E56;MEDEFAIDRIN CAPITAL LETTER HP;Lu;0;L;;;;;N;;;;16E76;
+16E57;MEDEFAIDRIN CAPITAL LETTER NY;Lu;0;L;;;;;N;;;;16E77;
+16E58;MEDEFAIDRIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;16E78;
+16E59;MEDEFAIDRIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;16E79;
+16E5A;MEDEFAIDRIN CAPITAL LETTER OE;Lu;0;L;;;;;N;;;;16E7A;
+16E5B;MEDEFAIDRIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;16E7B;
+16E5C;MEDEFAIDRIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;16E7C;
+16E5D;MEDEFAIDRIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;16E7D;
+16E5E;MEDEFAIDRIN CAPITAL LETTER AI;Lu;0;L;;;;;N;;;;16E7E;
+16E5F;MEDEFAIDRIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;16E7F;
+16E60;MEDEFAIDRIN SMALL LETTER M;Ll;0;L;;;;;N;;;16E40;;16E40
+16E61;MEDEFAIDRIN SMALL LETTER S;Ll;0;L;;;;;N;;;16E41;;16E41
+16E62;MEDEFAIDRIN SMALL LETTER V;Ll;0;L;;;;;N;;;16E42;;16E42
+16E63;MEDEFAIDRIN SMALL LETTER W;Ll;0;L;;;;;N;;;16E43;;16E43
+16E64;MEDEFAIDRIN SMALL LETTER ATIU;Ll;0;L;;;;;N;;;16E44;;16E44
+16E65;MEDEFAIDRIN SMALL LETTER Z;Ll;0;L;;;;;N;;;16E45;;16E45
+16E66;MEDEFAIDRIN SMALL LETTER KP;Ll;0;L;;;;;N;;;16E46;;16E46
+16E67;MEDEFAIDRIN SMALL LETTER P;Ll;0;L;;;;;N;;;16E47;;16E47
+16E68;MEDEFAIDRIN SMALL LETTER T;Ll;0;L;;;;;N;;;16E48;;16E48
+16E69;MEDEFAIDRIN SMALL LETTER G;Ll;0;L;;;;;N;;;16E49;;16E49
+16E6A;MEDEFAIDRIN SMALL LETTER F;Ll;0;L;;;;;N;;;16E4A;;16E4A
+16E6B;MEDEFAIDRIN SMALL LETTER I;Ll;0;L;;;;;N;;;16E4B;;16E4B
+16E6C;MEDEFAIDRIN SMALL LETTER K;Ll;0;L;;;;;N;;;16E4C;;16E4C
+16E6D;MEDEFAIDRIN SMALL LETTER A;Ll;0;L;;;;;N;;;16E4D;;16E4D
+16E6E;MEDEFAIDRIN SMALL LETTER J;Ll;0;L;;;;;N;;;16E4E;;16E4E
+16E6F;MEDEFAIDRIN SMALL LETTER E;Ll;0;L;;;;;N;;;16E4F;;16E4F
+16E70;MEDEFAIDRIN SMALL LETTER B;Ll;0;L;;;;;N;;;16E50;;16E50
+16E71;MEDEFAIDRIN SMALL LETTER C;Ll;0;L;;;;;N;;;16E51;;16E51
+16E72;MEDEFAIDRIN SMALL LETTER U;Ll;0;L;;;;;N;;;16E52;;16E52
+16E73;MEDEFAIDRIN SMALL LETTER YU;Ll;0;L;;;;;N;;;16E53;;16E53
+16E74;MEDEFAIDRIN SMALL LETTER L;Ll;0;L;;;;;N;;;16E54;;16E54
+16E75;MEDEFAIDRIN SMALL LETTER Q;Ll;0;L;;;;;N;;;16E55;;16E55
+16E76;MEDEFAIDRIN SMALL LETTER HP;Ll;0;L;;;;;N;;;16E56;;16E56
+16E77;MEDEFAIDRIN SMALL LETTER NY;Ll;0;L;;;;;N;;;16E57;;16E57
+16E78;MEDEFAIDRIN SMALL LETTER X;Ll;0;L;;;;;N;;;16E58;;16E58
+16E79;MEDEFAIDRIN SMALL LETTER D;Ll;0;L;;;;;N;;;16E59;;16E59
+16E7A;MEDEFAIDRIN SMALL LETTER OE;Ll;0;L;;;;;N;;;16E5A;;16E5A
+16E7B;MEDEFAIDRIN SMALL LETTER N;Ll;0;L;;;;;N;;;16E5B;;16E5B
+16E7C;MEDEFAIDRIN SMALL LETTER R;Ll;0;L;;;;;N;;;16E5C;;16E5C
+16E7D;MEDEFAIDRIN SMALL LETTER O;Ll;0;L;;;;;N;;;16E5D;;16E5D
+16E7E;MEDEFAIDRIN SMALL LETTER AI;Ll;0;L;;;;;N;;;16E5E;;16E5E
+16E7F;MEDEFAIDRIN SMALL LETTER Y;Ll;0;L;;;;;N;;;16E5F;;16E5F
+16E80;MEDEFAIDRIN DIGIT ZERO;No;0;L;;;;0;N;;;;;
+16E81;MEDEFAIDRIN DIGIT ONE;No;0;L;;;;1;N;;;;;
+16E82;MEDEFAIDRIN DIGIT TWO;No;0;L;;;;2;N;;;;;
+16E83;MEDEFAIDRIN DIGIT THREE;No;0;L;;;;3;N;;;;;
+16E84;MEDEFAIDRIN DIGIT FOUR;No;0;L;;;;4;N;;;;;
+16E85;MEDEFAIDRIN DIGIT FIVE;No;0;L;;;;5;N;;;;;
+16E86;MEDEFAIDRIN DIGIT SIX;No;0;L;;;;6;N;;;;;
+16E87;MEDEFAIDRIN DIGIT SEVEN;No;0;L;;;;7;N;;;;;
+16E88;MEDEFAIDRIN DIGIT EIGHT;No;0;L;;;;8;N;;;;;
+16E89;MEDEFAIDRIN DIGIT NINE;No;0;L;;;;9;N;;;;;
+16E8A;MEDEFAIDRIN NUMBER TEN;No;0;L;;;;10;N;;;;;
+16E8B;MEDEFAIDRIN NUMBER ELEVEN;No;0;L;;;;11;N;;;;;
+16E8C;MEDEFAIDRIN NUMBER TWELVE;No;0;L;;;;12;N;;;;;
+16E8D;MEDEFAIDRIN NUMBER THIRTEEN;No;0;L;;;;13;N;;;;;
+16E8E;MEDEFAIDRIN NUMBER FOURTEEN;No;0;L;;;;14;N;;;;;
+16E8F;MEDEFAIDRIN NUMBER FIFTEEN;No;0;L;;;;15;N;;;;;
+16E90;MEDEFAIDRIN NUMBER SIXTEEN;No;0;L;;;;16;N;;;;;
+16E91;MEDEFAIDRIN NUMBER SEVENTEEN;No;0;L;;;;17;N;;;;;
+16E92;MEDEFAIDRIN NUMBER EIGHTEEN;No;0;L;;;;18;N;;;;;
+16E93;MEDEFAIDRIN NUMBER NINETEEN;No;0;L;;;;19;N;;;;;
+16E94;MEDEFAIDRIN DIGIT ONE ALTERNATE FORM;No;0;L;;;;1;N;;;;;
+16E95;MEDEFAIDRIN DIGIT TWO ALTERNATE FORM;No;0;L;;;;2;N;;;;;
+16E96;MEDEFAIDRIN DIGIT THREE ALTERNATE FORM;No;0;L;;;;3;N;;;;;
+16E97;MEDEFAIDRIN COMMA;Po;0;L;;;;;N;;;;;
+16E98;MEDEFAIDRIN FULL STOP;Po;0;L;;;;;N;;;;;
+16E99;MEDEFAIDRIN SYMBOL AIVA;Po;0;L;;;;;N;;;;;
+16E9A;MEDEFAIDRIN EXCLAMATION OH;Po;0;L;;;;;N;;;;;
16F00;MIAO LETTER PA;Lo;0;L;;;;;N;;;;;
16F01;MIAO LETTER BA;Lo;0;L;;;;;N;;;;;
16F02;MIAO LETTER YI PA;Lo;0;L;;;;;N;;;;;
@@ -24356,7 +24850,7 @@
16FE0;TANGUT ITERATION MARK;Lm;0;L;;;;;N;;;;;
16FE1;NUSHU ITERATION MARK;Lm;0;L;;;;;N;;;;;
17000;<Tangut Ideograph, First>;Lo;0;L;;;;;N;;;;;
-187EC;<Tangut Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+187F1;<Tangut Ideograph, Last>;Lo;0;L;;;;;N;;;;;
18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;;
18801;TANGUT COMPONENT-002;Lo;0;L;;;;;N;;;;;
18802;TANGUT COMPONENT-003;Lo;0;L;;;;;N;;;;;
@@ -26489,6 +26983,26 @@
1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;;
1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;;
1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;;
+1D2E0;MAYAN NUMERAL ZERO;No;0;L;;;;0;N;;;;;
+1D2E1;MAYAN NUMERAL ONE;No;0;L;;;;1;N;;;;;
+1D2E2;MAYAN NUMERAL TWO;No;0;L;;;;2;N;;;;;
+1D2E3;MAYAN NUMERAL THREE;No;0;L;;;;3;N;;;;;
+1D2E4;MAYAN NUMERAL FOUR;No;0;L;;;;4;N;;;;;
+1D2E5;MAYAN NUMERAL FIVE;No;0;L;;;;5;N;;;;;
+1D2E6;MAYAN NUMERAL SIX;No;0;L;;;;6;N;;;;;
+1D2E7;MAYAN NUMERAL SEVEN;No;0;L;;;;7;N;;;;;
+1D2E8;MAYAN NUMERAL EIGHT;No;0;L;;;;8;N;;;;;
+1D2E9;MAYAN NUMERAL NINE;No;0;L;;;;9;N;;;;;
+1D2EA;MAYAN NUMERAL TEN;No;0;L;;;;10;N;;;;;
+1D2EB;MAYAN NUMERAL ELEVEN;No;0;L;;;;11;N;;;;;
+1D2EC;MAYAN NUMERAL TWELVE;No;0;L;;;;12;N;;;;;
+1D2ED;MAYAN NUMERAL THIRTEEN;No;0;L;;;;13;N;;;;;
+1D2EE;MAYAN NUMERAL FOURTEEN;No;0;L;;;;14;N;;;;;
+1D2EF;MAYAN NUMERAL FIFTEEN;No;0;L;;;;15;N;;;;;
+1D2F0;MAYAN NUMERAL SIXTEEN;No;0;L;;;;16;N;;;;;
+1D2F1;MAYAN NUMERAL SEVENTEEN;No;0;L;;;;17;N;;;;;
+1D2F2;MAYAN NUMERAL EIGHTEEN;No;0;L;;;;18;N;;;;;
+1D2F3;MAYAN NUMERAL NINETEEN;No;0;L;;;;19;N;;;;;
1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;;
1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;;
@@ -26594,6 +27108,13 @@
1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;;
1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;;
1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;;
+1D372;IDEOGRAPHIC TALLY MARK ONE;No;0;L;;;;1;N;;;;;
+1D373;IDEOGRAPHIC TALLY MARK TWO;No;0;L;;;;2;N;;;;;
+1D374;IDEOGRAPHIC TALLY MARK THREE;No;0;L;;;;3;N;;;;;
+1D375;IDEOGRAPHIC TALLY MARK FOUR;No;0;L;;;;4;N;;;;;
+1D376;IDEOGRAPHIC TALLY MARK FIVE;No;0;L;;;;5;N;;;;;
+1D377;TALLY MARK ONE;No;0;L;;;;1;N;;;;;
+1D378;TALLY MARK FIVE;No;0;L;;;;5;N;;;;;
1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
@@ -28600,6 +29121,74 @@
1E959;ADLAM DIGIT NINE;Nd;0;R;;9;9;9;N;;;;;
1E95E;ADLAM INITIAL EXCLAMATION MARK;Po;0;R;;;;;N;;;;;
1E95F;ADLAM INITIAL QUESTION MARK;Po;0;R;;;;;N;;;;;
+1EC71;INDIC SIYAQ NUMBER ONE;No;0;AL;;;;1;N;;;;;
+1EC72;INDIC SIYAQ NUMBER TWO;No;0;AL;;;;2;N;;;;;
+1EC73;INDIC SIYAQ NUMBER THREE;No;0;AL;;;;3;N;;;;;
+1EC74;INDIC SIYAQ NUMBER FOUR;No;0;AL;;;;4;N;;;;;
+1EC75;INDIC SIYAQ NUMBER FIVE;No;0;AL;;;;5;N;;;;;
+1EC76;INDIC SIYAQ NUMBER SIX;No;0;AL;;;;6;N;;;;;
+1EC77;INDIC SIYAQ NUMBER SEVEN;No;0;AL;;;;7;N;;;;;
+1EC78;INDIC SIYAQ NUMBER EIGHT;No;0;AL;;;;8;N;;;;;
+1EC79;INDIC SIYAQ NUMBER NINE;No;0;AL;;;;9;N;;;;;
+1EC7A;INDIC SIYAQ NUMBER TEN;No;0;AL;;;;10;N;;;;;
+1EC7B;INDIC SIYAQ NUMBER TWENTY;No;0;AL;;;;20;N;;;;;
+1EC7C;INDIC SIYAQ NUMBER THIRTY;No;0;AL;;;;30;N;;;;;
+1EC7D;INDIC SIYAQ NUMBER FORTY;No;0;AL;;;;40;N;;;;;
+1EC7E;INDIC SIYAQ NUMBER FIFTY;No;0;AL;;;;50;N;;;;;
+1EC7F;INDIC SIYAQ NUMBER SIXTY;No;0;AL;;;;60;N;;;;;
+1EC80;INDIC SIYAQ NUMBER SEVENTY;No;0;AL;;;;70;N;;;;;
+1EC81;INDIC SIYAQ NUMBER EIGHTY;No;0;AL;;;;80;N;;;;;
+1EC82;INDIC SIYAQ NUMBER NINETY;No;0;AL;;;;90;N;;;;;
+1EC83;INDIC SIYAQ NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;;
+1EC84;INDIC SIYAQ NUMBER TWO HUNDRED;No;0;AL;;;;200;N;;;;;
+1EC85;INDIC SIYAQ NUMBER THREE HUNDRED;No;0;AL;;;;300;N;;;;;
+1EC86;INDIC SIYAQ NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;;
+1EC87;INDIC SIYAQ NUMBER FIVE HUNDRED;No;0;AL;;;;500;N;;;;;
+1EC88;INDIC SIYAQ NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;;
+1EC89;INDIC SIYAQ NUMBER SEVEN HUNDRED;No;0;AL;;;;700;N;;;;;
+1EC8A;INDIC SIYAQ NUMBER EIGHT HUNDRED;No;0;AL;;;;800;N;;;;;
+1EC8B;INDIC SIYAQ NUMBER NINE HUNDRED;No;0;AL;;;;900;N;;;;;
+1EC8C;INDIC SIYAQ NUMBER ONE THOUSAND;No;0;AL;;;;1000;N;;;;;
+1EC8D;INDIC SIYAQ NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;;
+1EC8E;INDIC SIYAQ NUMBER THREE THOUSAND;No;0;AL;;;;3000;N;;;;;
+1EC8F;INDIC SIYAQ NUMBER FOUR THOUSAND;No;0;AL;;;;4000;N;;;;;
+1EC90;INDIC SIYAQ NUMBER FIVE THOUSAND;No;0;AL;;;;5000;N;;;;;
+1EC91;INDIC SIYAQ NUMBER SIX THOUSAND;No;0;AL;;;;6000;N;;;;;
+1EC92;INDIC SIYAQ NUMBER SEVEN THOUSAND;No;0;AL;;;;7000;N;;;;;
+1EC93;INDIC SIYAQ NUMBER EIGHT THOUSAND;No;0;AL;;;;8000;N;;;;;
+1EC94;INDIC SIYAQ NUMBER NINE THOUSAND;No;0;AL;;;;9000;N;;;;;
+1EC95;INDIC SIYAQ NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;;
+1EC96;INDIC SIYAQ NUMBER TWENTY THOUSAND;No;0;AL;;;;20000;N;;;;;
+1EC97;INDIC SIYAQ NUMBER THIRTY THOUSAND;No;0;AL;;;;30000;N;;;;;
+1EC98;INDIC SIYAQ NUMBER FORTY THOUSAND;No;0;AL;;;;40000;N;;;;;
+1EC99;INDIC SIYAQ NUMBER FIFTY THOUSAND;No;0;AL;;;;50000;N;;;;;
+1EC9A;INDIC SIYAQ NUMBER SIXTY THOUSAND;No;0;AL;;;;60000;N;;;;;
+1EC9B;INDIC SIYAQ NUMBER SEVENTY THOUSAND;No;0;AL;;;;70000;N;;;;;
+1EC9C;INDIC SIYAQ NUMBER EIGHTY THOUSAND;No;0;AL;;;;80000;N;;;;;
+1EC9D;INDIC SIYAQ NUMBER NINETY THOUSAND;No;0;AL;;;;90000;N;;;;;
+1EC9E;INDIC SIYAQ NUMBER LAKH;No;0;AL;;;;100000;N;;;;;
+1EC9F;INDIC SIYAQ NUMBER LAKHAN;No;0;AL;;;;200000;N;;;;;
+1ECA0;INDIC SIYAQ LAKH MARK;No;0;AL;;;;100000;N;;;;;
+1ECA1;INDIC SIYAQ NUMBER KAROR;No;0;AL;;;;10000000;N;;;;;
+1ECA2;INDIC SIYAQ NUMBER KARORAN;No;0;AL;;;;20000000;N;;;;;
+1ECA3;INDIC SIYAQ NUMBER PREFIXED ONE;No;0;AL;;;;1;N;;;;;
+1ECA4;INDIC SIYAQ NUMBER PREFIXED TWO;No;0;AL;;;;2;N;;;;;
+1ECA5;INDIC SIYAQ NUMBER PREFIXED THREE;No;0;AL;;;;3;N;;;;;
+1ECA6;INDIC SIYAQ NUMBER PREFIXED FOUR;No;0;AL;;;;4;N;;;;;
+1ECA7;INDIC SIYAQ NUMBER PREFIXED FIVE;No;0;AL;;;;5;N;;;;;
+1ECA8;INDIC SIYAQ NUMBER PREFIXED SIX;No;0;AL;;;;6;N;;;;;
+1ECA9;INDIC SIYAQ NUMBER PREFIXED SEVEN;No;0;AL;;;;7;N;;;;;
+1ECAA;INDIC SIYAQ NUMBER PREFIXED EIGHT;No;0;AL;;;;8;N;;;;;
+1ECAB;INDIC SIYAQ NUMBER PREFIXED NINE;No;0;AL;;;;9;N;;;;;
+1ECAC;INDIC SIYAQ PLACEHOLDER;So;0;AL;;;;;N;;;;;
+1ECAD;INDIC SIYAQ FRACTION ONE QUARTER;No;0;AL;;;;1/4;N;;;;;
+1ECAE;INDIC SIYAQ FRACTION ONE HALF;No;0;AL;;;;1/2;N;;;;;
+1ECAF;INDIC SIYAQ FRACTION THREE QUARTERS;No;0;AL;;;;3/4;N;;;;;
+1ECB0;INDIC SIYAQ RUPEE MARK;Sc;0;AL;;;;;N;;;;;
+1ECB1;INDIC SIYAQ NUMBER ALTERNATE ONE;No;0;AL;;;;1;N;;;;;
+1ECB2;INDIC SIYAQ NUMBER ALTERNATE TWO;No;0;AL;;;;2;N;;;;;
+1ECB3;INDIC SIYAQ NUMBER ALTERNATE TEN THOUSAND;No;0;AL;;;;10000;N;;;;;
+1ECB4;INDIC SIYAQ ALTERNATE LAKH MARK;No;0;AL;;;;100000;N;;;;;
1EE00;ARABIC MATHEMATICAL ALEF;Lo;0;AL;<font> 0627;;;;N;;;;;
1EE01;ARABIC MATHEMATICAL BEH;Lo;0;AL;<font> 0628;;;;N;;;;;
1EE02;ARABIC MATHEMATICAL JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
@@ -29013,6 +29602,7 @@
1F12C;CIRCLED ITALIC LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;;
1F12D;CIRCLED CD;So;0;L;<circle> 0043 0044;;;;N;;;;;
1F12E;CIRCLED WZ;So;0;L;<circle> 0057 005A;;;;N;;;;;
+1F12F;COPYLEFT SYMBOL;So;0;ON;;;;;N;;;;;
1F130;SQUARED LATIN CAPITAL LETTER A;So;0;L;<square> 0041;;;;N;;;;;
1F131;SQUARED LATIN CAPITAL LETTER B;So;0;L;<square> 0042;;;;N;;;;;
1F132;SQUARED LATIN CAPITAL LETTER C;So;0;L;<square> 0043;;;;N;;;;;
@@ -30227,6 +30817,7 @@
1F6F6;CANOE;So;0;ON;;;;;N;;;;;
1F6F7;SLED;So;0;ON;;;;;N;;;;;
1F6F8;FLYING SAUCER;So;0;ON;;;;;N;;;;;
+1F6F9;SKATEBOARD;So;0;ON;;;;;N;;;;;
1F700;ALCHEMICAL SYMBOL FOR QUINTESSENCE;So;0;ON;;;;;N;;;;;
1F701;ALCHEMICAL SYMBOL FOR AIR;So;0;ON;;;;;N;;;;;
1F702;ALCHEMICAL SYMBOL FOR FIRE;So;0;ON;;;;;N;;;;;
@@ -30428,6 +31019,10 @@
1F7D2;LIGHT TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
1F7D3;HEAVY TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
1F7D4;HEAVY TWELVE POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+1F7D5;CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F7D6;NEGATIVE CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F7D7;CIRCLED SQUARE;So;0;ON;;;;;N;;;;;
+1F7D8;NEGATIVE CIRCLED SQUARE;So;0;ON;;;;;N;;;;;
1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
@@ -30648,6 +31243,9 @@
1F94A;BOXING GLOVE;So;0;ON;;;;;N;;;;;
1F94B;MARTIAL ARTS UNIFORM;So;0;ON;;;;;N;;;;;
1F94C;CURLING STONE;So;0;ON;;;;;N;;;;;
+1F94D;LACROSSE STICK AND BALL;So;0;ON;;;;;N;;;;;
+1F94E;SOFTBALL;So;0;ON;;;;;N;;;;;
+1F94F;FLYING DISC;So;0;ON;;;;;N;;;;;
1F950;CROISSANT;So;0;ON;;;;;N;;;;;
1F951;AVOCADO;So;0;ON;;;;;N;;;;;
1F952;CUCUMBER;So;0;ON;;;;;N;;;;;
@@ -30676,6 +31274,20 @@
1F969;CUT OF MEAT;So;0;ON;;;;;N;;;;;
1F96A;SANDWICH;So;0;ON;;;;;N;;;;;
1F96B;CANNED FOOD;So;0;ON;;;;;N;;;;;
+1F96C;LEAFY GREEN;So;0;ON;;;;;N;;;;;
+1F96D;MANGO;So;0;ON;;;;;N;;;;;
+1F96E;MOON CAKE;So;0;ON;;;;;N;;;;;
+1F96F;BAGEL;So;0;ON;;;;;N;;;;;
+1F970;SMILING FACE WITH SMILING EYES AND THREE HEARTS;So;0;ON;;;;;N;;;;;
+1F973;FACE WITH PARTY HORN AND PARTY HAT;So;0;ON;;;;;N;;;;;
+1F974;FACE WITH UNEVEN EYES AND WAVY MOUTH;So;0;ON;;;;;N;;;;;
+1F975;OVERHEATED FACE;So;0;ON;;;;;N;;;;;
+1F976;FREEZING FACE;So;0;ON;;;;;N;;;;;
+1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;;
+1F97C;LAB COAT;So;0;ON;;;;;N;;;;;
+1F97D;GOGGLES;So;0;ON;;;;;N;;;;;
+1F97E;HIKING BOOT;So;0;ON;;;;;N;;;;;
+1F97F;FLAT SHOE;So;0;ON;;;;;N;;;;;
1F980;CRAB;So;0;ON;;;;;N;;;;;
1F981;LION FACE;So;0;ON;;;;;N;;;;;
1F982;SCORPION;So;0;ON;;;;;N;;;;;
@@ -30700,7 +31312,30 @@
1F995;SAUROPOD;So;0;ON;;;;;N;;;;;
1F996;T-REX;So;0;ON;;;;;N;;;;;
1F997;CRICKET;So;0;ON;;;;;N;;;;;
+1F998;KANGAROO;So;0;ON;;;;;N;;;;;
+1F999;LLAMA;So;0;ON;;;;;N;;;;;
+1F99A;PEACOCK;So;0;ON;;;;;N;;;;;
+1F99B;HIPPOPOTAMUS;So;0;ON;;;;;N;;;;;
+1F99C;PARROT;So;0;ON;;;;;N;;;;;
+1F99D;RACCOON;So;0;ON;;;;;N;;;;;
+1F99E;LOBSTER;So;0;ON;;;;;N;;;;;
+1F99F;MOSQUITO;So;0;ON;;;;;N;;;;;
+1F9A0;MICROBE;So;0;ON;;;;;N;;;;;
+1F9A1;BADGER;So;0;ON;;;;;N;;;;;
+1F9A2;SWAN;So;0;ON;;;;;N;;;;;
+1F9B0;EMOJI COMPONENT RED HAIR;So;0;ON;;;;;N;;;;;
+1F9B1;EMOJI COMPONENT CURLY HAIR;So;0;ON;;;;;N;;;;;
+1F9B2;EMOJI COMPONENT BALD;So;0;ON;;;;;N;;;;;
+1F9B3;EMOJI COMPONENT WHITE HAIR;So;0;ON;;;;;N;;;;;
+1F9B4;BONE;So;0;ON;;;;;N;;;;;
+1F9B5;LEG;So;0;ON;;;;;N;;;;;
+1F9B6;FOOT;So;0;ON;;;;;N;;;;;
+1F9B7;TOOTH;So;0;ON;;;;;N;;;;;
+1F9B8;SUPERHERO;So;0;ON;;;;;N;;;;;
+1F9B9;SUPERVILLAIN;So;0;ON;;;;;N;;;;;
1F9C0;CHEESE WEDGE;So;0;ON;;;;;N;;;;;
+1F9C1;CUPCAKE;So;0;ON;;;;;N;;;;;
+1F9C2;SALT SHAKER;So;0;ON;;;;;N;;;;;
1F9D0;FACE WITH MONOCLE;So;0;ON;;;;;N;;;;;
1F9D1;ADULT;So;0;ON;;;;;N;;;;;
1F9D2;CHILD;So;0;ON;;;;;N;;;;;
@@ -30724,6 +31359,45 @@
1F9E4;GLOVES;So;0;ON;;;;;N;;;;;
1F9E5;COAT;So;0;ON;;;;;N;;;;;
1F9E6;SOCKS;So;0;ON;;;;;N;;;;;
+1F9E7;RED GIFT ENVELOPE;So;0;ON;;;;;N;;;;;
+1F9E8;FIRECRACKER;So;0;ON;;;;;N;;;;;
+1F9E9;JIGSAW PUZZLE PIECE;So;0;ON;;;;;N;;;;;
+1F9EA;TEST TUBE;So;0;ON;;;;;N;;;;;
+1F9EB;PETRI DISH;So;0;ON;;;;;N;;;;;
+1F9EC;DNA DOUBLE HELIX;So;0;ON;;;;;N;;;;;
+1F9ED;COMPASS;So;0;ON;;;;;N;;;;;
+1F9EE;ABACUS;So;0;ON;;;;;N;;;;;
+1F9EF;FIRE EXTINGUISHER;So;0;ON;;;;;N;;;;;
+1F9F0;TOOLBOX;So;0;ON;;;;;N;;;;;
+1F9F1;BRICK;So;0;ON;;;;;N;;;;;
+1F9F2;MAGNET;So;0;ON;;;;;N;;;;;
+1F9F3;LUGGAGE;So;0;ON;;;;;N;;;;;
+1F9F4;LOTION BOTTLE;So;0;ON;;;;;N;;;;;
+1F9F5;SPOOL OF THREAD;So;0;ON;;;;;N;;;;;
+1F9F6;BALL OF YARN;So;0;ON;;;;;N;;;;;
+1F9F7;SAFETY PIN;So;0;ON;;;;;N;;;;;
+1F9F8;TEDDY BEAR;So;0;ON;;;;;N;;;;;
+1F9F9;BROOM;So;0;ON;;;;;N;;;;;
+1F9FA;BASKET;So;0;ON;;;;;N;;;;;
+1F9FB;ROLL OF PAPER;So;0;ON;;;;;N;;;;;
+1F9FC;BAR OF SOAP;So;0;ON;;;;;N;;;;;
+1F9FD;SPONGE;So;0;ON;;;;;N;;;;;
+1F9FE;RECEIPT;So;0;ON;;;;;N;;;;;
+1F9FF;NAZAR AMULET;So;0;ON;;;;;N;;;;;
+1FA60;XIANGQI RED GENERAL;So;0;ON;;;;;N;;;;;
+1FA61;XIANGQI RED MANDARIN;So;0;ON;;;;;N;;;;;
+1FA62;XIANGQI RED ELEPHANT;So;0;ON;;;;;N;;;;;
+1FA63;XIANGQI RED HORSE;So;0;ON;;;;;N;;;;;
+1FA64;XIANGQI RED CHARIOT;So;0;ON;;;;;N;;;;;
+1FA65;XIANGQI RED CANNON;So;0;ON;;;;;N;;;;;
+1FA66;XIANGQI RED SOLDIER;So;0;ON;;;;;N;;;;;
+1FA67;XIANGQI BLACK GENERAL;So;0;ON;;;;;N;;;;;
+1FA68;XIANGQI BLACK MANDARIN;So;0;ON;;;;;N;;;;;
+1FA69;XIANGQI BLACK ELEPHANT;So;0;ON;;;;;N;;;;;
+1FA6A;XIANGQI BLACK HORSE;So;0;ON;;;;;N;;;;;
+1FA6B;XIANGQI BLACK CHARIOT;So;0;ON;;;;;N;;;;;
+1FA6C;XIANGQI BLACK CANNON;So;0;ON;;;;;N;;;;;
+1FA6D;XIANGQI BLACK SOLDIER;So;0;ON;;;;;N;;;;;
20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;
--- a/make/data/unicodedata/VERSION Wed Nov 21 13:20:52 2018 -0500
+++ b/make/data/unicodedata/VERSION Wed Nov 21 13:53:17 2018 -0500
@@ -1,1 +1,1 @@
-10.0.0
+11.0.0
--- a/make/lib/Awt2dLibraries.gmk Wed Nov 21 13:20:52 2018 -0500
+++ b/make/lib/Awt2dLibraries.gmk Wed Nov 21 13:53:17 2018 -0500
@@ -280,7 +280,7 @@
common/font \
#
- LIBAWT_XAWT_EXCLUDES := medialib
+ LIBAWT_XAWT_EXCLUDES := medialib debug
LIBAWT_XAWT_EXTRA_HEADER_DIRS := \
$(LIBAWT_DEFAULT_HEADER_DIRS) \
--- a/src/hotspot/cpu/aarch64/assembler_aarch64.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/cpu/aarch64/assembler_aarch64.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -317,29 +317,6 @@
enum operation { uxtb, uxth, uxtw, uxtx, sxtb, sxth, sxtw, sxtx };
};
-// abs methods which cannot overflow and so are well-defined across
-// the entire domain of integer types.
-static inline unsigned int uabs(unsigned int n) {
- union {
- unsigned int result;
- int value;
- };
- result = n;
- if (value < 0) result = -result;
- return result;
-}
-static inline unsigned long uabs(unsigned long n) {
- union {
- unsigned long result;
- long value;
- };
- result = n;
- if (value < 0) result = -result;
- return result;
-}
-static inline unsigned long uabs(long n) { return uabs((unsigned long)n); }
-static inline unsigned long uabs(int n) { return uabs((unsigned int)n); }
-
// Addressing modes
class Address {
public:
--- a/src/hotspot/cpu/x86/vm_version_x86.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/cpu/x86/vm_version_x86.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -1042,9 +1042,7 @@
}
}
#endif // COMPILER2 && ASSERT
-#endif // COMPILER2_OR_JVMCI
-#ifdef COMPILER2
#ifdef _LP64
if (FLAG_IS_DEFAULT(UseMultiplyToLenIntrinsic)) {
UseMultiplyToLenIntrinsic = true;
@@ -1092,8 +1090,8 @@
}
FLAG_SET_DEFAULT(UseMulAddIntrinsic, false);
}
-#endif
-#endif // COMPILER2
+#endif // _LP64
+#endif // COMPILER2_OR_JVMCI
// On new cpus instructions which update whole XMM register should be used
// to prevent partial register stall due to dependencies on high half.
--- a/src/hotspot/share/classfile/classListParser.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/classfile/classListParser.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -389,8 +389,8 @@
InstanceKlass* ik = InstanceKlass::cast(klass);
int id = this->id();
SystemDictionaryShared::update_shared_entry(ik, id);
- InstanceKlass* old = table()->lookup(id);
- if (old != NULL && old != ik) {
+ InstanceKlass** old_ptr = table()->lookup(id);
+ if (old_ptr != NULL) {
error("Duplicated ID %d for class %s", id, _class_name);
}
table()->add(id, ik);
@@ -404,11 +404,12 @@
}
InstanceKlass* ClassListParser::lookup_class_by_id(int id) {
- InstanceKlass* klass = table()->lookup(id);
- if (klass == NULL) {
+ InstanceKlass** klass_ptr = table()->lookup(id);
+ if (klass_ptr == NULL) {
error("Class ID %d has not been defined", id);
}
- return klass;
+ assert(*klass_ptr != NULL, "must be");
+ return *klass_ptr;
}
--- a/src/hotspot/share/classfile/classListParser.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/classfile/classListParser.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, 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,30 +27,12 @@
#include "utilities/exceptions.hpp"
#include "utilities/globalDefinitions.hpp"
-#include "utilities/hashtable.hpp"
+#include "utilities/growableArray.hpp"
+#include "utilities/hashtable.inline.hpp"
-class CDSClassInfo;
-
-// Look up from ID -> InstanceKlass*
-class ID2KlassTable : public Hashtable<InstanceKlass*, mtClass> {
+class ID2KlassTable : public KVHashtable<int, InstanceKlass*, mtInternal> {
public:
- ID2KlassTable() : Hashtable<InstanceKlass*, mtClass>(1987, sizeof(HashtableEntry<InstanceKlass*, mtClass>)) { }
- void add(int id, InstanceKlass* klass) {
- unsigned int hash = (unsigned int)id;
- HashtableEntry<InstanceKlass*, mtClass>* entry = new_entry(hash, klass);
- add_entry(hash_to_index(hash), entry);
- }
-
- InstanceKlass* lookup(int id) {
- unsigned int hash = (unsigned int)id;
- int index = hash_to_index(id);
- for (HashtableEntry<InstanceKlass*, mtClass>* e = bucket(index); e != NULL; e = e->next()) {
- if (e->hash() == hash) {
- return e->literal();
- }
- }
- return NULL;
- }
+ ID2KlassTable() : KVHashtable<int, InstanceKlass*, mtInternal>(1987) {}
};
class ClassListParser : public StackObj {
--- a/src/hotspot/share/classfile/classLoaderExt.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/classfile/classLoaderExt.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -25,7 +25,6 @@
#include "precompiled.hpp"
#include "classfile/classFileParser.hpp"
#include "classfile/classFileStream.hpp"
-#include "classfile/classListParser.hpp"
#include "classfile/classLoader.inline.hpp"
#include "classfile/classLoaderExt.hpp"
#include "classfile/classLoaderData.inline.hpp"
@@ -257,7 +256,6 @@
// the "source:" in the class list file (see classListParser.cpp), and can be a directory or
// a JAR file.
InstanceKlass* ClassLoaderExt::load_class(Symbol* name, const char* path, TRAPS) {
-
assert(name != NULL, "invariant");
assert(DumpSharedSpaces, "this function is only used with -Xshare:dump");
ResourceMark rm(THREAD);
--- a/src/hotspot/share/classfile/compactHashtable.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/classfile/compactHashtable.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -27,7 +27,7 @@
#include "oops/array.hpp"
#include "oops/symbol.hpp"
-#include "utilities/hashtable.hpp"
+#include "utilities/growableArray.hpp"
template <
--- a/src/hotspot/share/classfile/dictionary.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/classfile/dictionary.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -67,7 +67,6 @@
}
assert(number_of_entries() == 0, "should have removed all entries");
assert(new_entry_free_list() == NULL, "entry present on Dictionary's free list");
- free_buckets();
}
DictionaryEntry* Dictionary::new_entry(unsigned int hash, InstanceKlass* klass) {
--- a/src/hotspot/share/classfile/moduleEntry.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/classfile/moduleEntry.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -352,7 +352,6 @@
}
assert(number_of_entries() == 0, "should have removed all entries");
assert(new_entry_free_list() == NULL, "entry present on ModuleEntryTable's free list");
- free_buckets();
}
ModuleEntry* ModuleEntryTable::new_entry(unsigned int hash, Handle module_handle,
--- a/src/hotspot/share/classfile/packageEntry.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/classfile/packageEntry.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -191,7 +191,6 @@
}
assert(number_of_entries() == 0, "should have removed all entries");
assert(new_entry_free_list() == NULL, "entry present on PackageEntryTable's free list");
- free_buckets();
}
PackageEntry* PackageEntryTable::new_entry(unsigned int hash, Symbol* name, ModuleEntry* module) {
--- a/src/hotspot/share/compiler/compileBroker.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/compiler/compileBroker.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -1946,7 +1946,8 @@
}
}
-void CompileBroker::post_compile(CompilerThread* thread, CompileTask* task, bool success, ciEnv* ci_env) {
+void CompileBroker::post_compile(CompilerThread* thread, CompileTask* task, bool success, ciEnv* ci_env,
+ int compilable, const char* failure_reason) {
if (success) {
task->mark_success();
if (ci_env != NULL) {
@@ -1958,6 +1959,13 @@
_compilation_log->log_nmethod(thread, code);
}
}
+ } else if (AbortVMOnCompilationFailure) {
+ if (compilable == ciEnv::MethodCompilable_not_at_tier) {
+ fatal("Not compilable at tier %d: %s", task->comp_level(), failure_reason);
+ }
+ if (compilable == ciEnv::MethodCompilable_never) {
+ fatal("Never compilable: %s", failure_reason);
+ }
}
// simulate crash during compilation
assert(task->compile_id() != CICrashAt, "just as planned");
@@ -2068,7 +2076,7 @@
compilable = ciEnv::MethodCompilable_not_at_tier;
}
}
- post_compile(thread, task, task->code() != NULL, NULL);
+ post_compile(thread, task, task->code() != NULL, NULL, compilable, failure_reason);
if (event.should_commit()) {
post_compilation_event(&event, task);
}
@@ -2128,7 +2136,7 @@
ci_env.report_failure(failure_reason);
}
- post_compile(thread, task, !ci_env.failing(), &ci_env);
+ post_compile(thread, task, !ci_env.failing(), &ci_env, compilable, failure_reason);
if (event.should_commit()) {
post_compilation_event(&event, task);
}
--- a/src/hotspot/share/compiler/compileBroker.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/compiler/compileBroker.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -252,7 +252,8 @@
#endif
static void invoke_compiler_on_method(CompileTask* task);
- static void post_compile(CompilerThread* thread, CompileTask* task, bool success, ciEnv* ci_env);
+ static void post_compile(CompilerThread* thread, CompileTask* task, bool success, ciEnv* ci_env,
+ int compilable, const char* failure_reason);
static void set_last_compile(CompilerThread *thread, const methodHandle& method, bool is_osr, int comp_level);
static void push_jni_handle_block();
static void pop_jni_handle_block();
--- a/src/hotspot/share/gc/g1/g1CodeCacheRemSet.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/gc/g1/g1CodeCacheRemSet.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, 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
@@ -76,7 +76,9 @@
}
}
assert(number_of_entries() == 0, "should have removed all entries");
- free_buckets();
+ // Each of the entries in new_entry_free_list() have been allocated in
+ // G1CodeRootSetTable::new_entry(). We never call the block allocator
+ // in BasicHashtable::new_entry().
for (BasicHashtableEntry<mtGC>* e = new_entry_free_list(); e != NULL; e = new_entry_free_list()) {
FREE_C_HEAP_ARRAY(char, e);
}
--- a/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -28,6 +28,7 @@
#include "memory/allocation.hpp"
#include "oops/accessDecorators.hpp"
#include "opto/loopnode.hpp"
+#include "opto/matcher.hpp"
#include "opto/memnode.hpp"
#include "utilities/globalDefinitions.hpp"
@@ -298,6 +299,10 @@
virtual bool escape_add_final_edges(ConnectionGraph* conn_graph, PhaseGVN* gvn, Node* n, uint opcode) const { return false; }
virtual bool escape_has_out_with_unsafe_object(Node* n) const { return false; }
virtual bool escape_is_barrier_node(Node* n) const { return false; }
+
+ virtual bool matcher_find_shared_visit(Matcher* matcher, Matcher::MStack& mstack, Node* n, uint opcode, bool& mem_op, int& mem_addr_idx) const { return false; };
+ virtual bool matcher_find_shared_post_visit(Matcher* matcher, Node* n, uint opcode) const { return false; };
+ virtual bool matcher_is_store_load_barrier(Node* x, uint xop) const { return false; }
};
#endif // SHARE_GC_SHARED_C2_BARRIERSETC2_HPP
--- a/src/hotspot/share/gc/shared/ptrQueue.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/gc/shared/ptrQueue.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -74,12 +74,6 @@
_buf[index()] = ptr;
}
-void PtrQueue::locking_enqueue_completed_buffer(BufferNode* node) {
- assert(_lock->owned_by_self(), "Required.");
- qset()->enqueue_complete_buffer(node);
-}
-
-
BufferNode* BufferNode::allocate(size_t size) {
size_t byte_size = size * sizeof(void*);
void* data = NEW_C_HEAP_ARRAY(char, buffer_offset() + byte_size, mtGC);
@@ -222,7 +216,7 @@
BufferNode* node = BufferNode::make_node_from_buffer(_buf, index());
_buf = NULL; // clear shared _buf field
- locking_enqueue_completed_buffer(node); // enqueue completed buffer
+ qset()->enqueue_complete_buffer(node);
assert(_buf == NULL, "multiple enqueuers appear to be racing");
} else {
BufferNode* node = BufferNode::make_node_from_buffer(_buf, index());
--- a/src/hotspot/share/gc/shared/ptrQueue.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/gc/shared/ptrQueue.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -154,7 +154,6 @@
// get into an infinite loop).
virtual bool should_enqueue_buffer() { return true; }
void handle_zero_index();
- void locking_enqueue_completed_buffer(BufferNode* node);
void enqueue_known_active(void* ptr);
--- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -1459,6 +1459,17 @@
return handled;
}
+bool ZBarrierSetC2::matcher_find_shared_visit(Matcher* matcher, Matcher::MStack& mstack, Node* n, uint opcode, bool& mem_op, int& mem_addr_idx) const {
+ if (opcode == Op_CallLeaf &&
+ (n->as_Call()->entry_point() == ZBarrierSetRuntime::load_barrier_on_oop_field_preloaded_addr() ||
+ n->as_Call()->entry_point() == ZBarrierSetRuntime::load_barrier_on_weak_oop_field_preloaded_addr())) {
+ mem_op = true;
+ mem_addr_idx = TypeFunc::Parms + 1;
+ return true;
+ }
+ return false;
+}
+
// == Verification ==
#ifdef ASSERT
--- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -209,6 +209,8 @@
virtual bool final_graph_reshaping(Compile* compile, Node* n, uint opcode) const;
+ virtual bool matcher_find_shared_visit(Matcher* matcher, Matcher::MStack& mstack, Node* n, uint opcode, bool& mem_op, int& mem_addr_idx) const;
+
#ifdef ASSERT
virtual void verify_gc_barriers(Compile* compile, CompilePhase phase) const;
#endif
--- a/src/hotspot/share/gc/z/zHeapIterator.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/gc/z/zHeapIterator.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -59,11 +59,9 @@
_iter(iter) {}
virtual void do_oop(oop* p) {
- // Load barrier needed here for the same reason we
- // need fixup_partial_loads() in ZHeap::mark_end().
- // This barrier is also needed here in case we're
- // treating the JVMTI weak tag map as strong roots.
- const oop obj = ZBarrier::load_barrier_on_oop_field(p);
+ // Load barrier needed here, even on non-concurrent strong roots,
+ // for the same reason we need fixup_partial_loads() in ZHeap::mark_end().
+ const oop obj = NativeAccess<AS_NO_KEEPALIVE>::oop_load(p);
_iter->push(obj);
}
@@ -80,9 +78,9 @@
oop load_oop(oop* p) const {
if (_visit_referents) {
- return HeapAccess<ON_UNKNOWN_OOP_REF>::oop_load_at(_base, _base->field_offset(p));
+ return HeapAccess<ON_UNKNOWN_OOP_REF | AS_NO_KEEPALIVE>::oop_load_at(_base, _base->field_offset(p));
} else {
- return HeapAccess<>::oop_load(p);
+ return HeapAccess<AS_NO_KEEPALIVE>::oop_load(p);
}
}
@@ -164,18 +162,36 @@
}
void ZHeapIterator::objects_do(ObjectClosure* cl) {
- // Push roots onto stack
+ // Note that the heap iterator visits all reachable objects, including
+ // objects that might be unreachable from the application, such as a
+ // not yet cleared JNIWeakGloablRef. However, also note that visiting
+ // the JVMTI tag map is a requirement to make sure we visit all tagged
+ // objects, even those that might now have become phantom reachable.
+ // If we didn't do this the application would have expected to see
+ // ObjectFree events for phantom reachable objects in the tag map.
+
+ ZHeapIteratorRootOopClosure root_cl(this);
+
+ // Push strong roots onto stack
{
- // Note that we also visit the JVMTI weak tag map as if they were
- // strong roots to make sure we visit all tagged objects, even
- // those that might now have become unreachable. If we didn't do
- // this the user would have expected to see ObjectFree events for
- // unreachable objects in the tag map.
ZRootsIterator roots;
- ZConcurrentRootsIterator concurrent_roots(false /* marking */);
- ZHeapIteratorRootOopClosure root_cl(this);
- roots.oops_do(&root_cl, true /* visit_jvmti_weak_export */);
- concurrent_roots.oops_do(&root_cl);
+ roots.oops_do(&root_cl);
+ }
+
+ {
+ ZConcurrentRootsIterator roots;
+ roots.oops_do(&root_cl);
+ }
+
+ // Push weak roots onto stack
+ {
+ ZWeakRootsIterator roots;
+ roots.oops_do(&root_cl);
+ }
+
+ {
+ ZConcurrentWeakRootsIterator roots;
+ roots.oops_do(&root_cl);
}
// Drain stack
--- a/src/hotspot/share/gc/z/zRootsIterator.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/gc/z/zRootsIterator.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -124,7 +124,7 @@
ZParallelOopsDo<ZConcurrentRootsIterator, &ZConcurrentRootsIterator::do_class_loader_data_graph> _class_loader_data_graph;
public:
- ZConcurrentRootsIterator(bool marking);
+ ZConcurrentRootsIterator(bool marking = false);
~ZConcurrentRootsIterator();
void oops_do(ZRootsIteratorClosure* cl);
--- a/src/hotspot/share/jvmci/jvmci_globals.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/jvmci/jvmci_globals.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -98,7 +98,22 @@
"Number of methods to record in call profile") \
\
develop(bool, TraceUncollectedSpeculations, false, \
- "Print message when a failed speculation was not collected")
+ "Print message when a failed speculation was not collected") \
+ \
+ NOT_COMPILER2(diagnostic(bool, UseMultiplyToLenIntrinsic, false, \
+ "Enables intrinsification of BigInteger.multiplyToLen()")) \
+ \
+ NOT_COMPILER2(diagnostic(bool, UseSquareToLenIntrinsic, false, \
+ "Enables intrinsification of BigInteger.squareToLen()")) \
+ \
+ NOT_COMPILER2(diagnostic(bool, UseMulAddIntrinsic, false, \
+ "Enables intrinsification of BigInteger.mulAdd()")) \
+ \
+ NOT_COMPILER2(diagnostic(bool, UseMontgomeryMultiplyIntrinsic, false, \
+ "Enables intrinsification of BigInteger.montgomeryMultiply()")) \
+ \
+ NOT_COMPILER2(diagnostic(bool, UseMontgomerySquareIntrinsic, false, \
+ "Enables intrinsification of BigInteger.montgomerySquare()"))
// Read default values for JVMCI globals
--- a/src/hotspot/share/memory/heapShared.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/memory/heapShared.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -64,6 +64,10 @@
// assigned at runtime.
static ArchivableStaticFieldInfo closed_archive_subgraph_entry_fields[] = {
{"java/lang/Integer$IntegerCache", "archivedCache"},
+ {"java/lang/Long$LongCache", "archivedCache"},
+ {"java/lang/Byte$ByteCache", "archivedCache"},
+ {"java/lang/Short$ShortCache", "archivedCache"},
+ {"java/lang/Character$CharacterCache", "archivedCache"},
};
// Entry fields for subgraphs archived in the open archive heap region.
static ArchivableStaticFieldInfo open_archive_subgraph_entry_fields[] = {
--- a/src/hotspot/share/memory/metaspaceClosure.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/memory/metaspaceClosure.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, 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,13 +55,15 @@
}
bool UniqueMetaspaceClosure::do_ref(MetaspaceClosure::Ref* ref, bool read_only) {
- bool* found = _has_been_visited.get(ref->obj());
+ bool* found = _has_been_visited.lookup(ref->obj());
if (found != NULL) {
assert(*found == read_only, "must be");
return false; // Already visited: no need to iterate embedded pointers.
} else {
- bool isnew = _has_been_visited.put(ref->obj(), read_only);
- assert(isnew, "sanity");
+ _has_been_visited.add(ref->obj(), read_only);
+ if (_has_been_visited.maybe_grow(MAX_TABLE_SIZE)) {
+ log_info(cds, hashtables)("Expanded _has_been_visited table to %d", _has_been_visited.table_size());
+ }
do_unique_ref(ref, read_only);
return true; // Saw this for the first time: iterate the embedded pointers.
}
--- a/src/hotspot/share/memory/metaspaceClosure.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/memory/metaspaceClosure.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, 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,7 +29,7 @@
#include "memory/allocation.hpp"
#include "oops/array.hpp"
#include "utilities/growableArray.hpp"
-#include "utilities/resourceHash.hpp"
+#include "utilities/hashtable.inline.hpp"
// The metadata hierarchy is separate from the oop hierarchy
class MetaspaceObj; // no C++ vtable
@@ -258,25 +258,19 @@
// This is a special MetaspaceClosure that visits each unique MetaspaceObj once.
class UniqueMetaspaceClosure : public MetaspaceClosure {
+ static const int INITIAL_TABLE_SIZE = 15889;
+ static const int MAX_TABLE_SIZE = 1000000;
+
// Do not override. Returns true if we are discovering ref->obj() for the first time.
virtual bool do_ref(Ref* ref, bool read_only);
public:
// Gets called the first time we discover an object.
virtual void do_unique_ref(Ref* ref, bool read_only) = 0;
+ UniqueMetaspaceClosure() : _has_been_visited(INITIAL_TABLE_SIZE) {}
+
private:
- static unsigned my_hash(const address& a) {
- return primitive_hash<address>(a);
- }
- static bool my_equals(const address& a0, const address& a1) {
- return primitive_equals<address>(a0, a1);
- }
- ResourceHashtable<
- address, bool,
- UniqueMetaspaceClosure::my_hash, // solaris compiler doesn't like: primitive_hash<address>
- UniqueMetaspaceClosure::my_equals, // solaris compiler doesn't like: primitive_equals<address>
- 15889, // prime number
- ResourceObj::C_HEAP> _has_been_visited;
+ KVHashtable<address, bool, mtInternal> _has_been_visited;
};
#endif // SHARE_VM_MEMORY_METASPACE_ITERATOR_HPP
--- a/src/hotspot/share/memory/metaspaceShared.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/memory/metaspaceShared.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -64,6 +64,7 @@
#include "utilities/align.hpp"
#include "utilities/bitMap.hpp"
#include "utilities/defaultStream.hpp"
+#include "utilities/hashtable.inline.hpp"
#if INCLUDE_G1GC
#include "gc/g1/g1CollectedHeap.hpp"
#endif
@@ -1067,26 +1068,19 @@
// metaspace data into their final location in the shared regions.
class ArchiveCompactor : AllStatic {
+ static const int INITIAL_TABLE_SIZE = 8087;
+ static const int MAX_TABLE_SIZE = 1000000;
+
static DumpAllocStats* _alloc_stats;
static SortedSymbolClosure* _ssc;
- static unsigned my_hash(const address& a) {
- return primitive_hash<address>(a);
- }
- static bool my_equals(const address& a0, const address& a1) {
- return primitive_equals<address>(a0, a1);
- }
- typedef ResourceHashtable<
- address, address,
- ArchiveCompactor::my_hash, // solaris compiler doesn't like: primitive_hash<address>
- ArchiveCompactor::my_equals, // solaris compiler doesn't like: primitive_equals<address>
- 16384, ResourceObj::C_HEAP> RelocationTable;
+ typedef KVHashtable<address, address, mtInternal> RelocationTable;
static RelocationTable* _new_loc_table;
public:
static void initialize() {
_alloc_stats = new(ResourceObj::C_HEAP, mtInternal)DumpAllocStats;
- _new_loc_table = new(ResourceObj::C_HEAP, mtInternal)RelocationTable;
+ _new_loc_table = new RelocationTable(INITIAL_TABLE_SIZE);
}
static DumpAllocStats* alloc_stats() {
return _alloc_stats;
@@ -1136,15 +1130,17 @@
newtop = _rw_region.top();
}
memcpy(p, obj, bytes);
- bool isnew = _new_loc_table->put(obj, (address)p);
+ assert(_new_loc_table->lookup(obj) == NULL, "each object can be relocated at most once");
+ _new_loc_table->add(obj, (address)p);
log_trace(cds)("Copy: " PTR_FORMAT " ==> " PTR_FORMAT " %d", p2i(obj), p2i(p), bytes);
- assert(isnew, "must be");
-
+ if (_new_loc_table->maybe_grow(MAX_TABLE_SIZE)) {
+ log_info(cds, hashtables)("Expanded _new_loc_table to %d", _new_loc_table->table_size());
+ }
_alloc_stats->record(ref->msotype(), int(newtop - oldtop), read_only);
}
static address get_new_loc(MetaspaceClosure::Ref* ref) {
- address* pp = _new_loc_table->get(ref->obj());
+ address* pp = _new_loc_table->lookup(ref->obj());
assert(pp != NULL, "must be");
return *pp;
}
@@ -1288,7 +1284,7 @@
static Klass* get_relocated_klass(Klass* orig_klass) {
assert(DumpSharedSpaces, "dump time only");
- address* pp = _new_loc_table->get((address)orig_klass);
+ address* pp = _new_loc_table->lookup((address)orig_klass);
assert(pp != NULL, "must be");
Klass* klass = (Klass*)(*pp);
assert(klass->is_klass(), "must be");
--- a/src/hotspot/share/oops/instanceKlass.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/oops/instanceKlass.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -1282,7 +1282,6 @@
JavaThread *jt = (JavaThread *)THREAD;
{
// Atomic creation of array_klasses
- MutexLocker mc(Compile_lock, THREAD); // for vtables
MutexLocker ma(MultiArray_lock, THREAD);
// Check if update has already taken place
--- a/src/hotspot/share/oops/klass.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/oops/klass.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -59,6 +59,10 @@
return _java_mirror.resolve();
}
+oop Klass::java_mirror_no_keepalive() const {
+ return _java_mirror.peek();
+}
+
bool Klass::is_cloneable() const {
return _access_flags.is_cloneable_fast() ||
is_subtype_of(SystemDictionary::Cloneable_klass());
@@ -746,8 +750,8 @@
}
}
- if (java_mirror() != NULL) {
- guarantee(oopDesc::is_oop(java_mirror()), "should be instance");
+ if (java_mirror_no_keepalive() != NULL) {
+ guarantee(oopDesc::is_oop(java_mirror_no_keepalive()), "should be instance");
}
}
--- a/src/hotspot/share/oops/klass.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/oops/klass.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -257,6 +257,7 @@
// java mirror
oop java_mirror() const;
+ oop java_mirror_no_keepalive() const;
void set_java_mirror(Handle m);
oop archived_java_mirror_raw() NOT_CDS_JAVA_HEAP_RETURN_(NULL); // no GC barrier
--- a/src/hotspot/share/oops/objArrayKlass.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/oops/objArrayKlass.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -80,7 +80,6 @@
Klass* ek = NULL;
{
MutexUnlocker mu(MultiArray_lock);
- MutexUnlocker mc(Compile_lock); // for vtables
super_klass = element_super->array_klass(CHECK_0);
for( int i = element_supers->length()-1; i >= 0; i-- ) {
Klass* elem_super = element_supers->at(i);
@@ -332,7 +331,6 @@
ResourceMark rm;
JavaThread *jt = (JavaThread *)THREAD;
{
- MutexLocker mc(Compile_lock, THREAD); // for vtables
// Ensure atomic creation of higher dimensions
MutexLocker mu(MultiArray_lock, THREAD);
--- a/src/hotspot/share/oops/oopHandle.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/oops/oopHandle.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -44,6 +44,7 @@
OopHandle(oop* w) : _obj(w) {}
inline oop resolve() const;
+ inline oop peek() const;
// Used only for removing handle.
oop* ptr_raw() const { return _obj; }
--- a/src/hotspot/share/oops/oopHandle.inline.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/oops/oopHandle.inline.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -32,5 +32,8 @@
return (_obj == NULL) ? (oop)NULL : NativeAccess<>::oop_load(_obj);
}
+inline oop OopHandle::peek() const {
+ return (_obj == NULL) ? (oop)NULL : NativeAccess<AS_NO_KEEPALIVE>::oop_load(_obj);
+}
+
#endif // SHARE_VM_OOPS_OOPHANDLE_INLINE_HPP
-
--- a/src/hotspot/share/oops/typeArrayKlass.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/oops/typeArrayKlass.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -195,7 +195,6 @@
ResourceMark rm;
JavaThread *jt = (JavaThread *)THREAD;
{
- MutexLocker mc(Compile_lock, THREAD); // for vtables
// Atomic create higher dimension and link into list
MutexLocker mu(MultiArray_lock, THREAD);
--- a/src/hotspot/share/opto/doCall.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/opto/doCall.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -470,7 +470,7 @@
// Push appendix argument (MethodType, CallSite, etc.), if one.
if (iter().has_appendix()) {
ciObject* appendix_arg = iter().get_appendix();
- const TypeOopPtr* appendix_arg_type = TypeOopPtr::make_from_constant(appendix_arg);
+ const TypeOopPtr* appendix_arg_type = TypeOopPtr::make_from_constant(appendix_arg, /* require_const= */ true);
Node* appendix_arg_node = _gvn.makecon(appendix_arg_type);
push(appendix_arg_node);
}
--- a/src/hotspot/share/opto/ifnode.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/opto/ifnode.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -1551,7 +1551,6 @@
// Search up the dominator tree for an If with an identical test
while (dom->Opcode() != op || // Not same opcode?
dom->in(1) != in(1) || // Not same input 1?
- (req() == 3 && dom->in(2) != in(2)) || // Not same input 2?
prev_dom->in(0) != dom) { // One path of test does not dominate?
if (dist < 0) return NULL;
--- a/src/hotspot/share/opto/loopPredicate.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/opto/loopPredicate.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -370,9 +370,9 @@
// Clone loop predicates to cloned loops (peeled, unswitched, split_if).
Node* PhaseIdealLoop::clone_loop_predicates(Node* old_entry, Node* new_entry,
- bool clone_limit_check,
- PhaseIdealLoop* loop_phase,
- PhaseIterGVN* igvn) {
+ bool clone_limit_check,
+ PhaseIdealLoop* loop_phase,
+ PhaseIterGVN* igvn) {
#ifdef ASSERT
if (new_entry == NULL || !(new_entry->is_Proj() || new_entry->is_Region() || new_entry->is_SafePoint())) {
if (new_entry != NULL)
@@ -385,7 +385,7 @@
ProjNode* limit_check_proj = NULL;
limit_check_proj = find_predicate_insertion_point(entry, Deoptimization::Reason_loop_limit_check);
if (limit_check_proj != NULL) {
- entry = entry->in(0)->in(0);
+ entry = skip_loop_predicates(entry);
}
ProjNode* profile_predicate_proj = NULL;
ProjNode* predicate_proj = NULL;
@@ -467,7 +467,7 @@
Node* predicate = NULL;
predicate = find_predicate_insertion_point(entry, Deoptimization::Reason_loop_limit_check);
if (predicate != NULL) {
- entry = entry->in(0)->in(0);
+ entry = skip_loop_predicates(entry);
}
if (UseProfiledLoopPredicate) {
predicate = find_predicate_insertion_point(entry, Deoptimization::Reason_profile_predicate);
@@ -1363,7 +1363,7 @@
// Loop limit check predicate should be near the loop.
loop_limit_proj = find_predicate_insertion_point(entry, Deoptimization::Reason_loop_limit_check);
if (loop_limit_proj != NULL) {
- entry = loop_limit_proj->in(0)->in(0);
+ entry = skip_loop_predicates(loop_limit_proj);
}
bool has_profile_predicates = false;
profile_predicate_proj = find_predicate_insertion_point(entry, Deoptimization::Reason_profile_predicate);
--- a/src/hotspot/share/opto/loopTransform.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/opto/loopTransform.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -1200,7 +1200,7 @@
Node* predicate = NULL;
predicate = find_predicate_insertion_point(entry, Deoptimization::Reason_loop_limit_check);
if (predicate != NULL) {
- entry = entry->in(0)->in(0);
+ entry = skip_loop_predicates(entry);
}
Node* profile_predicate = NULL;
if (UseProfiledLoopPredicate) {
--- a/src/hotspot/share/opto/loopnode.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/opto/loopnode.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -324,6 +324,31 @@
return outer_ilt;
}
+void PhaseIdealLoop::insert_loop_limit_check(ProjNode* limit_check_proj, Node* cmp_limit, Node* bol) {
+ Node* new_predicate_proj = create_new_if_for_predicate(limit_check_proj, NULL,
+ Deoptimization::Reason_loop_limit_check,
+ Op_If);
+ Node* iff = new_predicate_proj->in(0);
+ assert(iff->Opcode() == Op_If, "bad graph shape");
+ Node* conv = iff->in(1);
+ assert(conv->Opcode() == Op_Conv2B, "bad graph shape");
+ Node* opaq = conv->in(1);
+ assert(opaq->Opcode() == Op_Opaque1, "bad graph shape");
+ cmp_limit = _igvn.register_new_node_with_optimizer(cmp_limit);
+ bol = _igvn.register_new_node_with_optimizer(bol);
+ set_subtree_ctrl(bol);
+ _igvn.replace_input_of(iff, 1, bol);
+
+#ifndef PRODUCT
+ // report that the loop predication has been actually performed
+ // for this loop
+ if (TraceLoopLimitCheck) {
+ tty->print_cr("Counted Loop Limit Check generated:");
+ debug_only( bol->dump(2); )
+ }
+#endif
+}
+
//------------------------------is_counted_loop--------------------------------
bool PhaseIdealLoop::is_counted_loop(Node* x, IdealLoopTree*& loop) {
PhaseGVN *gvn = &_igvn;
@@ -540,7 +565,7 @@
return false; // cyclic loop or this loop trips only once
}
- if (phi_incr != NULL) {
+ if (phi_incr != NULL && bt != BoolTest::ne) {
// check if there is a possiblity of IV overflowing after the first increment
if (stride_con > 0) {
if (init_t->_hi > max_jint - stride_con) {
@@ -631,28 +656,60 @@
cmp_limit = new CmpINode(limit, _igvn.intcon(min_jint - stride_m));
bol = new BoolNode(cmp_limit, BoolTest::ge);
}
- cmp_limit = _igvn.register_new_node_with_optimizer(cmp_limit);
- bol = _igvn.register_new_node_with_optimizer(bol);
- set_subtree_ctrl(bol);
-
- // Replace condition in original predicate but preserve Opaque node
- // so that previous predicates could be found.
- assert(check_iff->in(1)->Opcode() == Op_Conv2B &&
- check_iff->in(1)->in(1)->Opcode() == Op_Opaque1, "");
- Node* opq = check_iff->in(1)->in(1);
- _igvn.replace_input_of(opq, 1, bol);
- // Update ctrl.
- set_ctrl(opq, check_iff->in(0));
- set_ctrl(check_iff->in(1), check_iff->in(0));
-
-#ifndef PRODUCT
- // report that the loop predication has been actually performed
- // for this loop
- if (TraceLoopLimitCheck) {
- tty->print_cr("Counted Loop Limit Check generated:");
- debug_only( bol->dump(2); )
+
+ insert_loop_limit_check(limit_check_proj, cmp_limit, bol);
+ }
+
+ // Now we need to canonicalize loop condition.
+ if (bt == BoolTest::ne) {
+ assert(stride_con == 1 || stride_con == -1, "simple increment only");
+ if (stride_con > 0 && init_t->_hi < limit_t->_lo) {
+ // 'ne' can be replaced with 'lt' only when init < limit.
+ bt = BoolTest::lt;
+ } else if (stride_con < 0 && init_t->_lo > limit_t->_hi) {
+ // 'ne' can be replaced with 'gt' only when init > limit.
+ bt = BoolTest::gt;
+ } else {
+ ProjNode *limit_check_proj = find_predicate_insertion_point(init_control, Deoptimization::Reason_loop_limit_check);
+ if (!limit_check_proj) {
+ // The limit check predicate is not generated if this method trapped here before.
+#ifdef ASSERT
+ if (TraceLoopLimitCheck) {
+ tty->print("missing loop limit check:");
+ loop->dump_head();
+ x->dump(1);
+ }
+#endif
+ return false;
+ }
+ IfNode* check_iff = limit_check_proj->in(0)->as_If();
+
+ if (!is_dominator(get_ctrl(limit), check_iff->in(0)) ||
+ !is_dominator(get_ctrl(init_trip), check_iff->in(0))) {
+ return false;
+ }
+
+ Node* cmp_limit;
+ Node* bol;
+
+ if (stride_con > 0) {
+ cmp_limit = new CmpINode(init_trip, limit);
+ bol = new BoolNode(cmp_limit, BoolTest::lt);
+ } else {
+ cmp_limit = new CmpINode(init_trip, limit);
+ bol = new BoolNode(cmp_limit, BoolTest::gt);
+ }
+
+ insert_loop_limit_check(limit_check_proj, cmp_limit, bol);
+
+ if (stride_con > 0) {
+ // 'ne' can be replaced with 'lt' only when init < limit.
+ bt = BoolTest::lt;
+ } else if (stride_con < 0) {
+ // 'ne' can be replaced with 'gt' only when init > limit.
+ bt = BoolTest::gt;
+ }
}
-#endif
}
if (phi_incr != NULL) {
@@ -668,17 +725,6 @@
limit = gvn->transform(new AddINode(limit, stride));
}
- // Now we need to canonicalize loop condition.
- if (bt == BoolTest::ne) {
- assert(stride_con == 1 || stride_con == -1, "simple increment only");
- // 'ne' can be replaced with 'lt' only when init < limit.
- if (stride_con > 0 && init_t->_hi < limit_t->_lo)
- bt = BoolTest::lt;
- // 'ne' can be replaced with 'gt' only when init > limit.
- if (stride_con < 0 && init_t->_lo > limit_t->_hi)
- bt = BoolTest::gt;
- }
-
if (incl_limit) {
// The limit check guaranties that 'limit <= (max_jint - stride)' so
// we can convert 'i <= limit' to 'i < limit+1' since stride != 0.
@@ -2404,7 +2450,7 @@
Node* predicate = PhaseIdealLoop::find_predicate_insertion_point(entry, Deoptimization::Reason_loop_limit_check);
if (predicate != NULL ) {
tty->print(" limit_check");
- entry = entry->in(0)->in(0);
+ entry = PhaseIdealLoop::skip_loop_predicates(entry);
}
if (UseLoopPredicate) {
entry = PhaseIdealLoop::find_predicate_insertion_point(entry, Deoptimization::Reason_predicate);
@@ -3910,7 +3956,8 @@
}
while(worklist.size() != 0 && LCA != early) {
Node* s = worklist.pop();
- if (s->is_Load() || s->Opcode() == Op_SafePoint) {
+ if (s->is_Load() || s->Opcode() == Op_SafePoint ||
+ (s->is_CallStaticJava() && s->as_CallStaticJava()->uncommon_trap_request() != 0)) {
continue;
} else if (s->is_MergeMem()) {
for (DUIterator_Fast imax, i = s->fast_outs(imax); i < imax; i++) {
--- a/src/hotspot/share/opto/loopnode.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/opto/loopnode.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -749,6 +749,7 @@
LoopNode* outer_main_head, uint dd_main_head);
Node* update_skeleton_predicate(Node* iff, Node* value, Node* predicate = NULL, Node* uncommon_proj = NULL,
Node* current_proj = NULL, IdealLoopTree* outer_loop = NULL, Node* prev_proj = NULL);
+ void insert_loop_limit_check(ProjNode* limit_check_proj, Node* cmp_limit, Node* bol);
public:
--- a/src/hotspot/share/opto/matcher.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/opto/matcher.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -23,6 +23,8 @@
*/
#include "precompiled.hpp"
+#include "gc/shared/barrierSet.hpp"
+#include "gc/shared/c2/barrierSetC2.hpp"
#include "memory/allocation.inline.hpp"
#include "memory/resourceArea.hpp"
#include "opto/ad.hpp"
@@ -41,9 +43,6 @@
#include "runtime/os.hpp"
#include "runtime/sharedRuntime.hpp"
#include "utilities/align.hpp"
-#if INCLUDE_ZGC
-#include "gc/z/zBarrierSetRuntime.hpp"
-#endif // INCLUDE_ZGC
OptoReg::Name OptoReg::c_frame_pointer;
@@ -2071,122 +2070,12 @@
set_visited(n); // Flag as visited now
bool mem_op = false;
int mem_addr_idx = MemNode::Address;
-
- switch( nop ) { // Handle some opcodes special
- case Op_Phi: // Treat Phis as shared roots
- case Op_Parm:
- case Op_Proj: // All handled specially during matching
- case Op_SafePointScalarObject:
- set_shared(n);
- set_dontcare(n);
- break;
- case Op_If:
- case Op_CountedLoopEnd:
- mstack.set_state(Alt_Post_Visit); // Alternative way
- // Convert (If (Bool (CmpX A B))) into (If (Bool) (CmpX A B)). Helps
- // with matching cmp/branch in 1 instruction. The Matcher needs the
- // Bool and CmpX side-by-side, because it can only get at constants
- // that are at the leaves of Match trees, and the Bool's condition acts
- // as a constant here.
- mstack.push(n->in(1), Visit); // Clone the Bool
- mstack.push(n->in(0), Pre_Visit); // Visit control input
- continue; // while (mstack.is_nonempty())
- case Op_ConvI2D: // These forms efficiently match with a prior
- case Op_ConvI2F: // Load but not a following Store
- if( n->in(1)->is_Load() && // Prior load
- n->outcnt() == 1 && // Not already shared
- n->unique_out()->is_Store() ) // Following store
- set_shared(n); // Force it to be a root
- break;
- case Op_ReverseBytesI:
- case Op_ReverseBytesL:
- if( n->in(1)->is_Load() && // Prior load
- n->outcnt() == 1 ) // Not already shared
- set_shared(n); // Force it to be a root
- break;
- case Op_BoxLock: // Cant match until we get stack-regs in ADLC
- case Op_IfFalse:
- case Op_IfTrue:
- case Op_MachProj:
- case Op_MergeMem:
- case Op_Catch:
- case Op_CatchProj:
- case Op_CProj:
- case Op_JumpProj:
- case Op_JProj:
- case Op_NeverBranch:
- set_dontcare(n);
- break;
- case Op_Jump:
- mstack.push(n->in(1), Pre_Visit); // Switch Value (could be shared)
- mstack.push(n->in(0), Pre_Visit); // Visit Control input
- continue; // while (mstack.is_nonempty())
- case Op_StrComp:
- case Op_StrEquals:
- case Op_StrIndexOf:
- case Op_StrIndexOfChar:
- case Op_AryEq:
- case Op_HasNegatives:
- case Op_StrInflatedCopy:
- case Op_StrCompressedCopy:
- case Op_EncodeISOArray:
- case Op_FmaD:
- case Op_FmaF:
- case Op_FmaVD:
- case Op_FmaVF:
- set_shared(n); // Force result into register (it will be anyways)
- break;
- case Op_ConP: { // Convert pointers above the centerline to NUL
- TypeNode *tn = n->as_Type(); // Constants derive from type nodes
- const TypePtr* tp = tn->type()->is_ptr();
- if (tp->_ptr == TypePtr::AnyNull) {
- tn->set_type(TypePtr::NULL_PTR);
+ bool gc_handled = BarrierSet::barrier_set()->barrier_set_c2()->matcher_find_shared_visit(this, mstack, n, nop, mem_op, mem_addr_idx);
+ if (!gc_handled) {
+ if (find_shared_visit(mstack, n, nop, mem_op, mem_addr_idx)) {
+ continue;
}
- break;
}
- case Op_ConN: { // Convert narrow pointers above the centerline to NUL
- TypeNode *tn = n->as_Type(); // Constants derive from type nodes
- const TypePtr* tp = tn->type()->make_ptr();
- if (tp && tp->_ptr == TypePtr::AnyNull) {
- tn->set_type(TypeNarrowOop::NULL_PTR);
- }
- break;
- }
- case Op_Binary: // These are introduced in the Post_Visit state.
- ShouldNotReachHere();
- break;
- case Op_ClearArray:
- case Op_SafePoint:
- mem_op = true;
- break;
-#if INCLUDE_ZGC
- case Op_CallLeaf:
- if (UseZGC) {
- if (n->as_Call()->entry_point() == ZBarrierSetRuntime::load_barrier_on_oop_field_preloaded_addr() ||
- n->as_Call()->entry_point() == ZBarrierSetRuntime::load_barrier_on_weak_oop_field_preloaded_addr()) {
- mem_op = true;
- mem_addr_idx = TypeFunc::Parms+1;
- }
- break;
- }
-#endif
- default:
- if( n->is_Store() ) {
- // Do match stores, despite no ideal reg
- mem_op = true;
- break;
- }
- if( n->is_Mem() ) { // Loads and LoadStores
- mem_op = true;
- // Loads must be root of match tree due to prior load conflict
- if( C->subsume_loads() == false )
- set_shared(n);
- }
- // Fall into default case
- if( !n->ideal_reg() )
- set_dontcare(n); // Unmatchable Nodes
- } // end_switch
-
for(int i = n->req() - 1; i >= 0; --i) { // For my children
Node *m = n->in(i); // Get ith input
if (m == NULL) continue; // Ignore NULLs
@@ -2252,101 +2141,10 @@
mstack.pop(); // Remove node from stack
// Now hack a few special opcodes
- switch( n->Opcode() ) { // Handle some opcodes special
- case Op_StorePConditional:
- case Op_StoreIConditional:
- case Op_StoreLConditional:
- case Op_CompareAndExchangeB:
- case Op_CompareAndExchangeS:
- case Op_CompareAndExchangeI:
- case Op_CompareAndExchangeL:
- case Op_CompareAndExchangeP:
- case Op_CompareAndExchangeN:
- case Op_WeakCompareAndSwapB:
- case Op_WeakCompareAndSwapS:
- case Op_WeakCompareAndSwapI:
- case Op_WeakCompareAndSwapL:
- case Op_WeakCompareAndSwapP:
- case Op_WeakCompareAndSwapN:
- case Op_CompareAndSwapB:
- case Op_CompareAndSwapS:
- case Op_CompareAndSwapI:
- case Op_CompareAndSwapL:
- case Op_CompareAndSwapP:
- case Op_CompareAndSwapN: { // Convert trinary to binary-tree
- Node *newval = n->in(MemNode::ValueIn );
- Node *oldval = n->in(LoadStoreConditionalNode::ExpectedIn);
- Node *pair = new BinaryNode( oldval, newval );
- n->set_req(MemNode::ValueIn,pair);
- n->del_req(LoadStoreConditionalNode::ExpectedIn);
- break;
- }
- case Op_CMoveD: // Convert trinary to binary-tree
- case Op_CMoveF:
- case Op_CMoveI:
- case Op_CMoveL:
- case Op_CMoveN:
- case Op_CMoveP:
- case Op_CMoveVF:
- case Op_CMoveVD: {
- // Restructure into a binary tree for Matching. It's possible that
- // we could move this code up next to the graph reshaping for IfNodes
- // or vice-versa, but I do not want to debug this for Ladybird.
- // 10/2/2000 CNC.
- Node *pair1 = new BinaryNode(n->in(1),n->in(1)->in(1));
- n->set_req(1,pair1);
- Node *pair2 = new BinaryNode(n->in(2),n->in(3));
- n->set_req(2,pair2);
- n->del_req(3);
- break;
- }
- case Op_LoopLimit: {
- Node *pair1 = new BinaryNode(n->in(1),n->in(2));
- n->set_req(1,pair1);
- n->set_req(2,n->in(3));
- n->del_req(3);
- break;
- }
- case Op_StrEquals:
- case Op_StrIndexOfChar: {
- Node *pair1 = new BinaryNode(n->in(2),n->in(3));
- n->set_req(2,pair1);
- n->set_req(3,n->in(4));
- n->del_req(4);
- break;
- }
- case Op_StrComp:
- case Op_StrIndexOf: {
- Node *pair1 = new BinaryNode(n->in(2),n->in(3));
- n->set_req(2,pair1);
- Node *pair2 = new BinaryNode(n->in(4),n->in(5));
- n->set_req(3,pair2);
- n->del_req(5);
- n->del_req(4);
- break;
- }
- case Op_StrCompressedCopy:
- case Op_StrInflatedCopy:
- case Op_EncodeISOArray: {
- // Restructure into a binary tree for Matching.
- Node* pair = new BinaryNode(n->in(3), n->in(4));
- n->set_req(3, pair);
- n->del_req(4);
- break;
- }
- case Op_FmaD:
- case Op_FmaF:
- case Op_FmaVD:
- case Op_FmaVF: {
- // Restructure into a binary tree for Matching.
- Node* pair = new BinaryNode(n->in(1), n->in(2));
- n->set_req(2, pair);
- n->set_req(1, n->in(3));
- n->del_req(3);
- break;
- }
- default:
- break;
+ uint opcode = n->Opcode();
+ bool gc_handled = BarrierSet::barrier_set()->barrier_set_c2()->matcher_find_shared_post_visit(this, n, opcode);
+ if (!gc_handled) {
+ find_shared_post_visit(n, opcode);
}
}
else {
@@ -2355,6 +2153,212 @@
} // end of while (mstack.is_nonempty())
}
+bool Matcher::find_shared_visit(MStack& mstack, Node* n, uint opcode, bool& mem_op, int& mem_addr_idx) {
+ switch(opcode) { // Handle some opcodes special
+ case Op_Phi: // Treat Phis as shared roots
+ case Op_Parm:
+ case Op_Proj: // All handled specially during matching
+ case Op_SafePointScalarObject:
+ set_shared(n);
+ set_dontcare(n);
+ break;
+ case Op_If:
+ case Op_CountedLoopEnd:
+ mstack.set_state(Alt_Post_Visit); // Alternative way
+ // Convert (If (Bool (CmpX A B))) into (If (Bool) (CmpX A B)). Helps
+ // with matching cmp/branch in 1 instruction. The Matcher needs the
+ // Bool and CmpX side-by-side, because it can only get at constants
+ // that are at the leaves of Match trees, and the Bool's condition acts
+ // as a constant here.
+ mstack.push(n->in(1), Visit); // Clone the Bool
+ mstack.push(n->in(0), Pre_Visit); // Visit control input
+ return true; // while (mstack.is_nonempty())
+ case Op_ConvI2D: // These forms efficiently match with a prior
+ case Op_ConvI2F: // Load but not a following Store
+ if( n->in(1)->is_Load() && // Prior load
+ n->outcnt() == 1 && // Not already shared
+ n->unique_out()->is_Store() ) // Following store
+ set_shared(n); // Force it to be a root
+ break;
+ case Op_ReverseBytesI:
+ case Op_ReverseBytesL:
+ if( n->in(1)->is_Load() && // Prior load
+ n->outcnt() == 1 ) // Not already shared
+ set_shared(n); // Force it to be a root
+ break;
+ case Op_BoxLock: // Cant match until we get stack-regs in ADLC
+ case Op_IfFalse:
+ case Op_IfTrue:
+ case Op_MachProj:
+ case Op_MergeMem:
+ case Op_Catch:
+ case Op_CatchProj:
+ case Op_CProj:
+ case Op_JumpProj:
+ case Op_JProj:
+ case Op_NeverBranch:
+ set_dontcare(n);
+ break;
+ case Op_Jump:
+ mstack.push(n->in(1), Pre_Visit); // Switch Value (could be shared)
+ mstack.push(n->in(0), Pre_Visit); // Visit Control input
+ return true; // while (mstack.is_nonempty())
+ case Op_StrComp:
+ case Op_StrEquals:
+ case Op_StrIndexOf:
+ case Op_StrIndexOfChar:
+ case Op_AryEq:
+ case Op_HasNegatives:
+ case Op_StrInflatedCopy:
+ case Op_StrCompressedCopy:
+ case Op_EncodeISOArray:
+ case Op_FmaD:
+ case Op_FmaF:
+ case Op_FmaVD:
+ case Op_FmaVF:
+ set_shared(n); // Force result into register (it will be anyways)
+ break;
+ case Op_ConP: { // Convert pointers above the centerline to NUL
+ TypeNode *tn = n->as_Type(); // Constants derive from type nodes
+ const TypePtr* tp = tn->type()->is_ptr();
+ if (tp->_ptr == TypePtr::AnyNull) {
+ tn->set_type(TypePtr::NULL_PTR);
+ }
+ break;
+ }
+ case Op_ConN: { // Convert narrow pointers above the centerline to NUL
+ TypeNode *tn = n->as_Type(); // Constants derive from type nodes
+ const TypePtr* tp = tn->type()->make_ptr();
+ if (tp && tp->_ptr == TypePtr::AnyNull) {
+ tn->set_type(TypeNarrowOop::NULL_PTR);
+ }
+ break;
+ }
+ case Op_Binary: // These are introduced in the Post_Visit state.
+ ShouldNotReachHere();
+ break;
+ case Op_ClearArray:
+ case Op_SafePoint:
+ mem_op = true;
+ break;
+ default:
+ if( n->is_Store() ) {
+ // Do match stores, despite no ideal reg
+ mem_op = true;
+ break;
+ }
+ if( n->is_Mem() ) { // Loads and LoadStores
+ mem_op = true;
+ // Loads must be root of match tree due to prior load conflict
+ if( C->subsume_loads() == false )
+ set_shared(n);
+ }
+ // Fall into default case
+ if( !n->ideal_reg() )
+ set_dontcare(n); // Unmatchable Nodes
+ } // end_switch
+ return false;
+}
+
+void Matcher::find_shared_post_visit(Node* n, uint opcode) {
+ switch(opcode) { // Handle some opcodes special
+ case Op_StorePConditional:
+ case Op_StoreIConditional:
+ case Op_StoreLConditional:
+ case Op_CompareAndExchangeB:
+ case Op_CompareAndExchangeS:
+ case Op_CompareAndExchangeI:
+ case Op_CompareAndExchangeL:
+ case Op_CompareAndExchangeP:
+ case Op_CompareAndExchangeN:
+ case Op_WeakCompareAndSwapB:
+ case Op_WeakCompareAndSwapS:
+ case Op_WeakCompareAndSwapI:
+ case Op_WeakCompareAndSwapL:
+ case Op_WeakCompareAndSwapP:
+ case Op_WeakCompareAndSwapN:
+ case Op_CompareAndSwapB:
+ case Op_CompareAndSwapS:
+ case Op_CompareAndSwapI:
+ case Op_CompareAndSwapL:
+ case Op_CompareAndSwapP:
+ case Op_CompareAndSwapN: { // Convert trinary to binary-tree
+ Node* newval = n->in(MemNode::ValueIn);
+ Node* oldval = n->in(LoadStoreConditionalNode::ExpectedIn);
+ Node* pair = new BinaryNode(oldval, newval);
+ n->set_req(MemNode::ValueIn, pair);
+ n->del_req(LoadStoreConditionalNode::ExpectedIn);
+ break;
+ }
+ case Op_CMoveD: // Convert trinary to binary-tree
+ case Op_CMoveF:
+ case Op_CMoveI:
+ case Op_CMoveL:
+ case Op_CMoveN:
+ case Op_CMoveP:
+ case Op_CMoveVF:
+ case Op_CMoveVD: {
+ // Restructure into a binary tree for Matching. It's possible that
+ // we could move this code up next to the graph reshaping for IfNodes
+ // or vice-versa, but I do not want to debug this for Ladybird.
+ // 10/2/2000 CNC.
+ Node* pair1 = new BinaryNode(n->in(1), n->in(1)->in(1));
+ n->set_req(1, pair1);
+ Node* pair2 = new BinaryNode(n->in(2), n->in(3));
+ n->set_req(2, pair2);
+ n->del_req(3);
+ break;
+ }
+ case Op_LoopLimit: {
+ Node* pair1 = new BinaryNode(n->in(1), n->in(2));
+ n->set_req(1, pair1);
+ n->set_req(2, n->in(3));
+ n->del_req(3);
+ break;
+ }
+ case Op_StrEquals:
+ case Op_StrIndexOfChar: {
+ Node* pair1 = new BinaryNode(n->in(2), n->in(3));
+ n->set_req(2, pair1);
+ n->set_req(3, n->in(4));
+ n->del_req(4);
+ break;
+ }
+ case Op_StrComp:
+ case Op_StrIndexOf: {
+ Node* pair1 = new BinaryNode(n->in(2), n->in(3));
+ n->set_req(2, pair1);
+ Node* pair2 = new BinaryNode(n->in(4),n->in(5));
+ n->set_req(3, pair2);
+ n->del_req(5);
+ n->del_req(4);
+ break;
+ }
+ case Op_StrCompressedCopy:
+ case Op_StrInflatedCopy:
+ case Op_EncodeISOArray: {
+ // Restructure into a binary tree for Matching.
+ Node* pair = new BinaryNode(n->in(3), n->in(4));
+ n->set_req(3, pair);
+ n->del_req(4);
+ break;
+ }
+ case Op_FmaD:
+ case Op_FmaF:
+ case Op_FmaVD:
+ case Op_FmaVF: {
+ // Restructure into a binary tree for Matching.
+ Node* pair = new BinaryNode(n->in(1), n->in(2));
+ n->set_req(2, pair);
+ n->set_req(1, n->in(3));
+ n->del_req(3);
+ break;
+ }
+ default:
+ break;
+ }
+}
+
#ifdef ASSERT
// machine-independent root to machine-dependent root
void Matcher::dump_old2new_map() {
@@ -2516,7 +2520,8 @@
xop == Op_CompareAndSwapL ||
xop == Op_CompareAndSwapP ||
xop == Op_CompareAndSwapN ||
- xop == Op_CompareAndSwapI) {
+ xop == Op_CompareAndSwapI ||
+ BarrierSet::barrier_set()->barrier_set_c2()->matcher_is_store_load_barrier(x, xop)) {
return true;
}
--- a/src/hotspot/share/opto/matcher.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/opto/matcher.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -118,6 +118,9 @@
// Find shared Nodes, or Nodes that otherwise are Matcher roots
void find_shared( Node *n );
+ bool find_shared_visit(MStack& mstack, Node* n, uint opcode, bool& mem_op, int& mem_addr_idx);
+ void find_shared_post_visit(Node* n, uint opcode);
+
#ifdef X86
bool is_bmi_pattern(Node *n, Node *m);
#endif
--- a/src/hotspot/share/opto/mulnode.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/opto/mulnode.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -170,7 +170,6 @@
return mul_ring(t1,t2); // Local flavor of type multiplication
}
-
//=============================================================================
//------------------------------Ideal------------------------------------------
// Check for power-of-2 multiply, then try the regular MulNode::Ideal
@@ -185,42 +184,43 @@
}
// Now we have a constant Node on the right and the constant in con
- if( con == 0 ) return NULL; // By zero is handled by Value call
- if( con == 1 ) return NULL; // By one is handled by Identity call
+ if (con == 0) return NULL; // By zero is handled by Value call
+ if (con == 1) return NULL; // By one is handled by Identity call
// Check for negative constant; if so negate the final result
bool sign_flip = false;
- if( con < 0 ) {
- con = -con;
+
+ unsigned int abs_con = uabs(con);
+ if (abs_con != (unsigned int)con) {
sign_flip = true;
}
// Get low bit; check for being the only bit
Node *res = NULL;
- jint bit1 = con & -con; // Extract low bit
- if( bit1 == con ) { // Found a power of 2?
- res = new LShiftINode( in(1), phase->intcon(log2_intptr(bit1)) );
+ unsigned int bit1 = abs_con & (0-abs_con); // Extract low bit
+ if (bit1 == abs_con) { // Found a power of 2?
+ res = new LShiftINode(in(1), phase->intcon(log2_intptr(bit1)));
} else {
// Check for constant with 2 bits set
- jint bit2 = con-bit1;
- bit2 = bit2 & -bit2; // Extract 2nd bit
- if( bit2 + bit1 == con ) { // Found all bits in con?
- Node *n1 = phase->transform( new LShiftINode( in(1), phase->intcon(log2_intptr(bit1)) ) );
- Node *n2 = phase->transform( new LShiftINode( in(1), phase->intcon(log2_intptr(bit2)) ) );
- res = new AddINode( n2, n1 );
+ unsigned int bit2 = abs_con-bit1;
+ bit2 = bit2 & (0-bit2); // Extract 2nd bit
+ if (bit2 + bit1 == abs_con) { // Found all bits in con?
+ Node *n1 = phase->transform( new LShiftINode(in(1), phase->intcon(log2_intptr(bit1))));
+ Node *n2 = phase->transform( new LShiftINode(in(1), phase->intcon(log2_intptr(bit2))));
+ res = new AddINode(n2, n1);
- } else if (is_power_of_2(con+1)) {
+ } else if (is_power_of_2(abs_con+1)) {
// Sleezy: power-of-2 -1. Next time be generic.
- jint temp = (jint) (con + 1);
- Node *n1 = phase->transform( new LShiftINode( in(1), phase->intcon(log2_intptr(temp)) ) );
- res = new SubINode( n1, in(1) );
+ unsigned int temp = abs_con + 1;
+ Node *n1 = phase->transform(new LShiftINode(in(1), phase->intcon(log2_intptr(temp))));
+ res = new SubINode(n1, in(1));
} else {
return MulNode::Ideal(phase, can_reshape);
}
}
- if( sign_flip ) { // Need to negate result?
+ if (sign_flip) { // Need to negate result?
res = phase->transform(res);// Transform, before making the zero con
res = new SubINode(phase->intcon(0),res);
}
@@ -281,42 +281,42 @@
}
// Now we have a constant Node on the right and the constant in con
- if( con == CONST64(0) ) return NULL; // By zero is handled by Value call
- if( con == CONST64(1) ) return NULL; // By one is handled by Identity call
+ if (con == CONST64(0)) return NULL; // By zero is handled by Value call
+ if (con == CONST64(1)) return NULL; // By one is handled by Identity call
// Check for negative constant; if so negate the final result
bool sign_flip = false;
- if( con < 0 ) {
- con = -con;
+ unsigned long abs_con = uabs(con);
+ if (abs_con != (unsigned long)con) {
sign_flip = true;
}
// Get low bit; check for being the only bit
Node *res = NULL;
- jlong bit1 = con & -con; // Extract low bit
- if( bit1 == con ) { // Found a power of 2?
- res = new LShiftLNode( in(1), phase->intcon(log2_long(bit1)) );
+ unsigned long bit1 = abs_con & (0-abs_con); // Extract low bit
+ if (bit1 == abs_con) { // Found a power of 2?
+ res = new LShiftLNode(in(1), phase->intcon(log2_long(bit1)));
} else {
// Check for constant with 2 bits set
- jlong bit2 = con-bit1;
- bit2 = bit2 & -bit2; // Extract 2nd bit
- if( bit2 + bit1 == con ) { // Found all bits in con?
- Node *n1 = phase->transform( new LShiftLNode( in(1), phase->intcon(log2_long(bit1)) ) );
- Node *n2 = phase->transform( new LShiftLNode( in(1), phase->intcon(log2_long(bit2)) ) );
- res = new AddLNode( n2, n1 );
+ unsigned long bit2 = abs_con-bit1;
+ bit2 = bit2 & (0-bit2); // Extract 2nd bit
+ if (bit2 + bit1 == abs_con) { // Found all bits in con?
+ Node *n1 = phase->transform(new LShiftLNode(in(1), phase->intcon(log2_long(bit1))));
+ Node *n2 = phase->transform(new LShiftLNode(in(1), phase->intcon(log2_long(bit2))));
+ res = new AddLNode(n2, n1);
- } else if (is_power_of_2_long(con+1)) {
+ } else if (is_power_of_2_long(abs_con+1)) {
// Sleezy: power-of-2 -1. Next time be generic.
- jlong temp = (jlong) (con + 1);
- Node *n1 = phase->transform( new LShiftLNode( in(1), phase->intcon(log2_long(temp)) ) );
- res = new SubLNode( n1, in(1) );
+ unsigned long temp = abs_con + 1;
+ Node *n1 = phase->transform( new LShiftLNode(in(1), phase->intcon(log2_long(temp))));
+ res = new SubLNode(n1, in(1));
} else {
return MulNode::Ideal(phase, can_reshape);
}
}
- if( sign_flip ) { // Need to negate result?
+ if (sign_flip) { // Need to negate result?
res = phase->transform(res);// Transform, before making the zero con
res = new SubLNode(phase->longcon(0),res);
}
--- a/src/hotspot/share/prims/jvmtiExport.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/prims/jvmtiExport.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -2944,8 +2944,7 @@
return false;
}
- if (Compile_lock->owner() == thread ||
- MultiArray_lock->owner() == thread) {
+ if (MultiArray_lock->owner() == thread) {
return false;
}
return true;
--- a/src/hotspot/share/runtime/globals.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/runtime/globals.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -498,8 +498,8 @@
"Time out and warn or fail after SafepointTimeoutDelay " \
"milliseconds if failed to reach safepoint") \
\
- develop(bool, DieOnSafepointTimeout, false, \
- "Die upon failure to reach safepoint (see SafepointTimeout)") \
+ diagnostic(bool, AbortVMOnSafepointTimeout, false, \
+ "Abort upon failure to reach safepoint (see SafepointTimeout)") \
\
/* 50 retries * (5 * current_retry_count) millis = ~6.375 seconds */ \
/* typically, at most a few retries are needed */ \
@@ -2016,6 +2016,9 @@
notproduct(bool, CIObjectFactoryVerify, false, \
"enable potentially expensive verification in ciObjectFactory") \
\
+ diagnostic(bool, AbortVMOnCompilationFailure, false, \
+ "Abort VM when method had failed to compile.") \
+ \
/* Priorities */ \
product_pd(bool, UseThreadPriorities, "Use native thread priorities") \
\
--- a/src/hotspot/share/runtime/safepoint.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/runtime/safepoint.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -978,9 +978,9 @@
}
}
- // To debug the long safepoint, specify both DieOnSafepointTimeout &
+ // To debug the long safepoint, specify both AbortVMOnSafepointTimeout &
// ShowMessageBoxOnError.
- if (DieOnSafepointTimeout) {
+ if (AbortVMOnSafepointTimeout) {
fatal("Safepoint sync time longer than " INTX_FORMAT "ms detected when executing %s.",
SafepointTimeoutDelay, VMThread::vm_safepoint_description());
}
--- a/src/hotspot/share/utilities/globalDefinitions.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/utilities/globalDefinitions.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -1034,10 +1034,10 @@
// Returns largest i such that 2^i <= x.
// If x < 0, the function returns 31 on a 32-bit machine and 63 on a 64-bit machine.
// If x == 0, the function returns -1.
-inline int log2_intptr(intptr_t x) {
+inline int log2_intptr(uintptr_t x) {
int i = -1;
uintptr_t p = 1;
- while (p != 0 && p <= (uintptr_t)x) {
+ while (p != 0 && p <= x) {
// p = 2^(i+1) && p <= x (i.e., 2^(i+1) <= x)
i++; p *= 2;
}
@@ -1048,10 +1048,10 @@
//* largest i such that 2^i <= x
// A negative value of 'x' will return '63'
-inline int log2_long(jlong x) {
+inline int log2_long(unsigned long x) {
int i = -1;
julong p = 1;
- while (p != 0 && p <= (julong)x) {
+ while (p != 0 && p <= x) {
// p = 2^(i+1) && p <= x (i.e., 2^(i+1) <= x)
i++; p *= 2;
}
@@ -1060,6 +1060,22 @@
return i;
}
+inline int log2_intptr(intptr_t x) {
+ return log2_intptr((uintptr_t)x);
+}
+
+inline int log2_intptr(int x) {
+ return log2_intptr((uintptr_t)x);
+}
+
+inline int log2_intptr(uint x) {
+ return log2_intptr((uintptr_t)x);
+}
+
+inline int log2_long(jlong x) {
+ return log2_long((unsigned long)x);
+}
+
//* the argument must be exactly a power of 2
inline int exact_log2(intptr_t x) {
assert(is_power_of_2(x), "x must be a power of 2: " INTPTR_FORMAT, x);
@@ -1075,6 +1091,29 @@
inline bool is_odd (intx x) { return x & 1; }
inline bool is_even(intx x) { return !is_odd(x); }
+// abs methods which cannot overflow and so are well-defined across
+// the entire domain of integer types.
+static inline unsigned int uabs(unsigned int n) {
+ union {
+ unsigned int result;
+ int value;
+ };
+ result = n;
+ if (value < 0) result = 0-result;
+ return result;
+}
+static inline unsigned long uabs(unsigned long n) {
+ union {
+ unsigned long result;
+ long value;
+ };
+ result = n;
+ if (value < 0) result = 0-result;
+ return result;
+}
+static inline unsigned long uabs(jlong n) { return uabs((unsigned long)n); }
+static inline unsigned int uabs(int n) { return uabs((unsigned int)n); }
+
// "to" should be greater than "from."
inline intx byte_size(void* from, void* to) {
return (address)to - (address)from;
@@ -1261,4 +1300,17 @@
typedef const char* ccstr;
typedef const char* ccstrlist; // represents string arguments which accumulate
+//----------------------------------------------------------------------------------------------------
+// Default hash/equals functions used by ResourceHashtable and KVHashtable
+
+template<typename K> unsigned primitive_hash(const K& k) {
+ unsigned hash = (unsigned)((uintptr_t)k);
+ return hash ^ (hash >> 3); // just in case we're dealing with aligned ptrs
+}
+
+template<typename K> bool primitive_equals(const K& k0, const K& k1) {
+ return k0 == k1;
+}
+
+
#endif // SHARE_VM_UTILITIES_GLOBALDEFINITIONS_HPP
--- a/src/hotspot/share/utilities/hashtable.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/utilities/hashtable.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -65,6 +65,7 @@
len = 1 << log2_intptr(len); // round down to power of 2
assert(len >= _entry_size, "");
_first_free_entry = NEW_C_HEAP_ARRAY2(char, len, F, CURRENT_PC);
+ _entry_blocks->append(_first_free_entry);
_end_block = _first_free_entry + len;
}
entry = (BasicHashtableEntry<F>*)_first_free_entry;
@@ -86,7 +87,9 @@
}
// Version of hashtable entry allocation that allocates in the C heap directly.
-// The allocator in blocks is preferable but doesn't have free semantics.
+// The block allocator in BasicHashtable has less fragmentation, but the memory is not freed until
+// the whole table is freed. Use allocate_new_entry() if you want to individually free the memory
+// used by each entry
template <class T, MEMFLAGS F> HashtableEntry<T, F>* Hashtable<T, F>::allocate_new_entry(unsigned int hashValue, T obj) {
HashtableEntry<T, F>* entry = (HashtableEntry<T, F>*) NEW_C_HEAP_ARRAY(char, this->entry_size(), F);
@@ -203,6 +206,20 @@
return true;
}
+template <MEMFLAGS F> bool BasicHashtable<F>::maybe_grow(int max_size, int load_factor) {
+ assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
+
+ if (table_size() >= max_size) {
+ return false;
+ }
+ if (number_of_entries() / table_size() > load_factor) {
+ resize(MIN2<int>(table_size() * 2, max_size));
+ return true;
+ } else {
+ return false;
+ }
+}
+
// Dump footprint and bucket length statistics
//
// Note: if you create a new subclass of Hashtable<MyNewType, F>, you will need to
--- a/src/hotspot/share/utilities/hashtable.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/utilities/hashtable.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -25,11 +25,11 @@
#ifndef SHARE_VM_UTILITIES_HASHTABLE_HPP
#define SHARE_VM_UTILITIES_HASHTABLE_HPP
-#include "classfile/classLoaderData.hpp"
#include "memory/allocation.hpp"
#include "oops/oop.hpp"
#include "oops/symbol.hpp"
#include "runtime/handles.hpp"
+#include "utilities/growableArray.hpp"
// This is a generic hashtable, designed to be used for the symbol
// and string tables.
@@ -146,6 +146,7 @@
BasicHashtable(int table_size, int entry_size);
BasicHashtable(int table_size, int entry_size,
HashtableBucket<F>* buckets, int number_of_entries);
+ ~BasicHashtable();
// Bucket handling
int hash_to_index(unsigned int full_hash) const {
@@ -163,6 +164,7 @@
char* _end_block;
int _entry_size;
volatile int _number_of_entries;
+ GrowableArray<char*>* _entry_blocks;
protected:
@@ -233,6 +235,9 @@
bool resize(int new_size);
+ // Grow the number of buckets if the average entries per bucket is over the load_factor
+ bool maybe_grow(int max_size, int load_factor = 8);
+
template <class T> void verify_table(const char* table_name) PRODUCT_RETURN;
};
@@ -279,4 +284,55 @@
}
};
+// A subclass of BasicHashtable that allows you to do a simple K -> V mapping
+// without using tons of boilerplate code.
+template<
+ typename K, typename V, MEMFLAGS F,
+ unsigned (*HASH) (K const&) = primitive_hash<K>,
+ bool (*EQUALS)(K const&, K const&) = primitive_equals<K>
+ >
+class KVHashtable : public BasicHashtable<F> {
+ class KVHashtableEntry : public BasicHashtableEntry<F> {
+ public:
+ K _key;
+ V _value;
+ KVHashtableEntry* next() {
+ return (KVHashtableEntry*)BasicHashtableEntry<F>::next();
+ }
+ };
+
+protected:
+ KVHashtableEntry* bucket(int i) const {
+ return (KVHashtableEntry*)BasicHashtable<F>::bucket(i);
+ }
+
+ KVHashtableEntry* new_entry(unsigned int hashValue, K key, V value) {
+ KVHashtableEntry* entry = (KVHashtableEntry*)BasicHashtable<F>::new_entry(hashValue);
+ entry->_key = key;
+ entry->_value = value;
+ return entry;
+ }
+
+public:
+ KVHashtable(int table_size) : BasicHashtable<F>(table_size, sizeof(KVHashtableEntry)) {}
+
+ void add(K key, V value) {
+ unsigned int hash = HASH(key);
+ KVHashtableEntry* entry = new_entry(hash, key, value);
+ BasicHashtable<F>::add_entry(BasicHashtable<F>::hash_to_index(hash), entry);
+ }
+
+ V* lookup(K key) {
+ unsigned int hash = HASH(key);
+ int index = BasicHashtable<F>::hash_to_index(hash);
+ for (KVHashtableEntry* e = bucket(index); e != NULL; e = e->next()) {
+ if (e->hash() == hash && e->_key == key) {
+ return &(e->_value);
+ }
+ }
+ return NULL;
+ }
+};
+
+
#endif // SHARE_VM_UTILITIES_HASHTABLE_HPP
--- a/src/hotspot/share/utilities/hashtable.inline.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/utilities/hashtable.inline.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -54,6 +54,13 @@
_buckets = buckets;
}
+template <MEMFLAGS F> inline BasicHashtable<F>::~BasicHashtable() {
+ for (int i = 0; i < _entry_blocks->length(); i++) {
+ FREE_C_HEAP_ARRAY(char, _entry_blocks->at(i));
+ }
+ delete _entry_blocks;
+ free_buckets();
+}
template <MEMFLAGS F> inline void BasicHashtable<F>::initialize(int table_size, int entry_size,
int number_of_entries) {
@@ -64,6 +71,7 @@
_first_free_entry = NULL;
_end_block = NULL;
_number_of_entries = number_of_entries;
+ _entry_blocks = new(ResourceObj::C_HEAP, F) GrowableArray<char*>(4, true, F);
}
--- a/src/hotspot/share/utilities/resourceHash.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/src/hotspot/share/utilities/resourceHash.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, 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,15 +32,6 @@
typedef bool (*equals_fn)(K const&, K const&);
};
-template<typename K> unsigned primitive_hash(const K& k) {
- unsigned hash = (unsigned)((uintptr_t)k);
- return hash ^ (hash >> 3); // just in case we're dealing with aligned ptrs
-}
-
-template<typename K> bool primitive_equals(const K& k0, const K& k1) {
- return k0 == k1;
-}
-
template<
typename K, typename V,
// xlC does not compile this:
--- a/src/java.base/share/classes/java/lang/Byte.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/classes/java/lang/Byte.java Wed Nov 21 13:53:17 2018 -0500
@@ -26,6 +26,7 @@
package java.lang;
import jdk.internal.HotSpotIntrinsicCandidate;
+import jdk.internal.misc.VM;
/**
*
@@ -77,13 +78,25 @@
}
private static class ByteCache {
- private ByteCache(){}
+ private ByteCache() {}
- static final Byte cache[] = new Byte[-(-128) + 127 + 1];
+ static final Byte[] cache;
+ static Byte[] archivedCache;
static {
- for(int i = 0; i < cache.length; i++)
- cache[i] = new Byte((byte)(i - 128));
+ final int size = -(-128) + 127 + 1;
+
+ // Load and use the archived cache if it exists
+ VM.initializeFromArchive(ByteCache.class);
+ if (archivedCache == null || archivedCache.length != size) {
+ Byte[] c = new Byte[size];
+ byte value = (byte)-128;
+ for(int i = 0; i < size; i++) {
+ c[i] = new Byte(value++);
+ }
+ archivedCache = c;
+ }
+ cache = archivedCache;
}
}
--- a/src/java.base/share/classes/java/lang/Character.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/classes/java/lang/Character.java Wed Nov 21 13:53:17 2018 -0500
@@ -31,6 +31,7 @@
import java.util.Locale;
import jdk.internal.HotSpotIntrinsicCandidate;
+import jdk.internal.misc.VM;
/**
* The {@code Character} class wraps a value of the primitive
@@ -42,7 +43,7 @@
* a character's category (lowercase letter, digit, etc.) and for converting
* characters from uppercase to lowercase and vice versa.
* <p>
- * Character information is based on the Unicode Standard, version 10.0.0.
+ * Character information is based on the Unicode Standard, version 11.0.0.
* <p>
* The methods and data of class {@code Character} are defined by
* the information in the <i>UnicodeData</i> file that is part of the
@@ -680,11 +681,11 @@
*/
public static final class UnicodeBlock extends Subset {
/**
- * 638 - the expected number of entities
+ * 649 - the expected number of entities
* 0.75 - the default load factor of HashMap
*/
private static Map<String, UnicodeBlock> map =
- new HashMap<>((int)(638 / 0.75f + 1.0f));
+ new HashMap<>((int)(649 / 0.75f + 1.0f));
/**
* Creates a UnicodeBlock with the given identifier name.
@@ -3106,6 +3107,108 @@
new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F",
"CJK UNIFIED IDEOGRAPHS EXTENSION F",
"CJKUNIFIEDIDEOGRAPHSEXTENSIONF");
+ /**
+ * Constant for the "Georgian Extended" Unicode
+ * character block.
+ * @since 12
+ */
+ public static final UnicodeBlock GEORGIAN_EXTENDED =
+ new UnicodeBlock("GEORGIAN_EXTENDED",
+ "GEORGIAN EXTENDED",
+ "GEORGIANEXTENDED");
+
+ /**
+ * Constant for the "Hanifi Rohingya" Unicode
+ * character block.
+ * @since 12
+ */
+ public static final UnicodeBlock HANIFI_ROHINGYA =
+ new UnicodeBlock("HANIFI_ROHINGYA",
+ "HANIFI ROHINGYA",
+ "HANIFIROHINGYA");
+
+ /**
+ * Constant for the "Old Sogdian" Unicode
+ * character block.
+ * @since 12
+ */
+ public static final UnicodeBlock OLD_SOGDIAN =
+ new UnicodeBlock("OLD_SOGDIAN",
+ "OLD SOGDIAN",
+ "OLDSOGDIAN");
+
+ /**
+ * Constant for the "Sogdian" Unicode
+ * character block.
+ * @since 12
+ */
+ public static final UnicodeBlock SOGDIAN =
+ new UnicodeBlock("SOGDIAN");
+
+ /**
+ * Constant for the "Dogra" Unicode
+ * character block.
+ * @since 12
+ */
+ public static final UnicodeBlock DOGRA =
+ new UnicodeBlock("DOGRA");
+
+ /**
+ * Constant for the "Gunjala Gondi" Unicode
+ * character block.
+ * @since 12
+ */
+ public static final UnicodeBlock GUNJALA_GONDI =
+ new UnicodeBlock("GUNJALA_GONDI",
+ "GUNJALA GONDI",
+ "GUNJALAGONDI");
+
+ /**
+ * Constant for the "Makasar" Unicode
+ * character block.
+ * @since 12
+ */
+ public static final UnicodeBlock MAKASAR =
+ new UnicodeBlock("MAKASAR");
+
+ /**
+ * Constant for the "Medefaidrin" Unicode
+ * character block.
+ * @since 12
+ */
+ public static final UnicodeBlock MEDEFAIDRIN =
+ new UnicodeBlock("MEDEFAIDRIN");
+
+ /**
+ * Constant for the "Mayan Numerals" Unicode
+ * character block.
+ * @since 12
+ */
+ public static final UnicodeBlock MAYAN_NUMERALS =
+ new UnicodeBlock("MAYAN_NUMERALS",
+ "MAYAN NUMERALS",
+ "MAYANNUMERALS");
+
+ /**
+ * Constant for the "Indic Siyaq Numbers" Unicode
+ * character block.
+ * @since 12
+ */
+ public static final UnicodeBlock INDIC_SIYAQ_NUMBERS =
+ new UnicodeBlock("INDIC_SIYAQ_NUMBERS",
+ "INDIC SIYAQ NUMBERS",
+ "INDICSIYAQNUMBERS");
+
+ /**
+ * Constant for the "Chess Symbols" Unicode
+ * character block.
+ * @since 12
+ */
+ public static final UnicodeBlock CHESS_SYMBOLS =
+ new UnicodeBlock("CHESS_SYMBOLS",
+ "CHESS SYMBOLS",
+ "CHESSSYMBOLS");
+
private static final int blockStarts[] = {
0x0000, // 0000..007F; Basic Latin
@@ -3172,7 +3275,7 @@
0x1C00, // 1C00..1C4F; Lepcha
0x1C50, // 1C50..1C7F; Ol Chiki
0x1C80, // 1C80..1C8F; Cyrillic Extended-C
- 0x1C90, // unassigned
+ 0x1C90, // 1C90..1CBF; Georgian Extended
0x1CC0, // 1CC0..1CCF; Sundanese Supplement
0x1CD0, // 1CD0..1CFF; Vedic Extensions
0x1D00, // 1D00..1D7F; Phonetic Extensions
@@ -3322,9 +3425,13 @@
0x10C00, // 10C00..10C4F; Old Turkic
0x10C50, // unassigned
0x10C80, // 10C80..10CFF; Old Hungarian
- 0x10D00, // unassigned
+ 0x10D00, // 10D00..10D3F; Hanifi Rohingya
+ 0x10D40, // unassigned
0x10E60, // 10E60..10E7F; Rumi Numeral Symbols
0x10E80, // unassigned
+ 0x10F00, // 10F00..10F2F; Old Sogdian
+ 0x10F30, // 10F30..10F6F; Sogdian
+ 0x10F70, // unassigned
0x11000, // 11000..1107F; Brahmi
0x11080, // 11080..110CF; Kaithi
0x110D0, // 110D0..110FF; Sora Sompeng
@@ -3348,6 +3455,8 @@
0x116D0, // unassigned
0x11700, // 11700..1173F; Ahom
0x11740, // unassigned
+ 0x11800, // 11800..1184F; Dogra
+ 0x11850, // unassigned
0x118A0, // 118A0..118FF; Warang Citi
0x11900, // unassigned
0x11A00, // 11A00..11A4F; Zanabazar Square
@@ -3359,7 +3468,10 @@
0x11C70, // 11C70..11CBF; Marchen
0x11CC0, // unassigned
0x11D00, // 11D00..11D5F; Masaram Gondi
- 0x11D60, // unassigned
+ 0x11D60, // 11D60..11DAF; Gunjala Gondi
+ 0x11DB0, // unassigned
+ 0x11EE0, // 11EE0..11EFF; Makasar
+ 0x11F00, // unassigned
0x12000, // 12000..123FF; Cuneiform
0x12400, // 12400..1247F; Cuneiform Numbers and Punctuation
0x12480, // 12480..1254F; Early Dynastic Cuneiform
@@ -3374,6 +3486,8 @@
0x16AD0, // 16AD0..16AFF; Bassa Vah
0x16B00, // 16B00..16B8F; Pahawh Hmong
0x16B90, // unassigned
+ 0x16E40, // 16E40..16E9F; Medefaidrin
+ 0x16EA0, // unassigned
0x16F00, // 16F00..16F9F; Miao
0x16FA0, // unassigned
0x16FE0, // 16FE0..16FFF; Ideographic Symbols and Punctuation
@@ -3392,6 +3506,7 @@
0x1D100, // 1D100..1D1FF; Musical Symbols
0x1D200, // 1D200..1D24F; Ancient Greek Musical Notation
0x1D250, // unassigned
+ 0x1D2E0, // 1D2E0..1D2FF; Mayan Numerals
0x1D300, // 1D300..1D35F; Tai Xuan Jing Symbols
0x1D360, // 1D360..1D37F; Counting Rod Numerals
0x1D380, // unassigned
@@ -3404,6 +3519,8 @@
0x1E8E0, // unassigned
0x1E900, // 1E900..1E95F; Adlam
0x1E960, // unassigned
+ 0x1EC70, // 1EC70..1ECBF; Indic Siyaq Numbers
+ 0x1ECC0, // unassigned
0x1EE00, // 1EE00..1EEFF; Arabic Mathematical Alphabetic Symbols
0x1EF00, // unassigned
0x1F000, // 1F000..1F02F; Mahjong Tiles
@@ -3419,7 +3536,8 @@
0x1F780, // 1F780..1F7FF; Geometric Shapes Extended
0x1F800, // 1F800..1F8FF; Supplemental Arrows-C
0x1F900, // 1F900..1F9FF; Supplemental Symbols and Pictographs
- 0x1FA00, // unassigned
+ 0x1FA00, // 1FA00..1FA6F; Chess Symbols
+ 0x1FA70, // unassigned
0x20000, // 20000..2A6DF; CJK Unified Ideographs Extension B
0x2A6E0, // unassigned
0x2A700, // 2A700..2B73F; CJK Unified Ideographs Extension C
@@ -3502,7 +3620,7 @@
LEPCHA,
OL_CHIKI,
CYRILLIC_EXTENDED_C,
- null,
+ GEORGIAN_EXTENDED,
SUNDANESE_SUPPLEMENT,
VEDIC_EXTENSIONS,
PHONETIC_EXTENSIONS,
@@ -3652,9 +3770,13 @@
OLD_TURKIC,
null,
OLD_HUNGARIAN,
+ HANIFI_ROHINGYA,
null,
RUMI_NUMERAL_SYMBOLS,
null,
+ OLD_SOGDIAN,
+ SOGDIAN,
+ null,
BRAHMI,
KAITHI,
SORA_SOMPENG,
@@ -3678,6 +3800,8 @@
null,
AHOM,
null,
+ DOGRA,
+ null,
WARANG_CITI,
null,
ZANABAZAR_SQUARE,
@@ -3689,6 +3813,9 @@
MARCHEN,
null,
MASARAM_GONDI,
+ GUNJALA_GONDI,
+ null,
+ MAKASAR,
null,
CUNEIFORM,
CUNEIFORM_NUMBERS_AND_PUNCTUATION,
@@ -3704,6 +3831,8 @@
BASSA_VAH,
PAHAWH_HMONG,
null,
+ MEDEFAIDRIN,
+ null,
MIAO,
null,
IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION,
@@ -3722,6 +3851,7 @@
MUSICAL_SYMBOLS,
ANCIENT_GREEK_MUSICAL_NOTATION,
null,
+ MAYAN_NUMERALS,
TAI_XUAN_JING_SYMBOLS,
COUNTING_ROD_NUMERALS,
null,
@@ -3734,6 +3864,8 @@
null,
ADLAM,
null,
+ INDIC_SIYAQ_NUMBERS,
+ null,
ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS,
null,
MAHJONG_TILES,
@@ -3749,6 +3881,7 @@
GEOMETRIC_SHAPES_EXTENDED,
SUPPLEMENTAL_ARROWS_C,
SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS,
+ CHESS_SYMBOLS,
null,
CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B,
null,
@@ -4640,6 +4773,48 @@
ZANABAZAR_SQUARE,
/**
+ * Unicode script "Hanifi Rohingya".
+ * @since 12
+ */
+ HANIFI_ROHINGYA,
+
+ /**
+ * Unicode script "Old Sogdian".
+ * @since 12
+ */
+ OLD_SOGDIAN,
+
+ /**
+ * Unicode script "Sogdian".
+ * @since 12
+ */
+ SOGDIAN,
+
+ /**
+ * Unicode script "Dogra".
+ * @since 12
+ */
+ DOGRA,
+
+ /**
+ * Unicode script "Gunjala Gondi".
+ * @since 12
+ */
+ GUNJALA_GONDI,
+
+ /**
+ * Unicode script "Makasar".
+ * @since 12
+ */
+ MAKASAR,
+
+ /**
+ * Unicode script "Medefaidrin".
+ * @since 12
+ */
+ MEDEFAIDRIN,
+
+ /**
* Unicode script "Unknown".
*/
UNKNOWN;
@@ -4692,10 +4867,7 @@
0x0530, // 0530 ; UNKNOWN
0x0531, // 0531..0556; ARMENIAN
0x0557, // 0557..0558; UNKNOWN
- 0x0559, // 0559..055F; ARMENIAN
- 0x0560, // 0560 ; UNKNOWN
- 0x0561, // 0561..0587; ARMENIAN
- 0x0588, // 0588 ; UNKNOWN
+ 0x0559, // 0559..0588; ARMENIAN
0x0589, // 0589 ; COMMON
0x058A, // 058A ; ARMENIAN
0x058B, // 058B..058C; UNKNOWN
@@ -4704,8 +4876,8 @@
0x0591, // 0591..05C7; HEBREW
0x05C8, // 05C8..05CF; UNKNOWN
0x05D0, // 05D0..05EA; HEBREW
- 0x05EB, // 05EB..05EF; UNKNOWN
- 0x05F0, // 05F0..05F4; HEBREW
+ 0x05EB, // 05EB..05EE; UNKNOWN
+ 0x05EF, // 05EF..05F4; HEBREW
0x05F5, // 05F5..05FF; UNKNOWN
0x0600, // 0600..0604; ARABIC
0x0605, // 0605 ; COMMON
@@ -4735,7 +4907,8 @@
0x0780, // 0780..07B1; THAANA
0x07B2, // 07B2..07BF; UNKNOWN
0x07C0, // 07C0..07FA; NKO
- 0x07FB, // 07FB..07FF; UNKNOWN
+ 0x07FB, // 07FB..07FC; UNKNOWN
+ 0X07FD, // 07FD..07FF; NKO
0x0800, // 0800..082D; SAMARITAN
0x082E, // 082E..082F; UNKNOWN
0x0830, // 0830..083E; SAMARITAN
@@ -4749,8 +4922,8 @@
0x08A0, // 08A0..08B4; ARABIC
0x08B5, // 08B5 ; UNKNOWN
0x08B6, // 08B6..08BD; ARABIC
- 0x08BE, // 08BE..08D3; UNKNOWN
- 0x08D4, // 08D4..08E1; ARABIC
+ 0x08BE, // 08BE..08D2; UNKNOWN
+ 0x08D3, // 08D3..08E1; ARABIC
0x08E2, // 08E2 ; COMMON
0x08E3, // 08E3..08FF; ARABIC
0x0900, // 0900..0950; DEVANAGARI
@@ -4784,8 +4957,8 @@
0x09DE, // 09DE ; UNKNOWN
0x09DF, // 09DF..09E3; BENGALI
0x09E4, // 09E4..09E5; UNKNOWN
- 0x09E6, // 09E6..09FD; BENGALI
- 0x09FE, // 09FE..0A00; UNKNOWN
+ 0x09E6, // 09E6..09FE; BENGALI
+ 0x09FF, // 09FF..0A00; UNKNOWN
0x0A01, // 0A01..0A03; GURMUKHI
0x0A04, // 0A04 ; UNKNOWN
0x0A05, // 0A05..0A0A; GURMUKHI
@@ -4816,8 +4989,8 @@
0x0A5D, // 0A5D ; UNKNOWN
0x0A5E, // 0A5E ; GURMUKHI
0x0A5F, // 0A5F..0A65; UNKNOWN
- 0x0A66, // 0A66..0A75; GURMUKHI
- 0x0A76, // 0A76..0A80; UNKNOWN
+ 0x0A66, // 0A66..0A76; GURMUKHI
+ 0x0A77, // 0A77..0A80; UNKNOWN
0x0A81, // 0A81..0A83; GUJARATI
0x0A84, // 0A84 ; UNKNOWN
0x0A85, // 0A85..0A8D; GUJARATI
@@ -4906,9 +5079,7 @@
0x0BD8, // 0BD8..0BE5; UNKNOWN
0x0BE6, // 0BE6..0BFA; TAMIL
0x0BFB, // 0BFB..0BFF; UNKNOWN
- 0x0C00, // 0C00..0C03; TELUGU
- 0x0C04, // 0C04 ; UNKNOWN
- 0x0C05, // 0C05..0C0C; TELUGU
+ 0x0C00, // 0C00..0C0C; TELUGU
0x0C0D, // 0C0D ; UNKNOWN
0x0C0E, // 0C0E..0C10; TELUGU
0x0C11, // 0C11 ; UNKNOWN
@@ -4931,9 +5102,7 @@
0x0C66, // 0C66..0C6F; TELUGU
0x0C70, // 0C70..0C77; UNKNOWN
0x0C78, // 0C78..0C7F; TELUGU
- 0x0C80, // 0C80..0C83; KANNADA
- 0x0C84, // 0C84 ; UNKNOWN
- 0x0C85, // 0C85..0C8C; KANNADA
+ 0x0C80, // 0C80..0C8C; KANNADA
0x0C8D, // 0C8D ; UNKNOWN
0x0C8E, // 0C8E..0C90; KANNADA
0x0C91, // 0C91 ; UNKNOWN
@@ -5141,8 +5310,8 @@
0x180F, // 180F ; UNKNOWN
0x1810, // 1810..1819; MONGOLIAN
0x181A, // 181A..181F; UNKNOWN
- 0x1820, // 1820..1877; MONGOLIAN
- 0x1878, // 1878..187F; UNKNOWN
+ 0x1820, // 1820..1878; MONGOLIAN
+ 0x1879, // 1879..187F; UNKNOWN
0x1880, // 1880..18AA; MONGOLIAN
0x18AB, // 18AB..18AF; UNKNOWN
0x18B0, // 18B0..18F5; CANADIAN_ABORIGINAL
@@ -5198,7 +5367,10 @@
0x1C4D, // 1C4D..1C4F; LEPCHA
0x1C50, // 1C50..1C7F; OL_CHIKI
0x1C80, // 1C80..1C88; CYRILLIC
- 0x1C89, // 1C89..1CBF; UNKNOWN
+ 0x1C89, // 1C89 ; UNKNOWN
+ 0x1C90, // 1C90..1CBA; GEORGIAN
+ 0x1CBB, // 1CBB..1CBC; UNKNOWN
+ 0x1CBD, // 1CBD..1CBF; GEORGIAN
0x1CC0, // 1CC0..1CC7; SUNDANESE
0x1CC8, // 1CC8..1CCF; UNKNOWN
0x1CD0, // 1CD0..1CD2; INHERITED
@@ -5299,14 +5471,10 @@
0x2B74, // 2B74..2B75; UNKNOWN
0x2B76, // 2B76..2B95; COMMON
0x2B96, // 2B96..2B97; UNKNOWN
- 0x2B98, // 2B98..2BB9; COMMON
- 0x2BBA, // 2BBA..2BBC; UNKNOWN
- 0x2BBD, // 2BBD..2BC8; COMMON
+ 0x2B98, // 2B98..2BC8; COMMON
0x2BC9, // 2BC9 ; UNKNOWN
- 0x2BCA, // 2BCA..2BD2; COMMON
- 0x2BD3, // 2BD3..2BEB; UNKNOWN
- 0x2BEC, // 2BEC..2BEF; COMMON
- 0x2BF0, // 2BF0..2BFF; UNKNOWN
+ 0x2BCA, // 2BCA..2BFE; COMMON
+ 0x2BFF, // 2BFF; UNKNOWN
0x2C00, // 2C00..2C2E; GLAGOLITIC
0x2C2F, // 2C2F ; UNKNOWN
0x2C30, // 2C30..2C5E; GLAGOLITIC
@@ -5345,8 +5513,8 @@
0x2DD8, // 2DD8..2DDE; ETHIOPIC
0x2DDF, // 2DDF ; UNKNOWN
0x2DE0, // 2DE0..2DFF; CYRILLIC
- 0x2E00, // 2E00..2E49; COMMON
- 0x2E50, // 2E50..2E7F; UNKNOWN
+ 0x2E00, // 2E00..2E4E; COMMON
+ 0x2E4F, // 2E4F..2E7F; UNKNOWN
0x2E80, // 2E80..2E99; HAN
0x2E9A, // 2E9A ; UNKNOWN
0x2E9B, // 2E9B..2EF3; HAN
@@ -5377,8 +5545,8 @@
0x30FB, // 30FB..30FC; COMMON
0x30FD, // 30FD..30FF; KATAKANA
0x3100, // 3100..3104; UNKNOWN
- 0x3105, // 3105..312E; BOPOMOFO
- 0x312F, // 312F..3130; UNKNOWN
+ 0x3105, // 3105..312F; BOPOMOFO
+ 0x3130, // 3130; UNKNOWN
0x3131, // 3131..318E; HANGUL
0x318F, // 318F ; UNKNOWN
0x3190, // 3190..319F; COMMON
@@ -5399,8 +5567,8 @@
0x3400, // 3400..4DB5; HAN
0x4DB6, // 4DB6..4DBF; UNKNOWN
0x4DC0, // 4DC0..4DFF; COMMON
- 0x4E00, // 4E00..9FEA; HAN
- 0x9FEB, // 9FEB..9FFF; UNKNOWN
+ 0x4E00, // 4E00..9FEF; HAN
+ 0x9FF0, // 9FF0..9FFF; UNKNOWN
0xA000, // A000..A48C; YI
0xA48D, // A48D..A48F; UNKNOWN
0xA490, // A490..A4C6; YI
@@ -5414,10 +5582,8 @@
0xA700, // A700..A721; COMMON
0xA722, // A722..A787; LATIN
0xA788, // A788..A78A; COMMON
- 0xA78B, // A78B..A7AE; LATIN
- 0xA7AF, // A7AF ; UNKNOWN
- 0xA7B0, // A7B0..A7B7; LATIN
- 0xA7B8, // A7B8..A7F6; UNKNOWN
+ 0xA78B, // A78B..A7B9; LATIN
+ 0xA7C0, // A7C0..A7F6; UNKNOWN
0xA7F7, // A7F7..A7FF; LATIN
0xA800, // A800..A82B; SYLOTI_NAGRI
0xA82C, // A82C..A82F; UNKNOWN
@@ -5429,8 +5595,7 @@
0xA8C6, // A8C6..A8CD; UNKNOWN
0xA8CE, // A8CE..A8D9; SAURASHTRA
0xA8DA, // A8DA..A8DF; UNKNOWN
- 0xA8E0, // A8E0..A8FD; DEVANAGARI
- 0xA8FE, // A8FE..A8FF; UNKNOWN
+ 0xA8E0, // A8E0..A8FF; DEVANAGARI
0xA900, // A900..A92D; KAYAH_LI
0xA92E, // A92E ; COMMON
0xA92F, // A92F ; KAYAH_LI
@@ -5674,12 +5839,12 @@
0x10A14, // 10A14 ; UNKNOWN
0x10A15, // 10A15..10A17; KHAROSHTHI
0x10A18, // 10A18 ; UNKNOWN
- 0x10A19, // 10A19..10A33; KHAROSHTHI
- 0x10A34, // 10A34..10A37; UNKNOWN
+ 0x10A19, // 10A19..10A35; KHAROSHTHI
+ 0x10A36, // 10A36..10A37; UNKNOWN
0x10A38, // 10A38..10A3A; KHAROSHTHI
0x10A3B, // 10A3B..10A3E; UNKNOWN
- 0x10A3F, // 10A3F..10A47; KHAROSHTHI
- 0x10A48, // 10A48..10A4F; UNKNOWN
+ 0x10A3F, // 10A3F..10A48; KHAROSHTHI
+ 0x10A49, // 10A49..10A4F; UNKNOWN
0x10A50, // 10A50..10A58; KHAROSHTHI
0x10A59, // 10A59..10A5F; UNKNOWN
0x10A60, // 10A60..10A7F; OLD_SOUTH_ARABIAN
@@ -5711,24 +5876,33 @@
0x10CC0, // 10CC0..10CF2; OLD_HUNGARIAN
0x10CF3, // 10CF3..10CF9; UNKNOWN
0x10CFA, // 10CFA..10CFF; OLD_HUNGARIAN
- 0x10D00, // 10D00..10E5F; UNKNOWN
+ 0x10D00, // 10D00..10D27; HANIFI ROHINGYA
+ 0x10D28, // 10D28..10D29; UNKNOWN
+ 0x10D30, // 10D30..10D39; HANIFI ROHINGYA
+ 0x10D3A, // 10D3A..10E5F; UNKNOWN
0x10E60, // 10E60..10E7E; ARABIC
- 0x10E7F, // 10E7F..10FFF; UNKNOWN
+ 0x10E7F, // 10E7F..10EFF; UNKNOWN
+ 0x10F00, // 10F00..10F27; OLD SOGDIAN
+ 0x10F28, // 10F28..10F2F; UNKNOWN
+ 0x10F30, // 10F30..10F59; SOGDIAN
+ 0x10F5A, // 10F5A..10FFF; UNKNOWN
0x11000, // 11000..1104D; BRAHMI
0x1104E, // 1104E..11051; UNKNOWN
0x11052, // 11052..1106F; BRAHMI
0x11070, // 11070..1107E; UNKNOWN
0x1107F, // 1107F ; BRAHMI
0x11080, // 11080..110C1; KAITHI
- 0x110C2, // 110C2..110CF; UNKNOWN
+ 0x110C2, // 110C2..110CC; UNKNOWN
+ 0x110CD, // 110CD ; KAITHI
+ 0x110CE, // 110CE..110CF; UNKNOWN
0x110D0, // 110D0..110E8; SORA_SOMPENG
0x110E9, // 110E9..110EF; UNKNOWN
0x110F0, // 110F0..110F9; SORA_SOMPENG
0x110FA, // 110FA..110FF; UNKNOWN
0x11100, // 11100..11134; CHAKMA
0x11135, // 11135 ; UNKNOWN
- 0x11136, // 11136..11143; CHAKMA
- 0x11144, // 11144..1114F; UNKNOWN
+ 0x11136, // 11136..11146; CHAKMA
+ 0x11147, // 11147..1114F; UNKNOWN
0x11150, // 11150..11176; MAHAJANI
0x11177, // 11177..1117F; UNKNOWN
0x11180, // 11180..111CD; SHARADA
@@ -5768,7 +5942,8 @@
0x11332, // 11332..11333; GRANTHA
0x11334, // 11334 ; UNKNOWN
0x11335, // 11335..11339; GRANTHA
- 0x1133A, // 1133A..1133B; UNKNOWN
+ 0x1133A, // 1133A ; UNKNOWN
+ 0x1133B, // 1133B ; INHERITED
0x1133C, // 1133C..11344; GRANTHA
0x11345, // 11345..11346; UNKNOWN
0x11347, // 11347..11348; GRANTHA
@@ -5789,8 +5964,8 @@
0x1145A, // 1145A ; UNKNOWN
0x1145B, // 1145B ; NEWA
0x1145C, // 1145C ; UNKNOWN
- 0x1145D, // 1145D ; NEWA
- 0x1145E, // 1145E..1147F; UNKNOWN
+ 0x1145D, // 1145D..1145E; NEWA
+ 0x1145F, // 1145F..1147F; UNKNOWN
0x11480, // 11480..114C7; TIRHUTA
0x114C8, // 114C8..114CF; UNKNOWN
0x114D0, // 114D0..114D9; TIRHUTA
@@ -5809,12 +5984,14 @@
0x116B8, // 116B8..116BF; UNKNOWN
0x116C0, // 116C0..116C9; TAKRI
0x116CA, // 116CA..116FF; UNKNOWN
- 0x11700, // 11700..11719; AHOM
- 0x1171A, // 1171A..1171C; UNKNOWN
+ 0x11700, // 11700..1171A; AHOM
+ 0x1171B, // 1171B..1171C; UNKNOWN
0x1171D, // 1171D..1172B; AHOM
0x1172C, // 1172C..1172F; UNKNOWN
0x11730, // 11730..1173F; AHOM
- 0x11740, // 11740..1189F; UNKNOWN
+ 0x11740, // 11740..117FF; UNKNOWN
+ 0x11800, // 11800..1183B; DOGRA
+ 0x1183C, // 1183C..1189F; UNKNOWN
0x118A0, // 118A0..118F2; WARANG_CITI
0x118F3, // 118F3..118FE; UNKNOWN
0x118FF, // 118FF ; WARANG_CITI
@@ -5823,9 +6000,7 @@
0X11A48, // 11A48..11A4F; UNKNOWN
0x11A50, // 11A50..11A83; SOYOMBO
0x11A84, // 11A84..11A85; UNKNOWN
- 0x11A86, // 11A86..11A9C; SOYOMBO
- 0x11A9D, // 11A9D ; UNKNOWN
- 0x11A9E, // 11A9E..11AA2; SOYOMBO
+ 0x11A86, // 11A86..11AA2; SOYOMBO
0x11AA3, // 11AA3..11ABF; UNKNOWN
0x11AC0, // 11AC0..11AF8; PAU_CIN_HAU
0x11AF9, // 11AF9..11BFF; UNKNOWN
@@ -5856,7 +6031,19 @@
0x11D3F, // 11D3F..11D47; MASARAM_GONDI
0x11D48, // 11D48..11D49, UNKNOWN
0x11D50, // 11D50..11D59; MASARAM_GONDI
- 0x11D5A, // 11D5A..1AFFF; UNKNOWN
+ 0x11D5A, // 11D5A..11D5F; UNKNOWN
+ 0x11D60, // 11D60..11D68; GUNJALA GONDI
+ 0x11D69, // ; UNKNOWN
+ 0x11D6A, // 11D6A..11D8E; GUNJALA GONDI
+ 0x11D8F, // ; UNKNOWN
+ 0x11D90, // 11D90..11D91; GUNJALA GONDI
+ 0x11D92, // ; UNKNOWN
+ 0x11D93, // 11D93..11D98; GUNJALA GONDI
+ 0x11D99, // 11D99 ; UNKNOWN
+ 0x11DA0, // 11DA0..11DA9; GUNJALA GONDI
+ 0x11DAA, // 11DAA..11DFF; UNKNOWN
+ 0x11EE0, // 11EE0..11EF8; MAKASAR
+ 0x11EF9, // 11EF9..11FFF; UNKNOWN
0x12000, // 12000..12399; CUNEIFORM
0x1239A, // 1239A..123FF; UNKNOWN
0x12400, // 12400..1246E; CUNEIFORM
@@ -5890,7 +6077,9 @@
0x16B63, // 16B63..16B77; PAHAWH_HMONG
0x16B78, // 16B78..16B7C; UNKNOWN
0x16B7D, // 16B7D..16B8F; PAHAWH_HMONG
- 0x16B90, // 16B90..16EFF; UNKNOWN
+ 0x16B90, // 16B90..16E3F; UNKNOWN
+ 0x16E40, // 16E40..16E9A; MEDEFAIDRIN
+ 0x16E9B, // 16E9B..16EFF; UNKNOWN
0x16F00, // 16F00..16F44; MIAO
0x16F45, // 16F45..16F4F; UNKNOWN
0x16F50, // 16F50..16F7E; MIAO
@@ -5900,8 +6089,8 @@
0x16FE0, // 16FE0 ; TANGUT
0x16FE1, // 16FE1 ; NUSHU
0x16FE2, // 16FE2..16FFF; UNKNOWN
- 0x17000, // 17000..187EC; TANGUT
- 0x187ED, // 187ED..187FF; UNKNOWN
+ 0x17000, // 17000..187F1; TANGUT
+ 0x187F2, // 187F2..187FF; UNKNOWN
0x18800, // 18800..18AF2; TANGUT
0x18AF3, // 18AF3..1AFFF; UNKNOWN
0x1B000, // 1B000 ; KATAKANA
@@ -5935,11 +6124,13 @@
0x1D1AE, // 1D1AE..1D1E8; COMMON
0x1D1E9, // 1D1E9..1D1FF; UNKNOWN
0x1D200, // 1D200..1D245; GREEK
- 0x1D246, // 1D246..1D2FF; UNKNOWN
+ 0x1D246, // 1D246..1D2DF; UNKNOWN
+ 0x1D2E0, // 1D2E0..1D2F3; COMMON
+ 0x1D2F4, // 1D2F4..1D2FF; UNKNOWN
0x1D300, // 1D300..1D356; COMMON
0x1D357, // 1D357..1D35F; UNKNOWN
- 0x1D360, // 1D360..1D371; COMMON
- 0x1D372, // 1D372..1D3FF; UNKNOWN
+ 0x1D360, // 1D360..1D378; COMMON
+ 0x1D379, // 1D379..1D3FF; UNKNOWN
0x1D400, // 1D400..1D454; COMMON
0x1D455, // 1D455 ; UNKNOWN
0x1D456, // 1D456..1D49C; COMMON
@@ -6006,7 +6197,9 @@
0x1E950, // 1E950..1E959; ADLAM
0x1E95A, // 1E95A..1E95D; UNKNOWN
0x1E95E, // 1E95E..1E95F; ADLAM
- 0x1E960, // 1E960..1EDFF; UNKNOWN
+ 0x1E960, // 1E960..1EC70; UNKNOWN
+ 0x1EC71, // 1EC71..1ECB4; COMMON
+ 0x1ECB5, // 1ECB5..1EDFF; UNKNOWN
0x1EE00, // 1EE00..1EE03; ARABIC
0x1EE04, // 1EE04 ; UNKNOWN
0x1EE05, // 1EE05..1EE1F; ARABIC
@@ -6089,9 +6282,7 @@
0x1F0F6, // 1F0F6..1F0FF; UNKNOWN
0x1F100, // 1F100..1F10C; COMMON
0x1F10D, // 1F10D..1F10F; UNKNOWN
- 0x1F110, // 1F110..1F12E; COMMON
- 0x1F12F, // 1F12F ; UNKNOWN
- 0x1F130, // 1F130..1F16B; COMMON
+ 0x1F110, // 1F110..1F16B; COMMON
0x1F16C, // 1F16C..1F16F; UNKNOWN
0x1F170, // 1F170..1F1AC; COMMON
0x1F1AD, // 1F1AD..1F1E5; UNKNOWN
@@ -6111,12 +6302,12 @@
0x1F6D5, // 1F6D5..1F6DF; UNKNOWN
0x1F6E0, // 1F6E0..1F6EC; COMMON
0x1F6ED, // 1F6ED..1F6EF; UNKNOWN
- 0x1F6F0, // 1F6F0..1F6F8; COMMON
- 0x1F6F9, // 1F6F9..1F6FF; UNKNOWN
+ 0x1F6F0, // 1F6F0..1F6F9; COMMON
+ 0x1F6FA, // 1F6FA..1F6FF; UNKNOWN
0x1F700, // 1F700..1F773; COMMON
0x1F774, // 1F774..1F77F; UNKNOWN
- 0x1F780, // 1F780..1F7D4; COMMON
- 0x1F7D5, // 1F7D5..1F7FF; UNKNOWN
+ 0x1F780, // 1F780..1F7D8; COMMON
+ 0x1F7D9, // 1F7D9..1F7FF; UNKNOWN
0x1F800, // 1F800..1F80B; COMMON
0x1F80C, // 1F80C..1F80F; UNKNOWN
0x1F810, // 1F810..1F847; COMMON
@@ -6131,16 +6322,22 @@
0x1F90C, // 1F90C..1F90F; UNKNOWN
0x1F910, // 1F910..1F93E; COMMON
0x1F93F, // 1F93F ; UNKNOWN
- 0x1F940, // 1F940..1F94C; COMMON
- 0x1F94D, // 1F94D..1F94F; UNKNOWN
- 0x1F950, // 1F950..1F96B; COMMON
- 0x1F96C, // 1F96C..1F97F; UNKNOWN
- 0x1F980, // 1F980..1F997; COMMON
- 0x1F998, // 1F998..1F9BF; UNKNOWN
- 0x1F9C0, // 1F9C0 ; COMMON
- 0x1F9C1, // 1F9C1..1F9CF; UNKNOWN
- 0x1F9D0, // 1F9D0..1F9E6; COMMON
- 0x1F9E7, // 1F9E7..1FFFF; UNKNOWN
+ 0x1F940, // 1F940..1F970; COMMON
+ 0x1F971, // 1F971..1F972; UNKNOWN
+ 0x1F973, // 1F973..1F976; COMMON
+ 0x1F977, // 1F977..1F979; UNKNOWN
+ 0x1F97A, // 1F97A ; COMMON
+ 0x1F97B, // 1F97B ; UNKNOWN
+ 0x1F97C, // 1F97C..1F9A2; COMMON
+ 0x1F9A3, // 1F9A3..1F9AF; UNKNOWN
+ 0x1F9B0, // 1F9B0..1F9B9; COMMON
+ 0x1F9BA, // 1F9BA..1F9BF; UNKNOWN
+ 0x1F9C0, // 1F9C0..1F9C2; COMMON
+ 0x1F9C3, // 1F9C3..1F9CF; UNKNOWN
+ 0x1F9D0, // 1F9D0..1F9FF; COMMON
+ 0x1FA00, // 1FA00..1FA5F; UNKNOWN
+ 0x1FA60, // 1FA60..1FA6D; COMMON
+ 0x1FA6E, // 1FA6E..1FFFF; UNKNOWN
0x20000, // 20000..2A6D6; HAN
0x2A6D7, // 2A6D7..2A6FF; UNKNOWN
0x2A700, // 2A700..2B734; HAN
@@ -6209,10 +6406,7 @@
UNKNOWN, // 0530
ARMENIAN, // 0531..0556
UNKNOWN, // 0557..0558
- ARMENIAN, // 0559..055F
- UNKNOWN, // 0560
- ARMENIAN, // 0561..0587
- UNKNOWN, // 0588
+ ARMENIAN, // 0559..0588
COMMON, // 0589
ARMENIAN, // 058A
UNKNOWN, // 058B..058C
@@ -6221,8 +6415,8 @@
HEBREW, // 0591..05C7
UNKNOWN, // 05C8..05CF
HEBREW, // 05D0..05EA
- UNKNOWN, // 05EB..05EF
- HEBREW, // 05F0..05F4
+ UNKNOWN, // 05EB..05EE
+ HEBREW, // 05EF..05F4
UNKNOWN, // 05F5..05FF
ARABIC, // 0600..0604
COMMON, // 0605
@@ -6252,7 +6446,8 @@
THAANA, // 0780..07B1
UNKNOWN, // 07B2..07BF
NKO, // 07C0..07FA
- UNKNOWN, // 07FB..07FF
+ UNKNOWN, // 07FB..07FC
+ NKO, // 07FD..07FF
SAMARITAN, // 0800..082D
UNKNOWN, // 082E..082F
SAMARITAN, // 0830..083E
@@ -6266,8 +6461,8 @@
ARABIC, // 08A0..08B4
UNKNOWN, // 08B5
ARABIC, // 08B6..08BD
- UNKNOWN, // 08BE..08D3
- ARABIC, // 08D4..08E1
+ UNKNOWN, // 08BE..08D2
+ ARABIC, // 08D3..08E1
COMMON, // 08E2
ARABIC, // 08E3..08FF
DEVANAGARI, // 0900..0950
@@ -6301,8 +6496,8 @@
UNKNOWN, // 09DE
BENGALI, // 09DF..09E3
UNKNOWN, // 09E4..09E5
- BENGALI, // 09E6..09FD
- UNKNOWN, // 09FE..0A00
+ BENGALI, // 09E6..09FE
+ UNKNOWN, // 09FF..0A00
GURMUKHI, // 0A01..0A03
UNKNOWN, // 0A04
GURMUKHI, // 0A05..0A0A
@@ -6333,8 +6528,8 @@
UNKNOWN, // 0A5D
GURMUKHI, // 0A5E
UNKNOWN, // 0A5F..0A65
- GURMUKHI, // 0A66..0A75
- UNKNOWN, // 0A76..0A80
+ GURMUKHI, // 0A66..0A76
+ UNKNOWN, // 0A77..0A80
GUJARATI, // 0A81..0A83
UNKNOWN, // 0A84
GUJARATI, // 0A85..0A8D
@@ -6423,9 +6618,7 @@
UNKNOWN, // 0BD8..0BE5
TAMIL, // 0BE6..0BFA
UNKNOWN, // 0BFB..0BFF
- TELUGU, // 0C00..0C03
- UNKNOWN, // 0C04
- TELUGU, // 0C05..0C0C
+ TELUGU, // 0C00..0C0C
UNKNOWN, // 0C0D
TELUGU, // 0C0E..0C10
UNKNOWN, // 0C11
@@ -6448,9 +6641,7 @@
TELUGU, // 0C66..0C6F
UNKNOWN, // 0C70..0C77
TELUGU, // 0C78..0C7F
- KANNADA, // 0C80..0C83
- UNKNOWN, // 0C84
- KANNADA, // 0C85..0C8C
+ KANNADA, // 0C80..0C8C
UNKNOWN, // 0C8D
KANNADA, // 0C8E..0C90
UNKNOWN, // 0C91
@@ -6658,8 +6849,8 @@
UNKNOWN, // 180F
MONGOLIAN, // 1810..1819
UNKNOWN, // 181A..181F
- MONGOLIAN, // 1820..1877
- UNKNOWN, // 1878..187F
+ MONGOLIAN, // 1820..1878
+ UNKNOWN, // 1879..187F
MONGOLIAN, // 1880..18AA
UNKNOWN, // 18AB..18AF
CANADIAN_ABORIGINAL, // 18B0..18F5
@@ -6715,7 +6906,10 @@
LEPCHA, // 1C4D..1C4F
OL_CHIKI, // 1C50..1C7F
CYRILLIC, // 1C80..1C88
- UNKNOWN, // 1C89..1CBF
+ UNKNOWN, // 1C89
+ GEORGIAN, // 1C90..1CBA
+ UNKNOWN, // 1CBB..1CBC
+ GEORGIAN, // 1CBD..1CBF
SUNDANESE, // 1CC0..1CC7
UNKNOWN, // 1CC8..1CCF
INHERITED, // 1CD0..1CD2
@@ -6816,14 +7010,10 @@
UNKNOWN, // 2B74..2B75
COMMON, // 2B76..2B95
UNKNOWN, // 2B96..2B97
- COMMON, // 2B98..2BB9
- UNKNOWN, // 2BBA..2BBC
- COMMON, // 2BBD..2BC8
+ COMMON, // 2B98..2BC8
UNKNOWN, // 2BC9
- COMMON, // 2BCA..2BD2
- UNKNOWN, // 2BD3..2BEB
- COMMON, // 2BEC..2BEF
- UNKNOWN, // 2BF0..2BFF
+ COMMON, // 2BCA..2BFE
+ UNKNOWN, // 0x2BFF
GLAGOLITIC, // 2C00..2C2E
UNKNOWN, // 2C2F
GLAGOLITIC, // 2C30..2C5E
@@ -6862,8 +7052,8 @@
ETHIOPIC, // 2DD8..2DDE
UNKNOWN, // 2DDF
CYRILLIC, // 2DE0..2DFF
- COMMON, // 2E00..2E49
- UNKNOWN, // 2E50..2E7F
+ COMMON, // 2E00..2E4E
+ UNKNOWN, // 2E4F..2E7F
HAN, // 2E80..2E99
UNKNOWN, // 2E9A
HAN, // 2E9B..2EF3
@@ -6894,8 +7084,8 @@
COMMON, // 30FB..30FC
KATAKANA, // 30FD..30FF
UNKNOWN, // 3100..3104
- BOPOMOFO, // 3105..312E
- UNKNOWN, // 312F..3130
+ BOPOMOFO, // 3105..312F
+ UNKNOWN, // 3130
HANGUL, // 3131..318E
UNKNOWN, // 318F
COMMON, // 3190..319F
@@ -6916,8 +7106,8 @@
HAN, // 3400..4DB5
UNKNOWN, // 4DB6..4DBF
COMMON, // 4DC0..4DFF
- HAN, // 4E00..9FEA
- UNKNOWN, // 9FEB..9FFF
+ HAN, // 4E00..9FEF
+ UNKNOWN, // 9FF0..9FFF
YI, // A000..A48C
UNKNOWN, // A48D..A48F
YI, // A490..A4C6
@@ -6931,10 +7121,8 @@
COMMON, // A700..A721
LATIN, // A722..A787
COMMON, // A788..A78A
- LATIN, // A78B..A7AE
- UNKNOWN, // A7AF
- LATIN, // A7B0..A7B7
- UNKNOWN, // A7B8..A7F6
+ LATIN, // A78B..A7B9
+ UNKNOWN, // A7C0..A7F6
LATIN, // A7F7..A7FF
SYLOTI_NAGRI, // A800..A82B
UNKNOWN, // A82C..A82F
@@ -6946,8 +7134,7 @@
UNKNOWN, // A8C6..A8CD
SAURASHTRA, // A8CE..A8D9
UNKNOWN, // A8DA..A8DF
- DEVANAGARI, // A8E0..A8FD
- UNKNOWN, // A8FE..A8FF
+ DEVANAGARI, // A8E0..A8FF
KAYAH_LI, // A900..A92D
COMMON, // A92E
KAYAH_LI, // A92F
@@ -7191,12 +7378,12 @@
UNKNOWN, // 10A14
KHAROSHTHI, // 10A15..10A17
UNKNOWN, // 10A18
- KHAROSHTHI, // 10A19..10A33
- UNKNOWN, // 10A34..10A37
+ KHAROSHTHI, // 10A19..10A35
+ UNKNOWN, // 10A36..10A37
KHAROSHTHI, // 10A38..10A3A
UNKNOWN, // 10A3B..10A3E
- KHAROSHTHI, // 10A3F..10A47
- UNKNOWN, // 10A48..10A4F
+ KHAROSHTHI, // 10A3F..10A48
+ UNKNOWN, // 10A49..10A4F
KHAROSHTHI, // 10A50..10A58
UNKNOWN, // 10A59..10A5F
OLD_SOUTH_ARABIAN, // 10A60..10A7F
@@ -7228,24 +7415,33 @@
OLD_HUNGARIAN, // 10CC0..10CF2
UNKNOWN, // 10CF3..10CF9
OLD_HUNGARIAN, // 10CFA..10CFF
- UNKNOWN, // 10D00..10E5F
+ HANIFI_ROHINGYA, // 10D00..10D27
+ UNKNOWN, // 10D28..10D29
+ HANIFI_ROHINGYA, // 10D30..10D39
+ UNKNOWN, // 10D3A..10E5F
ARABIC, // 10E60..10E7E
- UNKNOWN, // 10E7F..10FFF
+ UNKNOWN, // 10E7F..10EFF
+ OLD_SOGDIAN, // 10F00..10F27
+ UNKNOWN, // 10F28..10F2F
+ SOGDIAN, // 10F30..10F59
+ UNKNOWN, // 10F5A..10FFF
BRAHMI, // 11000..1104D
UNKNOWN, // 1104E..11051
BRAHMI, // 11052..1106F
UNKNOWN, // 11070..1107E
BRAHMI, // 1107F
KAITHI, // 11080..110C1
- UNKNOWN, // 110C2..110CF
+ UNKNOWN, // 110C2..110CC
+ KAITHI, // 110CD
+ UNKNOWN, // 110CE..110CF
SORA_SOMPENG, // 110D0..110E8
UNKNOWN, // 110E9..110EF
SORA_SOMPENG, // 110F0..110F9
UNKNOWN, // 110FA..110FF
CHAKMA, // 11100..11134
UNKNOWN, // 11135
- CHAKMA, // 11136..11143
- UNKNOWN, // 11144..1114F
+ CHAKMA, // 11136..11146
+ UNKNOWN, // 11147..1114F
MAHAJANI, // 11150..11176
UNKNOWN, // 11177..1117F
SHARADA, // 11180..111CD
@@ -7285,7 +7481,8 @@
GRANTHA, // 11332..11333
UNKNOWN, // 11334
GRANTHA, // 11335..11339
- UNKNOWN, // 1133A..1133B
+ UNKNOWN, // 1133A
+ INHERITED, // 1133B
GRANTHA, // 1133C..11344
UNKNOWN, // 11345..11346
GRANTHA, // 11347..11348
@@ -7306,8 +7503,8 @@
UNKNOWN, // 1145A
NEWA, // 1145B
UNKNOWN, // 1145C
- NEWA, // 1145D
- UNKNOWN, // 1145E..1147F
+ NEWA, // 1145D..1145E
+ UNKNOWN, // 1145F..1147F
TIRHUTA, // 11480..114C7
UNKNOWN, // 114C8..114CF
TIRHUTA, // 114D0..114D9
@@ -7326,12 +7523,14 @@
UNKNOWN, // 116B8..116BF
TAKRI, // 116C0..116C9
UNKNOWN, // 116CA..116FF
- AHOM, // 11700..11719
- UNKNOWN, // 1171A..1171C
+ AHOM, // 11700..1171A
+ UNKNOWN, // 1171B..1171C
AHOM, // 1171D..1172B
UNKNOWN, // 1172C..1172F
AHOM, // 11730..1173F
- UNKNOWN, // 11740..1189F
+ UNKNOWN, // 11740..117FF
+ DOGRA, // 11800..1183B
+ UNKNOWN, // 1183C..1189F
WARANG_CITI, // 118A0..118F2
UNKNOWN, // 118F3..118FE
WARANG_CITI, // 118FF
@@ -7340,9 +7539,7 @@
UNKNOWN, // 11A48..11A4F
SOYOMBO, // 11A50..11A83
UNKNOWN, // 11A84..11A85
- SOYOMBO, // 11A86..11A9C
- UNKNOWN, // 11A9D
- SOYOMBO, // 11A9E..11AA2
+ SOYOMBO, // 11A86..11AA2
UNKNOWN, // 11AA3..11ABF
PAU_CIN_HAU, // 11AC0..11AF8
UNKNOWN, // 11AF9..11BFF
@@ -7373,7 +7570,19 @@
MASARAM_GONDI, // 11D3F..11D47
UNKNOWN, // 11D48..11D49
MASARAM_GONDI, // 11D50..11D59
- UNKNOWN, // 11D5A..1AFFF;
+ UNKNOWN, // 11D5A..11D5F
+ GUNJALA_GONDI, // 11D60..11D68
+ UNKNOWN, // 11D69
+ GUNJALA_GONDI, // 11D6A..11D8E
+ UNKNOWN, // 11D8F
+ GUNJALA_GONDI, // 11D90..11D91
+ UNKNOWN, // 11D92
+ GUNJALA_GONDI, // 11D93..11D98
+ UNKNOWN, // 11D99
+ GUNJALA_GONDI, // 11DA0..11DA9
+ UNKNOWN, // 11DAA..11DFF
+ MAKASAR, // 11EE0..11EF8
+ UNKNOWN, // 11EF9..11FFF
CUNEIFORM, // 12000..12399
UNKNOWN, // 1239A..123FF
CUNEIFORM, // 12400..1246E
@@ -7407,7 +7616,9 @@
PAHAWH_HMONG, // 16B63..16B77
UNKNOWN, // 16B78..16B7C
PAHAWH_HMONG, // 16B7D..16B8F
- UNKNOWN, // 16B90..16EFF
+ UNKNOWN, // 16B90..16E3F
+ MEDEFAIDRIN, // 16E40..16E9A
+ UNKNOWN, // 16E9B..16EFF
MIAO, // 16F00..16F44
UNKNOWN, // 16F45..16F4F
MIAO, // 16F50..16F7E
@@ -7417,8 +7628,8 @@
TANGUT, // 16FE0
NUSHU, // 16FE1
UNKNOWN, // 16FE2..16FFF
- TANGUT, // 17000..187EC
- UNKNOWN, // 187ED..187FF
+ TANGUT, // 17000..187F1
+ UNKNOWN, // 187F2..187FF
TANGUT, // 18800..18AF2
UNKNOWN, // 18AF3..1AFFF
KATAKANA, // 1B000
@@ -7452,11 +7663,13 @@
COMMON, // 1D1AE..1D1E8
UNKNOWN, // 1D1E9..1D1FF
GREEK, // 1D200..1D245
- UNKNOWN, // 1D246..1D2FF
+ UNKNOWN, // 1D246..1D2DF
+ COMMON, // 1D2E0..1D2F3
+ UNKNOWN, // 1D2F4..1D2FF
COMMON, // 1D300..1D356
UNKNOWN, // 1D357..1D35F
- COMMON, // 1D360..1D371
- UNKNOWN, // 1D372..1D3FF
+ COMMON, // 1D360..1D378
+ UNKNOWN, // 1D379..1D3FF
COMMON, // 1D400..1D454
UNKNOWN, // 1D455
COMMON, // 1D456..1D49C
@@ -7523,7 +7736,9 @@
ADLAM, // 1E950..1E959
UNKNOWN, // 1E95A..1E95D
ADLAM, // 1E95E..1E95F
- UNKNOWN, // 1E960..1EDFF
+ UNKNOWN, // 1E960..1EC70
+ COMMON, // 1EC71..1ECB4
+ UNKNOWN, // 1ECB5..1EDFF
ARABIC, // 1EE00..1EE03
UNKNOWN, // 1EE04
ARABIC, // 1EE05..1EE1F
@@ -7606,9 +7821,7 @@
UNKNOWN, // 1F0F6..1F0FF
COMMON, // 1F100..1F10C
UNKNOWN, // 1F10D..1F10F
- COMMON, // 1F110..1F12E
- UNKNOWN, // 1F12F
- COMMON, // 1F130..1F16B
+ COMMON, // 1F110..1F16B
UNKNOWN, // 1F16C..1F16F
COMMON, // 1F170..1F1AC
UNKNOWN, // 1F1AD..1F1E5
@@ -7628,12 +7841,12 @@
UNKNOWN, // 1F6D5..1F6DF
COMMON, // 1F6E0..1F6EC
UNKNOWN, // 1F6ED..1F6EF
- COMMON, // 1F6F0..1F6F8
- UNKNOWN, // 1F6F9..1F6FF
+ COMMON, // 1F6F0..1F6F9
+ UNKNOWN, // 1F6FA..1F6FF
COMMON, // 1F700..1F773
UNKNOWN, // 1F774..1F77F
- COMMON, // 1F780..1F7D4
- UNKNOWN, // 1F7D5..1F7FF
+ COMMON, // 1F780..1F7D8
+ UNKNOWN, // 1F7D9..1F7FF
COMMON, // 1F800..1F80B
UNKNOWN, // 1F80C..1F80F
COMMON, // 1F810..1F847
@@ -7648,16 +7861,22 @@
UNKNOWN, // 1F90C..1F90F
COMMON, // 1F910..1F93E
UNKNOWN, // 1F93F
- COMMON, // 1F940..1F94C
- UNKNOWN, // 1F94D..1F94F
- COMMON, // 1F950..1F96B
- UNKNOWN, // 1F96C..1F97F
- COMMON, // 1F980..1F997
- UNKNOWN, // 1F998..1F9BF
- COMMON, // 1F9C0
- UNKNOWN, // 1F9C1..1F9CF
- COMMON, // 1F9D0..1F9E6
- UNKNOWN, // 1F9E7..1FFFF
+ COMMON, // 1F940..1F970
+ UNKNOWN, // 1F971..1F972
+ COMMON, // 1F973..1F976
+ UNKNOWN, // 1F977..1F979
+ COMMON, // 1F97A
+ UNKNOWN, // 1F97B
+ COMMON, // 1F97C..1F9A2
+ UNKNOWN, // 1F9A3..1F9AF
+ COMMON, // 1F9B0..1F9B9
+ UNKNOWN, // 1F9BA..1F9BF
+ COMMON, // 1F9C0..1F9C2
+ UNKNOWN, // 1F9C3..1F9CF
+ COMMON, // 1F9D0..1F9FF
+ UNKNOWN, // 1FA00..1FA5F
+ COMMON, // 1FA60..1FA6D
+ UNKNOWN, // 1FA6E..1FFFF
HAN, // 20000..2A6D6
UNKNOWN, // 2A6D7..2A6FF
HAN, // 2A700..2B734
@@ -7680,7 +7899,7 @@
private static HashMap<String, Character.UnicodeScript> aliases;
static {
- aliases = new HashMap<>((int)(142 / 0.75f + 1.0f));
+ aliases = new HashMap<>((int)(149 / 0.75f + 1.0f));
aliases.put("ADLM", ADLAM);
aliases.put("AGHB", CAUCASIAN_ALBANIAN);
aliases.put("AHOM", AHOM);
@@ -7708,6 +7927,7 @@
aliases.put("CPRT", CYPRIOT);
aliases.put("CYRL", CYRILLIC);
aliases.put("DEVA", DEVANAGARI);
+ aliases.put("DOGR", DOGRA);
aliases.put("DSRT", DESERET);
aliases.put("DUPL", DUPLOYAN);
aliases.put("EGYP", EGYPTIAN_HIEROGLYPHS);
@@ -7717,6 +7937,7 @@
aliases.put("GLAG", GLAGOLITIC);
aliases.put("GONM", MASARAM_GONDI);
aliases.put("GOTH", GOTHIC);
+ aliases.put("GONG", GUNJALA_GONDI);
aliases.put("GRAN", GRANTHA);
aliases.put("GREK", GREEK);
aliases.put("GUJR", GUJARATI);
@@ -7752,9 +7973,11 @@
aliases.put("LYCI", LYCIAN);
aliases.put("LYDI", LYDIAN);
aliases.put("MAHJ", MAHAJANI);
+ aliases.put("MAKA", MAKASAR);
aliases.put("MARC", MARCHEN);
aliases.put("MAND", MANDAIC);
aliases.put("MANI", MANICHAEAN);
+ aliases.put("MEDF", MEDEFAIDRIN);
aliases.put("MEND", MENDE_KIKAKUI);
aliases.put("MERC", MEROITIC_CURSIVE);
aliases.put("MERO", MEROITIC_HIEROGLYPHS);
@@ -7786,6 +8009,7 @@
aliases.put("PLRD", MIAO);
aliases.put("PRTI", INSCRIPTIONAL_PARTHIAN);
aliases.put("RJNG", REJANG);
+ aliases.put("ROHG", HANIFI_ROHINGYA);
aliases.put("RUNR", RUNIC);
aliases.put("SAMR", SAMARITAN);
aliases.put("SARB", OLD_SOUTH_ARABIAN);
@@ -7796,6 +8020,8 @@
aliases.put("SIDD", SIDDHAM);
aliases.put("SIND", KHUDAWADI);
aliases.put("SINH", SINHALA);
+ aliases.put("SOGD", SOGDIAN);
+ aliases.put("SOGO", OLD_SOGDIAN);
aliases.put("SORA", SORA_SOMPENG);
aliases.put("SOYO", SOYOMBO);
aliases.put("SUND", SUNDANESE);
@@ -7914,11 +8140,22 @@
private static class CharacterCache {
private CharacterCache(){}
- static final Character cache[] = new Character[127 + 1];
+ static final Character[] cache;
+ static Character[] archivedCache;
static {
- for (int i = 0; i < cache.length; i++)
- cache[i] = new Character((char)i);
+ int size = 127 + 1;
+
+ // Load and use the archived cache if it exists
+ VM.initializeFromArchive(CharacterCache.class);
+ if (archivedCache == null || archivedCache.length != size) {
+ Character[] c = new Character[size];
+ for (int i = 0; i < size; i++) {
+ c[i] = new Character((char) i);
+ }
+ archivedCache = c;
+ }
+ cache = archivedCache;
}
}
--- a/src/java.base/share/classes/java/lang/Integer.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/classes/java/lang/Integer.java Wed Nov 21 13:53:17 2018 -0500
@@ -1013,10 +1013,9 @@
VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
try {
- int i = parseInt(integerCacheHighPropValue);
- i = Math.max(i, 127);
+ h = Math.max(parseInt(integerCacheHighPropValue), 127);
// Maximum array size is Integer.MAX_VALUE
- h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
+ h = Math.min(h, Integer.MAX_VALUE - (-low) -1);
} catch( NumberFormatException nfe) {
// If the property cannot be parsed into an int, ignore it.
}
@@ -1031,8 +1030,9 @@
if (archivedCache == null || size > archivedCache.length) {
Integer[] c = new Integer[size];
int j = low;
- for(int k = 0; k < c.length; k++)
- c[k] = new Integer(j++);
+ for(int i = 0; i < c.length; i++) {
+ c[i] = new Integer(j++);
+ }
archivedCache = c;
}
cache = archivedCache;
--- a/src/java.base/share/classes/java/lang/Long.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/classes/java/lang/Long.java Wed Nov 21 13:53:17 2018 -0500
@@ -29,6 +29,7 @@
import java.math.*;
import java.util.Objects;
import jdk.internal.HotSpotIntrinsicCandidate;
+import jdk.internal.misc.VM;
import static java.lang.String.COMPACT_STRINGS;
import static java.lang.String.LATIN1;
@@ -1145,13 +1146,25 @@
}
private static class LongCache {
- private LongCache(){}
+ private LongCache() {}
- static final Long cache[] = new Long[-(-128) + 127 + 1];
+ static final Long[] cache;
+ static Long[] archivedCache;
static {
- for(int i = 0; i < cache.length; i++)
- cache[i] = new Long(i - 128);
+ int size = -(-128) + 127 + 1;
+
+ // Load and use the archived cache if it exists
+ VM.initializeFromArchive(LongCache.class);
+ if (archivedCache == null || archivedCache.length != size) {
+ Long[] c = new Long[size];
+ long value = -128;
+ for(int i = 0; i < size; i++) {
+ c[i] = new Long(value++);
+ }
+ archivedCache = c;
+ }
+ cache = archivedCache;
}
}
--- a/src/java.base/share/classes/java/lang/Short.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/classes/java/lang/Short.java Wed Nov 21 13:53:17 2018 -0500
@@ -26,6 +26,7 @@
package java.lang;
import jdk.internal.HotSpotIntrinsicCandidate;
+import jdk.internal.misc.VM;
/**
* The {@code Short} class wraps a value of primitive type {@code
@@ -203,13 +204,25 @@
}
private static class ShortCache {
- private ShortCache(){}
+ private ShortCache() {}
- static final Short cache[] = new Short[-(-128) + 127 + 1];
+ static final Short[] cache;
+ static Short[] archivedCache;
static {
- for(int i = 0; i < cache.length; i++)
- cache[i] = new Short((short)(i - 128));
+ int size = -(-128) + 127 + 1;
+
+ // Load and use the archived cache if it exists
+ VM.initializeFromArchive(ShortCache.class);
+ if (archivedCache == null || archivedCache.length != size) {
+ Short[] c = new Short[size];
+ short value = -128;
+ for(int i = 0; i < size; i++) {
+ c[i] = new Short(value++);
+ }
+ archivedCache = c;
+ }
+ cache = archivedCache;
}
}
--- a/src/java.base/share/classes/java/lang/System.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/classes/java/lang/System.java Wed Nov 21 13:53:17 2018 -0500
@@ -627,72 +627,72 @@
* <th scope="col">Description of Associated Value</th></tr>
* </thead>
* <tbody>
- * <tr><th scope="row">{@code java.version}</th>
+ * <tr><th scope="row">{@systemProperty java.version}</th>
* <td>Java Runtime Environment version, which may be interpreted
* as a {@link Runtime.Version}</td></tr>
- * <tr><th scope="row">{@code java.version.date}</th>
+ * <tr><th scope="row">{@systemProperty java.version.date}</th>
* <td>Java Runtime Environment version date, in ISO-8601 YYYY-MM-DD
* format, which may be interpreted as a {@link
* java.time.LocalDate}</td></tr>
- * <tr><th scope="row">{@code java.vendor}</th>
+ * <tr><th scope="row">{@systemProperty java.vendor}</th>
* <td>Java Runtime Environment vendor</td></tr>
- * <tr><th scope="row">{@code java.vendor.url}</th>
+ * <tr><th scope="row">{@systemProperty java.vendor.url}</th>
* <td>Java vendor URL</td></tr>
- * <tr><th scope="row">{@code java.vendor.version}</th>
+ * <tr><th scope="row">{@systemProperty java.vendor.version}</th>
* <td>Java vendor version</td></tr>
- * <tr><th scope="row">{@code java.home}</th>
+ * <tr><th scope="row">{@systemProperty java.home}</th>
* <td>Java installation directory</td></tr>
- * <tr><th scope="row">{@code java.vm.specification.version}</th>
+ * <tr><th scope="row">{@systemProperty java.vm.specification.version}</th>
* <td>Java Virtual Machine specification version, whose value is the
* {@linkplain Runtime.Version#feature feature} element of the
* {@linkplain Runtime#version() runtime version}</td></tr>
- * <tr><th scope="row">{@code java.vm.specification.vendor}</th>
+ * <tr><th scope="row">{@systemProperty java.vm.specification.vendor}</th>
* <td>Java Virtual Machine specification vendor</td></tr>
- * <tr><th scope="row">{@code java.vm.specification.name}</th>
+ * <tr><th scope="row">{@systemProperty java.vm.specification.name}</th>
* <td>Java Virtual Machine specification name</td></tr>
- * <tr><th scope="row">{@code java.vm.version}</th>
+ * <tr><th scope="row">{@systemProperty java.vm.version}</th>
* <td>Java Virtual Machine implementation version which may be
* interpreted as a {@link Runtime.Version}</td></tr>
- * <tr><th scope="row">{@code java.vm.vendor}</th>
+ * <tr><th scope="row">{@systemProperty java.vm.vendor}</th>
* <td>Java Virtual Machine implementation vendor</td></tr>
- * <tr><th scope="row">{@code java.vm.name}</th>
+ * <tr><th scope="row">{@systemProperty java.vm.name}</th>
* <td>Java Virtual Machine implementation name</td></tr>
- * <tr><th scope="row">{@code java.specification.version}</th>
+ * <tr><th scope="row">{@systemProperty java.specification.version}</th>
* <td>Java Runtime Environment specification version, whose value is
* the {@linkplain Runtime.Version#feature feature} element of the
* {@linkplain Runtime#version() runtime version}</td></tr>
- * <tr><th scope="row">{@code java.specification.vendor}</th>
+ * <tr><th scope="row">{@systemProperty java.specification.vendor}</th>
* <td>Java Runtime Environment specification vendor</td></tr>
- * <tr><th scope="row">{@code java.specification.name}</th>
+ * <tr><th scope="row">{@systemProperty java.specification.name}</th>
* <td>Java Runtime Environment specification name</td></tr>
- * <tr><th scope="row">{@code java.class.version}</th>
+ * <tr><th scope="row">{@systemProperty java.class.version}</th>
* <td>Java class format version number</td></tr>
- * <tr><th scope="row">{@code java.class.path}</th>
+ * <tr><th scope="row">{@systemProperty java.class.path}</th>
* <td>Java class path (refer to
* {@link ClassLoader#getSystemClassLoader()} for details)</td></tr>
- * <tr><th scope="row">{@code java.library.path}</th>
+ * <tr><th scope="row">{@systemProperty java.library.path}</th>
* <td>List of paths to search when loading libraries</td></tr>
- * <tr><th scope="row">{@code java.io.tmpdir}</th>
+ * <tr><th scope="row">{@systemProperty java.io.tmpdir}</th>
* <td>Default temp file path</td></tr>
- * <tr><th scope="row">{@code java.compiler}</th>
+ * <tr><th scope="row">{@systemProperty java.compiler}</th>
* <td>Name of JIT compiler to use</td></tr>
- * <tr><th scope="row">{@code os.name}</th>
+ * <tr><th scope="row">{@systemProperty os.name}</th>
* <td>Operating system name</td></tr>
- * <tr><th scope="row">{@code os.arch}</th>
+ * <tr><th scope="row">{@systemProperty os.arch}</th>
* <td>Operating system architecture</td></tr>
- * <tr><th scope="row">{@code os.version}</th>
+ * <tr><th scope="row">{@systemProperty os.version}</th>
* <td>Operating system version</td></tr>
- * <tr><th scope="row">{@code file.separator}</th>
+ * <tr><th scope="row">{@systemProperty file.separator}</th>
* <td>File separator ("/" on UNIX)</td></tr>
- * <tr><th scope="row">{@code path.separator}</th>
+ * <tr><th scope="row">{@systemProperty path.separator}</th>
* <td>Path separator (":" on UNIX)</td></tr>
- * <tr><th scope="row">{@code line.separator}</th>
+ * <tr><th scope="row">{@systemProperty line.separator}</th>
* <td>Line separator ("\n" on UNIX)</td></tr>
- * <tr><th scope="row">{@code user.name}</th>
+ * <tr><th scope="row">{@systemProperty user.name}</th>
* <td>User's account name</td></tr>
- * <tr><th scope="row">{@code user.home}</th>
+ * <tr><th scope="row">{@systemProperty user.home}</th>
* <td>User's home directory</td></tr>
- * <tr><th scope="row">{@code user.dir}</th>
+ * <tr><th scope="row">{@systemProperty user.dir}</th>
* <td>User's current working directory</td></tr>
* </tbody>
* </table>
@@ -722,13 +722,13 @@
* <th scope="col">Description of Associated Value</th></tr>
* </thead>
* <tbody>
- * <tr><th scope="row">{@code jdk.module.path}</th>
+ * <tr><th scope="row">{@systemProperty jdk.module.path}</th>
* <td>The application module path</td></tr>
- * <tr><th scope="row">{@code jdk.module.upgrade.path}</th>
+ * <tr><th scope="row">{@systemProperty jdk.module.upgrade.path}</th>
* <td>The upgrade module path</td></tr>
- * <tr><th scope="row">{@code jdk.module.main}</th>
+ * <tr><th scope="row">{@systemProperty jdk.module.main}</th>
* <td>The module name of the initial/main module</td></tr>
- * <tr><th scope="row">{@code jdk.module.main.class}</th>
+ * <tr><th scope="row">{@systemProperty jdk.module.main.class}</th>
* <td>The main class name of the initial module</td></tr>
* </tbody>
* </table>
--- a/src/java.base/share/classes/java/net/URL.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/classes/java/net/URL.java Wed Nov 21 13:53:17 2018 -0500
@@ -1393,39 +1393,39 @@
}
}
- synchronized (streamHandlerLock) {
- if (handler == null) {
- // Try the built-in protocol handler
- handler = defaultFactory.createURLStreamHandler(protocol);
- } else {
- URLStreamHandler handler2 = null;
-
- // Check again with hashtable just in case another
- // thread created a handler since we last checked
- handler2 = handlers.get(protocol);
+ if (handler == null) {
+ // Try the built-in protocol handler
+ handler = defaultFactory.createURLStreamHandler(protocol);
+ }
- if (handler2 != null) {
- return handler2;
- }
+ synchronized (streamHandlerLock) {
+ URLStreamHandler handler2 = null;
- // Check with factory if another thread set a
- // factory since our last check
- if (!checkedWithFactory && (fac = factory) != null) {
- handler2 = fac.createURLStreamHandler(protocol);
- }
+ // Check again with hashtable just in case another
+ // thread created a handler since we last checked
+ handler2 = handlers.get(protocol);
- if (handler2 != null) {
- // The handler from the factory must be given more
- // importance. Discard the default handler that
- // this thread created.
- handler = handler2;
- }
+ if (handler2 != null) {
+ return handler2;
}
- // Insert this handler into the hashtable
- if (handler != null) {
- handlers.put(protocol, handler);
+ // Check with factory if another thread set a
+ // factory since our last check
+ if (!checkedWithFactory && (fac = factory) != null) {
+ handler2 = fac.createURLStreamHandler(protocol);
}
+
+ if (handler2 != null) {
+ // The handler from the factory must be given more
+ // importance. Discard the default handler that
+ // this thread created.
+ handler = handler2;
+ }
+ }
+
+ // Insert this handler into the hashtable
+ if (handler != null) {
+ handlers.put(protocol, handler);
}
return handler;
--- a/src/java.base/share/classes/java/security/Security.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/classes/java/security/Security.java Wed Nov 21 13:53:17 2018 -0500
@@ -30,6 +30,8 @@
import java.io.*;
import java.net.URL;
+import jdk.internal.event.EventHelper;
+import jdk.internal.event.SecurityPropertyModificationEvent;
import jdk.internal.access.SharedSecrets;
import jdk.internal.util.StaticProperty;
import sun.security.util.Debug;
@@ -792,9 +794,19 @@
* @see java.security.SecurityPermission
*/
public static void setProperty(String key, String datum) {
- check("setProperty."+key);
+ check("setProperty." + key);
props.put(key, datum);
invalidateSMCache(key); /* See below. */
+
+ SecurityPropertyModificationEvent spe = new SecurityPropertyModificationEvent();
+ // following is a no-op if event is disabled
+ spe.key = key;
+ spe.value = datum;
+ spe.commit();
+
+ if (EventHelper.isLoggingSecurity()) {
+ EventHelper.logSecurityPropertyEvent(key, datum);
+ }
}
/*
--- a/src/java.base/share/classes/javax/crypto/Cipher.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/classes/javax/crypto/Cipher.java Wed Nov 21 13:53:17 2018 -0500
@@ -1183,21 +1183,6 @@
}
}
- private static String getOpmodeString(int opmode) {
- switch (opmode) {
- case ENCRYPT_MODE:
- return "encryption";
- case DECRYPT_MODE:
- return "decryption";
- case WRAP_MODE:
- return "key wrapping";
- case UNWRAP_MODE:
- return "key unwrapping";
- default:
- return "";
- }
- }
-
/**
* Initializes this cipher with a key.
*
@@ -1325,9 +1310,7 @@
this.opmode = opmode;
if (!skipDebug && pdebug != null) {
- pdebug.println("Cipher." + transformation + " " +
- getOpmodeString(opmode) + " algorithm from: " +
- getProviderName());
+ pdebug.println(this.toString());
}
}
@@ -1468,9 +1451,7 @@
this.opmode = opmode;
if (!skipDebug && pdebug != null) {
- pdebug.println("Cipher." + transformation + " " +
- getOpmodeString(opmode) + " algorithm from: " +
- getProviderName());
+ pdebug.println(this.toString());
}
}
@@ -1611,9 +1592,7 @@
this.opmode = opmode;
if (!skipDebug && pdebug != null) {
- pdebug.println("Cipher." + transformation + " " +
- getOpmodeString(opmode) + " algorithm from: " +
- getProviderName());
+ pdebug.println(this.toString());
}
}
@@ -1688,8 +1667,7 @@
/**
* Initializes this cipher with the public key from the given certificate
- * and
- * a source of randomness.
+ * and a source of randomness.
*
* <p>The cipher is initialized for one of the following four operations:
* encryption, decryption, key wrapping
@@ -1757,8 +1735,7 @@
initialized = false;
checkOpmode(opmode);
- // Check key usage if the certificate is of
- // type X.509.
+ // Check key usage if the certificate is of type X.509.
if (certificate instanceof java.security.cert.X509Certificate) {
// Check whether the cert has a key usage extension
// marked as a critical extension.
@@ -1801,9 +1778,7 @@
this.opmode = opmode;
if (!skipDebug && pdebug != null) {
- pdebug.println("Cipher." + transformation + " " +
- getOpmodeString(opmode) + " algorithm from: " +
- getProviderName());
+ pdebug.println(this.toString());
}
}
@@ -2825,4 +2800,44 @@
}
spi.engineUpdateAAD(src);
}
-}
+
+ /**
+ * Returns a String representation of this Cipher.
+ *
+ * @implNote
+ * This implementation returns a String containing the transformation,
+ * mode, and provider of this Cipher.
+ * The exact format of the String is unspecified and is subject to change.
+ *
+ * @return a String describing this Cipher
+ */
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("Cipher.")
+ .append(transformation)
+ .append(", mode: ");
+ switch (opmode) {
+ case 0:
+ sb.append("not initialized");
+ break;
+ case ENCRYPT_MODE:
+ sb.append("encryption");
+ break;
+ case DECRYPT_MODE:
+ sb.append("decryption");
+ break;
+ case WRAP_MODE:
+ sb.append("key wrapping");
+ break;
+ case UNWRAP_MODE:
+ sb.append("key unwrapping");
+ break;
+ default:
+ // should never happen
+ sb.append("error:").append(Integer.toString(opmode));
+ }
+ sb.append(", algorithm from: ").append(getProviderName());
+ return sb.toString();
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/classes/jdk/internal/event/EventHelper.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2018, 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.event;
+
+import java.time.Duration;
+import java.time.Instant;
+import java.util.Date;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+/**
+ * A helper class to have events logged to a JDK Event Logger.
+ */
+
+public final class EventHelper {
+
+ private static final System.Logger.Level LOG_LEVEL = System.Logger.Level.DEBUG;
+
+ // helper class used for logging security related events for now
+ private static final String SECURITY_LOGGER_NAME = "jdk.event.security";
+ private static final System.Logger SECURITY_LOGGER =
+ System.getLogger(SECURITY_LOGGER_NAME);
+ private static final boolean LOGGING_SECURITY =
+ SECURITY_LOGGER.isLoggable(LOG_LEVEL);
+
+ public static void logTLSHandshakeEvent(Instant start,
+ String peerHost,
+ int peerPort,
+ String cipherSuite,
+ String protocolVersion,
+ long peerCertId) {
+ String prepend = getDurationString(start);
+ SECURITY_LOGGER.log(LOG_LEVEL, prepend +
+ " TLSHandshake: {0}:{1,number,#}, {2}, {3}, {4,number,#}",
+ peerHost, peerPort, protocolVersion, cipherSuite, peerCertId);
+ }
+
+ public static void logSecurityPropertyEvent(String key,
+ String value) {
+
+ if (isLoggingSecurity()) {
+ SECURITY_LOGGER.log(LOG_LEVEL,
+ "SecurityPropertyModification: key:{0}, value:{1}", key, value);
+ }
+ }
+
+ public static void logX509ValidationEvent(int anchorCertId,
+ int[] certIds) {
+ String codes = IntStream.of(certIds)
+ .mapToObj(Integer::toString)
+ .collect(Collectors.joining(", "));
+ SECURITY_LOGGER.log(LOG_LEVEL,
+ "ValidationChain: {0,number,#}, {1}", anchorCertId, codes);
+ }
+
+ public static void logX509CertificateEvent(String algId,
+ String serialNum,
+ String subject,
+ String issuer,
+ String keyType,
+ int length,
+ long certId,
+ long beginDate,
+ long endDate) {
+ SECURITY_LOGGER.log(LOG_LEVEL, "X509Certificate: Alg:{0}, Serial:{1}" +
+ ", Subject:{2}, Issuer:{3}, Key type:{4}, Length:{5,number,#}" +
+ ", Cert Id:{6,number,#}, Valid from:{7}, Valid until:{8}",
+ algId, serialNum, subject, issuer, keyType, length,
+ certId, new Date(beginDate), new Date(endDate));
+ }
+
+ /**
+ * Method to calculate a duration timestamp for events which measure
+ * the start and end times of certain operations.
+ * @param start Instant indicating when event started recording
+ * @return A string representing duraction from start time to
+ * time of this method call. Empty string is start is null.
+ */
+ private static String getDurationString(Instant start) {
+ if (start != null) {
+ Duration duration = Duration.between(start, Instant.now());
+ long micros = duration.toNanos() / 1_000;
+ if (micros < 1_000_000) {
+ return "duration = " + (micros / 1_000.0) + " ms:";
+ } else {
+ return "duration = " + ((micros / 1_000) / 1_000.0) + " s:";
+ }
+ } else {
+ return "";
+ }
+ }
+
+ /**
+ * Helper to determine if security events are being logged
+ * at a preconfigured logging level. The configuration value
+ * is read once at class initialization.
+ *
+ * @return boolean indicating whether an event should be logged
+ */
+ public static boolean isLoggingSecurity() {
+ return LOGGING_SECURITY;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/classes/jdk/internal/event/SecurityPropertyModificationEvent.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2018, 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.event;
+
+/**
+ * Event details relating to the modification of a Security property.
+ */
+
+public final class SecurityPropertyModificationEvent extends Event {
+ public String key;
+ public String value;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/classes/jdk/internal/event/TLSHandshakeEvent.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2018, 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.event;
+
+/**
+ * Event recording details of successful TLS handshakes.
+ */
+
+public final class TLSHandshakeEvent extends Event {
+ public String peerHost;
+ public int peerPort;
+ public String protocolVersion;
+ public String cipherSuite;
+ public long certificateId;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/classes/jdk/internal/event/X509CertificateEvent.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2018, 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.event;
+
+
+/**
+ * Event recording details of X.509 Certificate.
+ */
+
+public final class X509CertificateEvent extends Event {
+ public String algorithm;
+ public String serialNumber;
+ public String subject;
+ public String issuer;
+ public String keyType;
+ public int keyLength;
+ public long certificateId;
+ public long validFrom;
+ public long validUntil;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/share/classes/jdk/internal/event/X509ValidationEvent.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2018, 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.event;
+
+/**
+ * Event recording details of X.509 Certificate serial numbers
+ * used in X509 cert path validation.
+ */
+
+public final class X509ValidationEvent extends Event {
+ public long certificateId;
+ public int certificatePosition;
+ public long validationCounter;
+}
--- a/src/java.base/share/classes/sun/security/provider/X509Factory.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/classes/sun/security/provider/X509Factory.java Wed Nov 21 13:53:17 2018 -0500
@@ -26,12 +26,15 @@
package sun.security.provider;
import java.io.*;
+import java.security.PublicKey;
import java.util.*;
import java.security.cert.*;
+import jdk.internal.event.EventHelper;
+import jdk.internal.event.X509CertificateEvent;
+import sun.security.util.KeyUtil;
import sun.security.util.Pem;
-import sun.security.x509.X509CertImpl;
-import sun.security.x509.X509CRLImpl;
+import sun.security.x509.*;
import sun.security.pkcs.PKCS7;
import sun.security.provider.certpath.X509CertPath;
import sun.security.provider.certpath.X509CertificatePair;
@@ -101,6 +104,8 @@
}
cert = new X509CertImpl(encoding);
addToCache(certCache, cert.getEncodedInternal(), cert);
+ // record cert details if necessary
+ commitEvent(cert);
return cert;
} else {
throw new IOException("Empty input");
@@ -762,4 +767,43 @@
}
return tag;
}
+
+ private void commitEvent(X509CertImpl info) {
+ X509CertificateEvent xce = new X509CertificateEvent();
+ if (xce.shouldCommit() || EventHelper.isLoggingSecurity()) {
+ PublicKey pKey = info.getPublicKey();
+ String algId = info.getSigAlgName();
+ String serNum = info.getSerialNumber().toString(16);
+ String subject = info.getSubjectDN().getName();
+ String issuer = info.getIssuerDN().getName();
+ String keyType = pKey.getAlgorithm();
+ int length = KeyUtil.getKeySize(pKey);
+ int hashCode = info.hashCode();
+ long beginDate = info.getNotBefore().getTime();
+ long endDate = info.getNotAfter().getTime();
+ if (xce.shouldCommit()) {
+ xce.algorithm = algId;
+ xce.serialNumber = serNum;
+ xce.subject = subject;
+ xce.issuer = issuer;
+ xce.keyType = keyType;
+ xce.keyLength = length;
+ xce.certificateId = hashCode;
+ xce.validFrom = beginDate;
+ xce.validUntil = endDate;
+ xce.commit();
+ }
+ if (EventHelper.isLoggingSecurity()) {
+ EventHelper.logX509CertificateEvent(algId,
+ serNum,
+ subject,
+ issuer,
+ keyType,
+ length,
+ hashCode,
+ beginDate,
+ endDate);
+ }
+ }
+ }
}
--- a/src/java.base/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java Wed Nov 21 13:53:17 2018 -0500
@@ -29,7 +29,10 @@
import java.security.InvalidAlgorithmParameterException;
import java.security.cert.*;
import java.util.*;
+import java.util.concurrent.atomic.AtomicLong;
+import jdk.internal.event.X509ValidationEvent;
+import jdk.internal.event.EventHelper;
import sun.security.provider.certpath.PKIX.ValidatorParams;
import sun.security.validator.Validator;
import sun.security.x509.X509CertImpl;
@@ -47,6 +50,7 @@
public final class PKIXCertPathValidator extends CertPathValidatorSpi {
private static final Debug debug = Debug.getInstance("certpath");
+ private static final AtomicLong validationCounter = new AtomicLong();
/**
* Default constructor.
@@ -234,7 +238,33 @@
params.certificates(),
certPathCheckers);
+ X509ValidationEvent xve = new X509ValidationEvent();
+ if (xve.shouldCommit() || EventHelper.isLoggingSecurity()) {
+ int[] certIds = params.certificates().stream()
+ .mapToInt(x -> x.hashCode())
+ .toArray();
+ int anchorCertId =
+ anchor.getTrustedCert().hashCode();
+ if (xve.shouldCommit()) {
+ xve.certificateId = anchorCertId;
+ int certificatePos = 1; //anchor cert
+ xve.certificatePosition = certificatePos;
+ xve.validationCounter = validationCounter.incrementAndGet();
+ xve.commit();
+ // now, iterate through remaining
+ for (int id : certIds) {
+ xve.certificateId = id;
+ xve.certificatePosition = ++certificatePos;
+ xve.commit();
+
+ }
+ }
+ if (EventHelper.isLoggingSecurity()) {
+ EventHelper.logX509ValidationEvent(anchorCertId, certIds);
+ }
+ }
return new PKIXCertPathValidatorResult(anchor, pc.getPolicyTree(),
bc.getPublicKey());
}
+
}
--- a/src/java.base/share/classes/sun/security/ssl/Finished.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/classes/sun/security/ssl/Finished.java Wed Nov 21 13:53:17 2018 -0500
@@ -40,6 +40,10 @@
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
+import javax.net.ssl.SSLPeerUnverifiedException;
+
+import jdk.internal.event.EventHelper;
+import jdk.internal.event.TLSHandshakeEvent;
import sun.security.internal.spec.TlsPrfParameterSpec;
import sun.security.ssl.CipherSuite.HashAlg;
import static sun.security.ssl.CipherSuite.HashAlg.H_NONE;
@@ -548,6 +552,7 @@
// handshake context cleanup.
chc.handshakeFinished = true;
+ recordEvent(chc.conContext.conSession);
// May need to retransmit the last flight for DTLS.
if (!chc.sslContext.isDTLS()) {
@@ -597,6 +602,7 @@
// handshake context cleanup.
shc.handshakeFinished = true;
+ recordEvent(shc.conContext.conSession);
// May need to retransmit the last flight for DTLS.
if (!shc.sslContext.isDTLS()) {
@@ -730,6 +736,8 @@
// handshake context cleanup.
chc.handshakeFinished = true;
chc.conContext.finishHandshake();
+ recordEvent(chc.conContext.conSession);
+
// The handshake message has been delivered.
return null;
@@ -1063,6 +1071,7 @@
if (!shc.sslContext.isDTLS()) {
shc.conContext.finishHandshake();
}
+ recordEvent(shc.conContext.conSession);
//
// produce
@@ -1074,4 +1083,35 @@
}
}
+
+ private static void recordEvent(SSLSessionImpl session) {
+ TLSHandshakeEvent event = new TLSHandshakeEvent();
+ if (event.shouldCommit() || EventHelper.isLoggingSecurity()) {
+ int peerCertificateId = 0;
+ try {
+ // use hash code for Id
+ peerCertificateId = session
+ .getCertificateChain()[0]
+ .hashCode();
+ } catch (SSLPeerUnverifiedException e) {
+ // not verified msg
+ }
+ if (event.shouldCommit()) {
+ event.peerHost = session.getPeerHost();
+ event.peerPort = session.getPeerPort();
+ event.cipherSuite = session.getCipherSuite();
+ event.protocolVersion = session.getProtocol();
+ event.certificateId = peerCertificateId;
+ event.commit();
+ }
+ if (EventHelper.isLoggingSecurity()) {
+ EventHelper.logTLSHandshakeEvent(null,
+ session.getPeerHost(),
+ session.getPeerPort(),
+ session.getCipherSuite(),
+ session.getProtocol(),
+ peerCertificateId);
+ }
+ }
+ }
}
--- a/src/java.base/share/classes/sun/text/normalizer/ICUBinary.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/classes/sun/text/normalizer/ICUBinary.java Wed Nov 21 13:53:17 2018 -0500
@@ -86,12 +86,47 @@
}
})) {
- BufferedInputStream b=new BufferedInputStream(is, 4096 /* data buffer size */);
- DataInputStream inputStream = new DataInputStream(b);
- byte[] bb = new byte[130000];
- int n = inputStream.read(bb);
- ByteBuffer bytes = ByteBuffer.wrap(bb, 0, n);
- return bytes;
+ // is.available() may return 0, or 1, or the total number of bytes in the stream,
+ // or some other number.
+ // Do not try to use is.available() == 0 to find the end of the stream!
+ byte[] bytes;
+ int avail = is.available();
+ if (avail > 32) {
+ // There are more bytes available than just the ICU data header length.
+ // With luck, it is the total number of bytes.
+ bytes = new byte[avail];
+ } else {
+ bytes = new byte[128]; // empty .res files are even smaller
+ }
+ // Call is.read(...) until one returns a negative value.
+ int length = 0;
+ for(;;) {
+ if (length < bytes.length) {
+ int numRead = is.read(bytes, length, bytes.length - length);
+ if (numRead < 0) {
+ break; // end of stream
+ }
+ length += numRead;
+ } else {
+ // See if we are at the end of the stream before we grow the array.
+ int nextByte = is.read();
+ if (nextByte < 0) {
+ break;
+ }
+ int capacity = 2 * bytes.length;
+ if (capacity < 128) {
+ capacity = 128;
+ } else if (capacity < 0x4000) {
+ capacity *= 2; // Grow faster until we reach 16kB.
+ }
+ // TODO Java 6 replace new byte[] and arraycopy(): bytes = Arrays.copyOf(bytes, capacity);
+ byte[] newBytes = new byte[capacity];
+ System.arraycopy(bytes, 0, newBytes, 0, length);
+ bytes = newBytes;
+ bytes[length++] = (byte) nextByte;
+ }
+ }
+ return ByteBuffer.wrap(bytes, 0, length);
}
catch (IOException e) {
throw new UncheckedIOException(e);
Binary file src/java.base/share/classes/sun/text/resources/nfc.icu has changed
Binary file src/java.base/share/classes/sun/text/resources/nfkc.icu has changed
Binary file src/java.base/share/classes/sun/text/resources/nfkc_cf.icu has changed
Binary file src/java.base/share/classes/sun/text/resources/ubidi.icu has changed
Binary file src/java.base/share/classes/sun/text/resources/uprops.icu has changed
--- a/src/java.base/share/legal/icu.md Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/legal/icu.md Wed Nov 21 13:53:17 2018 -0500
@@ -1,4 +1,4 @@
-## International Components for Unicode (ICU4J) v60.2
+## International Components for Unicode (ICU4J) v62.1
### ICU4J License
--- a/src/java.base/share/legal/unicode.md Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.base/share/legal/unicode.md Wed Nov 21 13:53:17 2018 -0500
@@ -1,4 +1,4 @@
-## The Unicode Standard, Unicode Character Database, Version 10.0.0
+## The Unicode Standard, Unicode Character Database, Version 11.0.0
### Unicode Character Database
--- a/src/java.desktop/share/classes/java/awt/font/NumericShaper.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.desktop/share/classes/java/awt/font/NumericShaper.java Wed Nov 21 13:53:17 2018 -0500
@@ -649,8 +649,6 @@
0x0483, 0x048a,
0x0530, 0x0531,
0x0557, 0x0559,
- 0x0560, 0x0561,
- 0x0588, 0x0589,
0x058a, 0x0590,
0x0591, 0x05be,
0x05bf, 0x05c0,
@@ -671,6 +669,7 @@
0x07a6, 0x07b1,
0x07eb, 0x07f4,
0x07f6, 0x07fa,
+ 0x07fd, 0x07fe,
0x0816, 0x081a,
0x081b, 0x0824,
0x0825, 0x0828,
@@ -713,7 +712,8 @@
0x0a5d, 0x0a5e,
0x0a5f, 0x0a66,
0x0a70, 0x0a72,
- 0x0a75, 0x0a83,
+ 0x0a75, 0x0a76,
+ 0x0a73, 0x0a83,
0x0a84, 0x0a85,
0x0a8e, 0x0a8f,
0x0a92, 0x0a93,
@@ -771,7 +771,6 @@
0x0c62, 0x0c66,
0x0c70, 0x0c7f,
0x0c81, 0x0c82,
- 0x0c84, 0x0c85,
0x0c8d, 0x0c8e,
0x0c91, 0x0c92,
0x0ca9, 0x0caa,
@@ -890,7 +889,7 @@
0x17dd, 0x17e0,
0x17ea, 0x1810,
0x181a, 0x1820,
- 0x1878, 0x1884,
+ 0x1879, 0x1884,
0x1885, 0x1887,
0x18a9, 0x18aa,
0x18ab, 0x18b0,
@@ -933,6 +932,8 @@
0x1c2c, 0x1c34,
0x1c36, 0x1c3b,
0x1c4a, 0x1c4d,
+ 0x1c89, 0x1c90,
+ 0x1cbb, 0x1cbd,
0x1cc8, 0x1cd3,
0x1cd4, 0x1ce1,
0x1ce2, 0x1ce9,
@@ -1010,7 +1011,7 @@
0x30a0, 0x30a1,
0x30fb, 0x30fc,
0x3100, 0x3105,
- 0x312f, 0x3131,
+ 0x3130, 0x3131,
0x318f, 0x3190,
0x31bb, 0x31f0,
0x321d, 0x3220,
@@ -1023,7 +1024,7 @@
0x33de, 0x33e0,
0x33ff, 0x3400,
0x4db6, 0x4e00,
- 0x9feb, 0xa000,
+ 0x9ff0, 0xa000,
0xa48d, 0xa4d0,
0xa60d, 0xa610,
0xa62c, 0xa640,
@@ -1032,8 +1033,7 @@
0xa6f0, 0xa6f2,
0xa6f8, 0xa722,
0xa788, 0xa789,
- 0xa7af, 0xa7b0,
- 0xa7b8, 0xa7f7,
+ 0xa7ba, 0xa7f7,
0xa802, 0xa803,
0xa806, 0xa807,
0xa80b, 0xa80c,
@@ -1043,7 +1043,7 @@
0xa874, 0xa880,
0xa8c4, 0xa8ce,
0xa8da, 0xa8f2,
- 0xa8fe, 0xa900,
+ 0xa8ff, 0xa900,
0xa926, 0xa92e,
0xa947, 0xa952,
0xa954, 0xa95f,
@@ -1141,23 +1141,26 @@
0x10a3f, 0x10a40,
0x10ae5, 0x10ae7,
0x10b39, 0x10b40,
+ 0x10d00, 0x10d40,
0x10e60, 0x10e7f,
+ 0x10f30, 0x10f70,
0x11001, 0x11002,
0x11038, 0x11047,
0x1104e, 0x11066,
0x11070, 0x11082,
0x110b3, 0x110b7,
0x110b9, 0x110bb,
- 0x110c2, 0x110d0,
+ 0x110c2, 0x110cd,
+ 0x110ce, 0x110d0,
0x110e9, 0x110f0,
0x110fa, 0x11103,
0x11127, 0x1112c,
0x1112d, 0x11136,
- 0x11144, 0x11150,
+ 0x11147, 0x11150,
0x11173, 0x11174,
0x11177, 0x11182,
0x111b6, 0x111bf,
- 0x111ca, 0x111cd,
+ 0x111c9, 0x111cd,
0x111ce, 0x111d0,
0x111e0, 0x111e1,
0x111f5, 0x11200,
@@ -1214,10 +1217,12 @@
0x116b0, 0x116b6,
0x116b7, 0x116c0,
0x116ca, 0x11700,
- 0x1171a, 0x11720,
+ 0x1171b, 0x11720,
0x11722, 0x11726,
0x11727, 0x11730,
- 0x11740, 0x118a0,
+ 0x1182f, 0x11838,
+ 0x11839, 0x1183b,
+ 0x1183c, 0x118a0,
0x118f3, 0x118ff,
0x11900, 0x11a00,
0x11a01, 0x11a07,
@@ -1230,10 +1235,9 @@
0x11a84, 0x11a86,
0x11a8a, 0x11a97,
0x11a98, 0x11a9a,
- 0x11a9d, 0x11a9e,
0x11aa3, 0x11ac0,
- 0x11af9, 0x11C00,
- 0x11C09, 0x11c0a,
+ 0x11af9, 0x11c00,
+ 0x11c09, 0x11c0a,
0x11c30, 0x11c3e,
0x11c46, 0x11c50,
0x11c6d, 0x11c70,
@@ -1245,7 +1249,16 @@
0x11d0a, 0x11d0b,
0x11d31, 0x11d46,
0x11d47, 0x11d50,
- 0x11d5a, 0x12000,
+ 0x11d5a, 0x11d60,
+ 0x11d66, 0x11d67,
+ 0x11d69, 0x11d6a,
+ 0x11d8f, 0x11d93,
+ 0x11d95, 0x11d96,
+ 0x11d97, 0x11d98,
+ 0x11d99, 0x11da0,
+ 0x11daa, 0x11ee0,
+ 0x11ef3, 0x11ef5,
+ 0x11ef9, 0x12000,
0x1239a, 0x12400,
0x1246f, 0x12470,
0x12475, 0x12480,
@@ -1263,12 +1276,13 @@
0x16b5a, 0x16b5b,
0x16b62, 0x16b63,
0x16b78, 0x16b7d,
- 0x16b90, 0x16f00,
+ 0x16b90, 0x16e40,
+ 0x16e9b, 0x16f00,
0x16f45, 0x16f50,
0x16f7f, 0x16f93,
0x16fa0, 0x16fe0,
0x16fe2, 0x17000,
- 0x187ed, 0x18800,
+ 0x187f2, 0x18800,
0x18af3, 0x1b000,
0x1b11f, 0x1b170,
0x1b2fc, 0x1bc00,
@@ -1284,8 +1298,9 @@
0x1d173, 0x1d183,
0x1d185, 0x1d18c,
0x1d1aa, 0x1d1ae,
- 0x1d1e9, 0x1d360,
- 0x1d372, 0x1d400,
+ 0x1d1e9, 0x1d2e0,
+ 0x1d2f4, 0x1d360,
+ 0x1d379, 0x1d400,
0x1d455, 0x1d456,
0x1d49d, 0x1d49e,
0x1d4a0, 0x1d4a2,
@@ -1318,7 +1333,8 @@
0x1da8c, 0x1e800,
0x1e8d0, 0x1e8d7,
0x1e944, 0x1e94b,
- 0x1eef0, 0x1eef2,
+ 0x1ec70, 0x1ecc0,
+ 0x1ee00, 0x1ef00,
0x1f000, 0x1f110,
0x1f12f, 0x1f130,
0x1f16a, 0x1f170,
--- a/src/java.desktop/share/native/common/awt/debug/debug_assert.c Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.desktop/share/native/common/awt/debug/debug_assert.c Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, 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,7 +33,9 @@
static DASSERT_CALLBACK PfnAssertCallback = NULL;
-void DAssert_Impl(const char *msg, const char * filename, int linenumber) {
+/* JNIEXPORT because this function is also called from libawt_xawt */
+JNIEXPORT void JNICALL
+DAssert_Impl(const char *msg, const char * filename, int linenumber) {
if (PfnAssertCallback != NULL) {
(*PfnAssertCallback)(msg, filename, linenumber);
} else {
--- a/src/java.desktop/share/native/common/awt/debug/debug_assert.h Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.desktop/share/native/common/awt/debug/debug_assert.h Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, 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
@@ -54,7 +54,8 @@
/* prototype for assert function */
typedef void (*DASSERT_CALLBACK)(const char * msg, const char * file, int line);
-extern void DAssert_Impl(const char * msg, const char * file, int line);
+/* JNIEXPORT because this function is also called from libawt_xawt */
+JNIEXPORT void JNICALL DAssert_Impl(const char * msg, const char * file, int line);
extern void DAssert_SetCallback( DASSERT_CALLBACK pfn );
#else /* DEBUG not defined */
--- a/src/java.desktop/share/native/common/awt/debug/debug_trace.c Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.desktop/share/native/common/awt/debug/debug_trace.c Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, 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
@@ -237,16 +237,20 @@
/*
* Called via DTRACE_PRINT macro. Outputs printf style formatted text.
+ * JNIEXPORT because these functions are also called from libawt_xawt.
*/
-void DTrace_VPrint( const char * file, int line, int argc, const char * fmt, va_list arglist ) {
+JNIEXPORT void JNICALL
+DTrace_VPrint( const char * file, int line, int argc, const char * fmt, va_list arglist ) {
DASSERT(fmt != NULL);
DTrace_VPrintImpl(fmt, arglist);
}
/*
* Called via DTRACE_PRINTLN macro. Outputs printf style formatted text with an automatic newline.
+ * JNIEXPORT because these functions are also called from libawt_xawt.
*/
-void DTrace_VPrintln( const char * file, int line, int argc, const char * fmt, va_list arglist ) {
+JNIEXPORT void JNICALL
+DTrace_VPrintln( const char * file, int line, int argc, const char * fmt, va_list arglist ) {
DTrace_VPrintImpl(fmt, arglist);
DTrace_PrintImpl("\n");
}
@@ -254,10 +258,12 @@
/*
* Called via DTRACE_ macros. If tracing is enabled at the given location, it enters
* the trace mutex and invokes the callback function to output the trace.
+ * JNIEXPORT because these functions are also called from libawt_xawt.
*/
-void DTrace_PrintFunction( DTRACE_PRINT_CALLBACK pfn, dtrace_id * pFileTraceId, dtrace_id * pLineTraceId,
- const char * file, int line,
- int argc, const char * fmt, ... ) {
+JNIEXPORT void JNICALL
+DTrace_PrintFunction( DTRACE_PRINT_CALLBACK pfn, dtrace_id * pFileTraceId, dtrace_id * pLineTraceId,
+ const char * file, int line,
+ int argc, const char * fmt, ... ) {
va_list arglist;
DASSERT(file != NULL);
--- a/src/java.desktop/share/native/common/awt/debug/debug_trace.h Wed Nov 21 13:20:52 2018 -0500
+++ b/src/java.desktop/share/native/common/awt/debug/debug_trace.h Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, 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
@@ -59,11 +59,12 @@
void DTrace_DisableMutex();
extern void DTrace_VPrintImpl(const char * fmt, va_list arglist);
extern void DTrace_PrintImpl(const char * fmt, ...);
-extern void DTrace_PrintFunction(DTRACE_PRINT_CALLBACK pfn, dtrace_id * pFileTraceId, dtrace_id * pTraceId, const char * file, int line, int argc, const char * fmt, ...);
+/* JNIEXPORT because these functions are also called from libawt_xawt */
+JNIEXPORT void JNICALL DTrace_PrintFunction(DTRACE_PRINT_CALLBACK pfn, dtrace_id * pFileTraceId, dtrace_id * pTraceId, const char * file, int line, int argc, const char * fmt, ...);
/* these functions are exported only for use in macros-- do not call them directly!!! */
-extern void DTrace_VPrint(const char * file, int line, int argc, const char * fmt, va_list arglist);
-extern void DTrace_VPrintln(const char * file, int line, int argc, const char * fmt, va_list arglist);
+JNIEXPORT void JNICALL DTrace_VPrint(const char * file, int line, int argc, const char * fmt, va_list arglist);
+JNIEXPORT void JNICALL DTrace_VPrintln(const char * file, int line, int argc, const char * fmt, va_list arglist);
/* each file includes this flag indicating module trace status */
static dtrace_id _Dt_FileTraceId = UNDEFINED_TRACE_ID;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java Wed Nov 21 13:53:17 2018 -0500
@@ -172,7 +172,7 @@
if (compiler == null || compiler.errorCount() == 0
|| Options.instance(context).isSet("dev")) {
Log log = Log.instance(context);
- log.printLines("msg.bug", JavaCompiler.version());
+ log.printLines(PrefixKind.JAVAC, "msg.bug", JavaCompiler.version());
ex.printStackTrace(log.getWriter(WriterKind.NOTICE));
}
return abnormalErrorResult;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Wed Nov 21 13:53:17 2018 -0500
@@ -172,7 +172,7 @@
if (previous == null || previous == OverloadKind.ERROR) {
t.setOverloadKind(overloadKind);
} else {
- Assert.check(previous == overloadKind);
+ Assert.check(previous == overloadKind || overloadKind == OverloadKind.ERROR);
}
}
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java Wed Nov 21 13:53:17 2018 -0500
@@ -357,9 +357,9 @@
}
/** Resolve all jumps of this statement. */
- private boolean resolveJump(JCTree tree,
- ListBuffer<P> oldPendingExits,
- JumpKind jk) {
+ private Liveness resolveJump(JCTree tree,
+ ListBuffer<P> oldPendingExits,
+ JumpKind jk) {
boolean resolved = false;
List<P> exits = pendingExits.toList();
pendingExits = oldPendingExits;
@@ -373,16 +373,16 @@
pendingExits.append(exit);
}
}
- return resolved;
+ return Liveness.from(resolved);
}
/** Resolve all continues of this statement. */
- boolean resolveContinues(JCTree tree) {
+ Liveness resolveContinues(JCTree tree) {
return resolveJump(tree, new ListBuffer<P>(), JumpKind.CONTINUE);
}
/** Resolve all breaks of this statement. */
- boolean resolveBreaks(JCTree tree, ListBuffer<P> oldPendingExits) {
+ Liveness resolveBreaks(JCTree tree, ListBuffer<P> oldPendingExits) {
return resolveJump(tree, oldPendingExits, JumpKind.BREAK);
}
@@ -417,11 +417,11 @@
/** A flag that indicates whether the last statement could
* complete normally.
*/
- private boolean alive;
+ private Liveness alive;
@Override
void markDead() {
- alive = false;
+ alive = Liveness.DEAD;
}
/*************************************************************************
@@ -432,7 +432,7 @@
*/
void scanDef(JCTree tree) {
scanStat(tree);
- if (tree != null && tree.hasTag(JCTree.Tag.BLOCK) && !alive) {
+ if (tree != null && tree.hasTag(JCTree.Tag.BLOCK) && alive == Liveness.DEAD) {
log.error(tree.pos(),
Errors.InitializerMustBeAbleToCompleteNormally);
}
@@ -441,9 +441,9 @@
/** Analyze a statement. Check that statement is reachable.
*/
void scanStat(JCTree tree) {
- if (!alive && tree != null) {
+ if (alive == Liveness.DEAD && tree != null) {
log.error(tree.pos(), Errors.UnreachableStmt);
- if (!tree.hasTag(SKIP)) alive = true;
+ if (!tree.hasTag(SKIP)) alive = Liveness.RECOVERY;
}
scan(tree);
}
@@ -460,7 +460,7 @@
public void visitClassDef(JCClassDecl tree) {
if (tree.sym == null) return;
- boolean alivePrev = alive;
+ Liveness alivePrev = alive;
ListBuffer<PendingExit> pendingExitsPrev = pendingExits;
Lint lintPrev = lint;
@@ -506,10 +506,10 @@
Assert.check(pendingExits.isEmpty());
try {
- alive = true;
+ alive = Liveness.ALIVE;
scanStat(tree.body);
- if (alive && !tree.sym.type.getReturnType().hasTag(VOID))
+ if (alive == Liveness.ALIVE && !tree.sym.type.getReturnType().hasTag(VOID))
log.error(TreeInfo.diagEndPos(tree.body), Errors.MissingRetStmt);
List<PendingExit> exits = pendingExits.toList();
@@ -544,21 +544,21 @@
ListBuffer<PendingExit> prevPendingExits = pendingExits;
pendingExits = new ListBuffer<>();
scanStat(tree.body);
- alive |= resolveContinues(tree);
+ alive = alive.or(resolveContinues(tree));
scan(tree.cond);
- alive = alive && !tree.cond.type.isTrue();
- alive |= resolveBreaks(tree, prevPendingExits);
+ alive = alive.and(!tree.cond.type.isTrue());
+ alive = alive.or(resolveBreaks(tree, prevPendingExits));
}
public void visitWhileLoop(JCWhileLoop tree) {
ListBuffer<PendingExit> prevPendingExits = pendingExits;
pendingExits = new ListBuffer<>();
scan(tree.cond);
- alive = !tree.cond.type.isFalse();
+ alive = Liveness.from(!tree.cond.type.isFalse());
scanStat(tree.body);
- alive |= resolveContinues(tree);
- alive = resolveBreaks(tree, prevPendingExits) ||
- !tree.cond.type.isTrue();
+ alive = alive.or(resolveContinues(tree));
+ alive = resolveBreaks(tree, prevPendingExits).or(
+ !tree.cond.type.isTrue());
}
public void visitForLoop(JCForLoop tree) {
@@ -567,15 +567,15 @@
pendingExits = new ListBuffer<>();
if (tree.cond != null) {
scan(tree.cond);
- alive = !tree.cond.type.isFalse();
+ alive = Liveness.from(!tree.cond.type.isFalse());
} else {
- alive = true;
+ alive = Liveness.ALIVE;
}
scanStat(tree.body);
- alive |= resolveContinues(tree);
+ alive = alive.or(resolveContinues(tree));
scan(tree.step);
- alive = resolveBreaks(tree, prevPendingExits) ||
- tree.cond != null && !tree.cond.type.isTrue();
+ alive = resolveBreaks(tree, prevPendingExits).or(
+ tree.cond != null && !tree.cond.type.isTrue());
}
public void visitForeachLoop(JCEnhancedForLoop tree) {
@@ -584,16 +584,16 @@
scan(tree.expr);
pendingExits = new ListBuffer<>();
scanStat(tree.body);
- alive |= resolveContinues(tree);
+ alive = alive.or(resolveContinues(tree));
resolveBreaks(tree, prevPendingExits);
- alive = true;
+ alive = Liveness.ALIVE;
}
public void visitLabelled(JCLabeledStatement tree) {
ListBuffer<PendingExit> prevPendingExits = pendingExits;
pendingExits = new ListBuffer<>();
scanStat(tree.body);
- alive |= resolveBreaks(tree, prevPendingExits);
+ alive = alive.or(resolveBreaks(tree, prevPendingExits));
}
public void visitSwitch(JCSwitch tree) {
@@ -602,7 +602,7 @@
scan(tree.selector);
boolean hasDefault = false;
for (List<JCCase> l = tree.cases; l.nonEmpty(); l = l.tail) {
- alive = true;
+ alive = Liveness.ALIVE;
JCCase c = l.head;
if (c.pats.isEmpty())
hasDefault = true;
@@ -612,13 +612,13 @@
}
}
scanStats(c.stats);
- c.completesNormally = alive;
- if (alive && c.caseKind == JCCase.RULE) {
+ c.completesNormally = alive != Liveness.DEAD;
+ if (alive != Liveness.DEAD && c.caseKind == JCCase.RULE) {
scanSyntheticBreak(make, tree);
- alive = false;
+ alive = Liveness.DEAD;
}
// Warn about fall-through if lint switch fallthrough enabled.
- if (alive &&
+ if (alive == Liveness.ALIVE &&
lint.isEnabled(Lint.LintCategory.FALLTHROUGH) &&
c.stats.nonEmpty() && l.tail.nonEmpty())
log.warning(Lint.LintCategory.FALLTHROUGH,
@@ -626,9 +626,9 @@
Warnings.PossibleFallThroughIntoCase);
}
if (!hasDefault) {
- alive = true;
+ alive = Liveness.ALIVE;
}
- alive |= resolveBreaks(tree, prevPendingExits);
+ alive = alive.or(resolveBreaks(tree, prevPendingExits));
}
@Override
@@ -644,9 +644,9 @@
}
}
boolean hasDefault = false;
- boolean prevAlive = alive;
+ Liveness prevAlive = alive;
for (List<JCCase> l = tree.cases; l.nonEmpty(); l = l.tail) {
- alive = true;
+ alive = Liveness.ALIVE;
JCCase c = l.head;
if (c.pats.isEmpty())
hasDefault = true;
@@ -662,13 +662,22 @@
}
}
scanStats(c.stats);
- c.completesNormally = alive;
+ if (alive == Liveness.ALIVE) {
+ if (c.caseKind == JCCase.RULE) {
+ log.error(TreeInfo.diagEndPos(c.body),
+ Errors.RuleCompletesNormally);
+ } else if (l.tail.isEmpty()) {
+ log.error(TreeInfo.diagEndPos(tree),
+ Errors.SwitchExpressionCompletesNormally);
+ }
+ }
+ c.completesNormally = alive != Liveness.DEAD;
}
if ((constants == null || !constants.isEmpty()) && !hasDefault) {
log.error(tree, Errors.NotExhaustive);
}
alive = prevAlive;
- alive |= resolveBreaks(tree, prevPendingExits);
+ alive = alive.or(resolveBreaks(tree, prevPendingExits));
}
public void visitTry(JCTry tree) {
@@ -686,22 +695,22 @@
}
scanStat(tree.body);
- boolean aliveEnd = alive;
+ Liveness aliveEnd = alive;
for (List<JCCatch> l = tree.catchers; l.nonEmpty(); l = l.tail) {
- alive = true;
+ alive = Liveness.ALIVE;
JCVariableDecl param = l.head.param;
scan(param);
scanStat(l.head.body);
- aliveEnd |= alive;
+ aliveEnd = aliveEnd.or(alive);
}
if (tree.finalizer != null) {
ListBuffer<PendingExit> exits = pendingExits;
pendingExits = prevPendingExits;
- alive = true;
+ alive = Liveness.ALIVE;
scanStat(tree.finalizer);
- tree.finallyCanCompleteNormally = alive;
- if (!alive) {
+ tree.finallyCanCompleteNormally = alive != Liveness.DEAD;
+ if (alive == Liveness.DEAD) {
if (lint.isEnabled(Lint.LintCategory.FINALLY)) {
log.warning(Lint.LintCategory.FINALLY,
TreeInfo.diagEndPos(tree.finalizer),
@@ -726,12 +735,12 @@
scan(tree.cond);
scanStat(tree.thenpart);
if (tree.elsepart != null) {
- boolean aliveAfterThen = alive;
- alive = true;
+ Liveness aliveAfterThen = alive;
+ alive = Liveness.ALIVE;
scanStat(tree.elsepart);
- alive = alive | aliveAfterThen;
+ alive = alive.or(aliveAfterThen);
} else {
- alive = true;
+ alive = Liveness.ALIVE;
}
}
@@ -776,12 +785,12 @@
}
ListBuffer<PendingExit> prevPending = pendingExits;
- boolean prevAlive = alive;
+ Liveness prevAlive = alive;
try {
pendingExits = new ListBuffer<>();
- alive = true;
+ alive = Liveness.ALIVE;
scanStat(tree.body);
- tree.canCompleteNormally = alive;
+ tree.canCompleteNormally = alive != Liveness.DEAD;
}
finally {
pendingExits = prevPending;
@@ -807,7 +816,7 @@
attrEnv = env;
Flow.this.make = make;
pendingExits = new ListBuffer<>();
- alive = true;
+ alive = Liveness.ALIVE;
scan(tree);
} finally {
pendingExits = null;
@@ -2776,4 +2785,58 @@
}
}
}
+
+ enum Liveness {
+ ALIVE {
+ @Override
+ public Liveness or(Liveness other) {
+ return this;
+ }
+ @Override
+ public Liveness and(Liveness other) {
+ return other;
+ }
+ },
+ DEAD {
+ @Override
+ public Liveness or(Liveness other) {
+ return other;
+ }
+ @Override
+ public Liveness and(Liveness other) {
+ return this;
+ }
+ },
+ RECOVERY {
+ @Override
+ public Liveness or(Liveness other) {
+ if (other == ALIVE) {
+ return ALIVE;
+ } else {
+ return this;
+ }
+ }
+ @Override
+ public Liveness and(Liveness other) {
+ if (other == DEAD) {
+ return DEAD;
+ } else {
+ return this;
+ }
+ }
+ };
+
+ public abstract Liveness or(Liveness other);
+ public abstract Liveness and(Liveness other);
+ public Liveness or(boolean value) {
+ return or(from(value));
+ }
+ public Liveness and(boolean value) {
+ return and(from(value));
+ }
+ public static Liveness from(boolean value) {
+ return value ? ALIVE : DEAD;
+ }
+ }
+
}
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java Wed Nov 21 13:53:17 2018 -0500
@@ -1392,6 +1392,7 @@
case RBRACE: case EOF:
JCSwitchExpression e = to(F.at(switchPos).SwitchExpression(selector,
cases.toList()));
+ e.endpos = token.pos;
accept(RBRACE);
return e;
default:
@@ -3180,13 +3181,13 @@
if (elemType.hasTag(IDENT)) {
Name typeName = ((JCIdent)elemType).name;
if (isRestrictedLocalVarTypeName(typeName, pos, !compound && localDecl)) {
- if (compound) {
- //error - 'var' in compound local var decl
- reportSyntaxError(pos, Errors.VarNotAllowedCompound);
- } else if (type.hasTag(TYPEARRAY)) {
+ if (type.hasTag(TYPEARRAY) && !compound) {
//error - 'var' and arrays
reportSyntaxError(pos, Errors.VarNotAllowedArray);
} else {
+ if(compound)
+ //error - 'var' in compound local var decl
+ reportSyntaxError(pos, Errors.VarNotAllowedCompound);
startPos = TreeInfo.getStartPos(mods);
if (startPos == Position.NOPOS)
startPos = TreeInfo.getStartPos(type);
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Wed Nov 21 13:53:17 2018 -0500
@@ -200,6 +200,14 @@
compiler.err.return.outside.switch.expression=\
return outside of enclosing switch expression
+compiler.err.rule.completes.normally=\
+ switch rule completes without providing a value\n\
+ (switch rules in switch expressions must either provide a value or throw)
+
+compiler.err.switch.expression.completes.normally=\
+ switch expression completes without providing a value\n\
+ (switch expressions must either provide a value or throw for all possible input values)
+
# 0: name
compiler.err.break.ambiguous.target=\
ambiguous reference to ''{0}''\n\
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/JCTree.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/JCTree.java Wed Nov 21 13:53:17 2018 -0500
@@ -1305,6 +1305,8 @@
public static class JCSwitchExpression extends JCPolyExpression implements SwitchExpressionTree {
public JCExpression selector;
public List<JCCase> cases;
+ /** Position of closing brace, optional. */
+ public int endpos = Position.NOPOS;
protected JCSwitchExpression(JCExpression selector, List<JCCase> cases) {
this.selector = selector;
this.cases = cases;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java Wed Nov 21 13:53:17 2018 -0500
@@ -383,6 +383,9 @@
JCTry t = (JCTry) tree;
return endPos((t.finalizer != null) ? t.finalizer
: (t.catchers.nonEmpty() ? t.catchers.last().body : t.body));
+ } else if (tree.hasTag(SWITCH_EXPRESSION) &&
+ ((JCSwitchExpression) tree).endpos != Position.NOPOS) {
+ return ((JCSwitchExpression) tree).endpos;
} else
return tree.pos;
}
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlAttr.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlAttr.java Wed Nov 21 13:53:17 2018 -0500
@@ -39,6 +39,10 @@
*/
public enum HtmlAttr {
ALT,
+ ARIA_CONTROLS("aria-controls"),
+ ARIA_LABELLEDBY("aria-labelledby"),
+ ARIA_ORIENTATION("aria-orientation"),
+ ARIA_SELECTED("aria-selected"),
CLASS,
CLEAR,
COLS,
@@ -51,6 +55,7 @@
LANG,
NAME,
ONCLICK,
+ ONKEYDOWN,
ONLOAD,
REL,
ROLE,
@@ -59,6 +64,7 @@
SCROLLING,
SRC,
SUMMARY,
+ TABINDEX,
TARGET,
TITLE,
TYPE,
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlTag.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlTag.java Wed Nov 21 13:53:17 2018 -0500
@@ -39,6 +39,7 @@
*/
public enum HtmlTag {
A(BlockType.INLINE, EndTag.END),
+ BUTTON(BlockType.INLINE, EndTag.END),
BLOCKQUOTE,
BODY(BlockType.OTHER, EndTag.END),
BR(BlockType.INLINE, EndTag.NOEND),
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Table.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Table.java Wed Nov 21 13:53:17 2018 -0500
@@ -415,47 +415,69 @@
* @return the HTML
*/
public Content toContent() {
+ HtmlTree mainDiv = new HtmlTree(HtmlTag.DIV);
+ mainDiv.setStyle(tableStyle);
HtmlTree table = new HtmlTree(HtmlTag.TABLE);
- table.setStyle(tableStyle);
if (summary != null) {
table.addAttr(HtmlAttr.SUMMARY, summary);
}
- if (tabMap != null) {
- if (tabs.size() == 1) {
+ if (tabMap == null || tabs.size() == 1) {
+ if (tabMap == null) {
+ table.addContent(caption);
+ } else if (tabs.size() == 1) {
String tabName = tabs.iterator().next();
table.addContent(getCaption(new StringContent(tabName)));
- } else {
- ContentBuilder cb = new ContentBuilder();
- int tabIndex = 0;
- HtmlTree defaultTabSpan = new HtmlTree(HtmlTag.SPAN,
- HtmlTree.SPAN(new StringContent(defaultTab)),
- HtmlTree.SPAN(tabEnd, Contents.SPACE))
- .addAttr(HtmlAttr.ID, tabId.apply(tabIndex))
- .setStyle(activeTabStyle);
- cb.addContent(defaultTabSpan);
- for (String tabName : tabMap.keySet()) {
- tabIndex++;
- if (tabs.contains(tabName)) {
- String script = "javascript:" + tabScript.apply(1 << (tabIndex - 1));
- HtmlTree link = HtmlTree.A(script, new StringContent(tabName));
- HtmlTree tabSpan = new HtmlTree(HtmlTag.SPAN,
- HtmlTree.SPAN(link), HtmlTree.SPAN(tabEnd, Contents.SPACE))
- .addAttr(HtmlAttr.ID, tabId.apply(tabIndex))
- .setStyle(tabStyle);
- cb.addContent(tabSpan);
- }
+ }
+ table.addContent(getTableBody());
+ mainDiv.addContent(table);
+ } else {
+ HtmlTree tablist = new HtmlTree(HtmlTag.DIV)
+ .addAttr(HtmlAttr.ROLE, "tablist")
+ .addAttr(HtmlAttr.ARIA_ORIENTATION, "horizontal");
+
+ int tabIndex = 0;
+ tablist.addContent(createTab(tabId.apply(tabIndex), activeTabStyle, true, defaultTab));
+ table.addAttr(HtmlAttr.ARIA_LABELLEDBY, tabId.apply(tabIndex));
+ for (String tabName : tabMap.keySet()) {
+ tabIndex++;
+ if (tabs.contains(tabName)) {
+ String script = tabScript.apply(1 << (tabIndex - 1));
+ HtmlTree tab = createTab(tabId.apply(tabIndex), tabStyle, false, tabName);
+ tab.addAttr(HtmlAttr.ONCLICK, script);
+ tablist.addContent(tab);
}
- table.addContent(HtmlTree.CAPTION(cb));
}
- } else {
- table.addContent(caption);
+ HtmlTree tabpanel = new HtmlTree(HtmlTag.DIV)
+ .addAttr(HtmlAttr.ID, tableStyle + "_tabpanel")
+ .addAttr(HtmlAttr.ROLE, "tabpanel");
+ table.addContent(getTableBody());
+ tabpanel.addContent(table);
+ mainDiv.addContent(tablist);
+ mainDiv.addContent(tabpanel);
}
- table.addContent(header.toContent());
+ return mainDiv;
+ }
+
+ private HtmlTree createTab(String tabId, HtmlStyle style, boolean defaultTab, String tabName) {
+ HtmlTree tab = new HtmlTree(HtmlTag.BUTTON)
+ .addAttr(HtmlAttr.ROLE, "tab")
+ .addAttr(HtmlAttr.ARIA_SELECTED, defaultTab ? "true" : "false")
+ .addAttr(HtmlAttr.ARIA_CONTROLS, tableStyle + "_tabpanel")
+ .addAttr(HtmlAttr.TABINDEX, defaultTab ? "0" : "-1")
+ .addAttr(HtmlAttr.ONKEYDOWN, "switchTab(event)")
+ .addAttr(HtmlAttr.ID, tabId)
+ .setStyle(style);
+ tab.addContent(tabName);
+ return tab;
+ }
+
+ private Content getTableBody() {
+ ContentBuilder tableContent = new ContentBuilder();
+ tableContent.addContent(header.toContent());
Content tbody = new HtmlTree(HtmlTag.TBODY);
bodyRows.forEach(row -> tbody.addContent(row));
- table.addContent(tbody);
-
- return table;
+ tableContent.addContent(tbody);
+ return tableContent;
}
/**
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/script.js Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/script.js Wed Nov 21 13:53:17 2018 -0500
@@ -119,16 +119,23 @@
}
function updateTabs(type) {
+ var firstRow = document.getElementById(Object.keys(data)[0]);
+ var table = firstRow.closest('table');
for (var value in tabs) {
- var sNode = document.getElementById(tabs[value][0]);
- var spanNode = sNode.firstChild;
+ var tab = document.getElementById(tabs[value][0]);
if (value == type) {
- sNode.className = activeTableTab;
- spanNode.innerHTML = tabs[value][1];
+ tab.className = activeTableTab;
+ tab.innerHTML = tabs[value][1];
+ tab.setAttribute('aria-selected', true);
+ tab.setAttribute('tabindex',0);
+ table.setAttribute('aria-labelledby', tabs[value][0]);
}
else {
- sNode.className = tableTab;
- spanNode.innerHTML = "<a href=\"javascript:show("+ value + ");\">" + tabs[value][1] + "</a>";
+ tab.className = tableTab;
+ tab.setAttribute('aria-selected', false);
+ tab.setAttribute('tabindex',-1);
+ tab.setAttribute('onclick', "show("+ value + ")");
+ tab.innerHTML = tabs[value][1];
}
}
}
@@ -137,3 +144,13 @@
top.packageFrame.location = pFrame;
top.classFrame.location = cFrame;
}
+function switchTab(e) {
+ if (e.keyCode == 37 || e.keyCode == 38) {
+ $("[aria-selected=true]").prev().click().focus();
+ e.preventDefault();
+ }
+ if (e.keyCode == 39 || e.keyCode == 40) {
+ $("[aria-selected=true]").next().click().focus();
+ e.preventDefault();
+ }
+}
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css Wed Nov 21 13:53:17 2018 -0500
@@ -94,7 +94,10 @@
sup {
font-size:8px;
}
-
+button {
+ font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif;
+ font-size: 14px;
+}
/*
* Styles for HTML generated by javadoc.
*
@@ -420,15 +423,15 @@
/*
* Styles for tables.
*/
-.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary,
-.requiresSummary, .packagesSummary, .providesSummary, .usesSummary {
+.overviewSummary table, .memberSummary table, .typeSummary table, .useSummary table, .constantsSummary table, .deprecatedSummary table,
+.requiresSummary table, .packagesSummary table, .providesSummary table, .usesSummary table {
width:100%;
border-spacing:0;
- border-left:1px solid #EEE;
- border-right:1px solid #EEE;
- border-bottom:1px solid #EEE;
+ border-left:1px solid #EEE;
+ border-right:1px solid #EEE;
+ border-bottom:1px solid #EEE;
}
-.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary {
+.overviewSummary table, .memberSummary table, .requiresSummary table, .packagesSummary table, .providesSummary table, .usesSummary table {
padding:0px;
}
.overviewSummary caption, .memberSummary caption, .typeSummary caption,
@@ -484,41 +487,6 @@
border: none;
height:16px;
}
-.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span,
-.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span {
- white-space:nowrap;
- padding-top:5px;
- padding-left:12px;
- padding-right:12px;
- margin-right:3px;
- display:inline-block;
- float:left;
- background-color:#F8981D;
- height:16px;
-}
-.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span,
-.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span {
- white-space:nowrap;
- padding-top:5px;
- padding-left:12px;
- padding-right:12px;
- margin-right:3px;
- display:inline-block;
- float:left;
- background-color:#4D7A97;
- height:16px;
-}
-.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab,
-.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab,
-.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab,
-.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab {
- padding-top:0px;
- padding-left:0px;
- padding-right:0px;
- background-image:none;
- float:none;
- display:inline;
-}
.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd,
.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd,
.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd {
@@ -528,23 +496,23 @@
float:left;
background-color:#F8981D;
}
-.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd,
-.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd {
- display:none;
- width:5px;
- margin-right:3px;
- position:relative;
- float:left;
- background-color:#F8981D;
+.overviewSummary [role=tablist] button, .memberSummary [role=tablist] button,
+.typeSummary [role=tablist] button, .packagesSummary [role=tablist] button {
+ border: none;
+ cursor: pointer;
+ padding: 5px 12px 7px 12px;
+ font-weight: bold;
+ margin-right: 3px;
}
-.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd,
-.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd {
- display:none;
- width:5px;
- margin-right:3px;
- position:relative;
- background-color:#4D7A97;
- float:left;
+.overviewSummary [role=tablist] .activeTableTab, .memberSummary [role=tablist] .activeTableTab,
+.typeSummary [role=tablist] .activeTableTab, .packagesSummary [role=tablist] .activeTableTab {
+ background: #F8981D;
+ color: #253441;
+}
+.overviewSummary [role=tablist] .tableTab, .memberSummary [role=tablist] .tableTab,
+.typeSummary [role=tablist] .tableTab, .packagesSummary [role=tablist] .tableTab {
+ background: #4D7A97;
+ color: #FFFFFF;
}
.rowColor th, .altColor th {
font-weight:normal;
--- a/src/jdk.jdi/share/classes/com/sun/jdi/doc-files/signature.html Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.jdi/share/classes/com/sun/jdi/doc-files/signature.html Wed Nov 21 13:53:17 2018 -0500
@@ -1,4 +1,29 @@
<!DOCTYPE HTML>
+<!--
+ Copyright (c) 2018, 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.
+-->
+
<HTML lang="EN">
<HEAD>
<TITLE>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.jfr/share/classes/jdk/jfr/events/CertificateId.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2018, 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.jfr.events;
+
+import jdk.jfr.Label;
+import jdk.jfr.Relational;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Label("X509 Certificate Id")
+@Relational
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface CertificateId {
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2018, 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.jfr.events;
+
+import jdk.jfr.*;
+import jdk.jfr.internal.MirrorEvent;
+
+@Category({"Java Development Kit", "Security"})
+@Label("Security Property Modification")
+@Name("jdk.SecurityPropertyModification")
+@Description("Modification of Security property")
+@MirrorEvent(className = "jdk.internal.event.SecurityPropertyModificationEvent")
+public final class SecurityPropertyModificationEvent extends AbstractJDKEvent {
+ @Label("Key")
+ public String key;
+
+ @Label("Value")
+ public String value;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2018, 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.jfr.events;
+
+import jdk.jfr.Category;
+import jdk.jfr.Description;
+import jdk.jfr.Label;
+import jdk.jfr.Name;
+import jdk.jfr.internal.MirrorEvent;
+
+@Category({"Java Development Kit", "Security"})
+@Label("TLS Handshake")
+@Name("jdk.TLSHandshake")
+@Description("Parameters used in TLS Handshake")
+@MirrorEvent(className = "jdk.internal.event.TLSHandshakeEvent")
+public final class TLSHandshakeEvent extends AbstractJDKEvent {
+ @Label("Peer Host")
+ public String peerHost;
+
+ @Label("Peer Port")
+ public int peerPort;
+
+ @Label("Protocol Version")
+ public String protocolVersion;
+
+ @Label("Cipher Suite")
+ public String cipherSuite;
+
+ @Label("Certificate Id")
+ @Description("Peer Certificate Id")
+ @CertificateId
+ public long certificateId;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.jfr/share/classes/jdk/jfr/events/X509CertificateEvent.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2018, 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.jfr.events;
+
+import jdk.jfr.*;
+import jdk.jfr.internal.MirrorEvent;
+
+@Category({"Java Development Kit", "Security"})
+@Label("X509 Certificate")
+@Name("jdk.X509Certificate")
+@Description("Details of X.509 Certificate parsed by JDK")
+@MirrorEvent(className = "jdk.internal.event.X509CertificateEvent")
+public final class X509CertificateEvent extends AbstractJDKEvent {
+ @Label("Signature Algorithm")
+ public String algorithm;
+
+ @Label("Serial Number")
+ public String serialNumber;
+
+ @Label("Subject")
+ public String subject;
+
+ @Label("Issuer")
+ public String issuer;
+
+ @Label("Key Type")
+ public String keyType;
+
+ @Label("Key Length")
+ public int keyLength;
+
+ @Label("Certificate Id")
+ @CertificateId
+ public long certificateId;
+
+ @Label("Valid From")
+ @Timestamp(Timestamp.MILLISECONDS_SINCE_EPOCH)
+ public long validFrom;
+
+ @Label("Valid Until")
+ @Timestamp(Timestamp.MILLISECONDS_SINCE_EPOCH)
+ public long validUntil;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.jfr/share/classes/jdk/jfr/events/X509ValidationEvent.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2018, 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.jfr.events;
+
+import jdk.jfr.*;
+import jdk.jfr.internal.MirrorEvent;
+
+@Category({"Java Development Kit", "Security"})
+@Label("X509 Validation")
+@Name("jdk.X509Validation")
+@Description("Serial numbers from X.509 Certificates forming chain of trust")
+@MirrorEvent(className = "jdk.internal.event.X509ValidationEvent")
+public final class X509ValidationEvent extends AbstractJDKEvent {
+ @CertificateId
+ @Label("Certificate Id")
+ public long certificateId;
+
+ @Label("Certificate Position")
+ @Description("Certificate position in chain of trust, 1 = trust anchor")
+ public int certificatePosition;
+
+ @Label("Validation Counter")
+ public long validationCounter;
+}
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java Wed Nov 21 13:53:17 2018 -0500
@@ -39,8 +39,12 @@
import jdk.jfr.events.FileForceEvent;
import jdk.jfr.events.FileReadEvent;
import jdk.jfr.events.FileWriteEvent;
+import jdk.jfr.events.SecurityPropertyModificationEvent;
import jdk.jfr.events.SocketReadEvent;
import jdk.jfr.events.SocketWriteEvent;
+import jdk.jfr.events.TLSHandshakeEvent;
+import jdk.jfr.events.X509CertificateEvent;
+import jdk.jfr.events.X509ValidationEvent;
import jdk.jfr.internal.JVM;
import jdk.jfr.internal.LogLevel;
import jdk.jfr.internal.LogTag;
@@ -52,6 +56,10 @@
public final class JDKEvents {
private static final Class<?>[] mirrorEventClasses = {
+ SecurityPropertyModificationEvent.class,
+ TLSHandshakeEvent.class,
+ X509CertificateEvent.class,
+ X509ValidationEvent.class
};
private static final Class<?>[] eventClasses = {
@@ -64,7 +72,11 @@
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
- ActiveRecordingEvent.class
+ ActiveRecordingEvent.class,
+ jdk.internal.event.SecurityPropertyModificationEvent.class,
+ jdk.internal.event.TLSHandshakeEvent.class,
+ jdk.internal.event.X509CertificateEvent.class,
+ jdk.internal.event.X509ValidationEvent.class
};
// This is a list of the classes with instrumentation code that should be applied.
--- a/src/jdk.jfr/share/conf/jfr/default.jfc Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.jfr/share/conf/jfr/default.jfc Wed Nov 21 13:53:17 2018 -0500
@@ -593,6 +593,26 @@
<setting name="threshold" control="socket-io-threshold">20 ms</setting>
</event>
+ <event name="jdk.SecurityPropertyModification">
+ <setting name="enabled">false</setting>
+ <setting name="stackTrace">true</setting>
+ </event>
+
+ <event name="jdk.TLSHandshake">
+ <setting name="enabled">false</setting>
+ <setting name="stackTrace">true</setting>
+ </event>
+
+ <event name="jdk.X509Validation">
+ <setting name="enabled">false</setting>
+ <setting name="stackTrace">true</setting>
+ </event>
+
+ <event name="jdk.X509Certificate">
+ <setting name="enabled">false</setting>
+ <setting name="stackTrace">true</setting>
+ </event>
+
<event name="jdk.JavaExceptionThrow">
<setting name="enabled" control="enable-exceptions">false</setting>
<setting name="stackTrace">true</setting>
--- a/src/jdk.jfr/share/conf/jfr/profile.jfc Wed Nov 21 13:20:52 2018 -0500
+++ b/src/jdk.jfr/share/conf/jfr/profile.jfc Wed Nov 21 13:53:17 2018 -0500
@@ -593,6 +593,26 @@
<setting name="threshold" control="socket-io-threshold">10 ms</setting>
</event>
+ <event name="jdk.SecurityPropertyModification">
+ <setting name="enabled">false</setting>
+ <setting name="stackTrace">true</setting>
+ </event>
+
+ <event name="jdk.TLSHandshake">
+ <setting name="enabled">false</setting>
+ <setting name="stackTrace">true</setting>
+ </event>
+
+ <event name="jdk.X509Validation">
+ <setting name="enabled">false</setting>
+ <setting name="stackTrace">true</setting>
+ </event>
+
+ <event name="jdk.X509Certificate">
+ <setting name="enabled">false</setting>
+ <setting name="stackTrace">true</setting>
+ </event>
+
<event name="jdk.JavaExceptionThrow">
<setting name="enabled" control="enable-exceptions">false</setting>
<setting name="stackTrace">true</setting>
--- a/test/hotspot/gtest/gc/shared/test_ptrQueueBufferAllocator.cpp Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/gtest/gc/shared/test_ptrQueueBufferAllocator.cpp Wed Nov 21 13:53:17 2018 -0500
@@ -39,7 +39,7 @@
for (size_t i = 0; i < node_count; ++i) {
ASSERT_EQ(0u, allocator.free_count());
nodes[i] = allocator.allocate();
- ASSERT_EQ(NULL, nodes[i]->next());
+ ASSERT_EQ((BufferNode*)NULL, nodes[i]->next());
}
// Release the nodes, adding them to the allocator's free list.
@@ -47,7 +47,7 @@
ASSERT_EQ(i, allocator.free_count());
allocator.release(nodes[i]);
if (i == 0) {
- ASSERT_EQ(NULL, nodes[i]->next());
+ ASSERT_EQ((BufferNode*)NULL, nodes[i]->next());
} else {
ASSERT_EQ(nodes[i - 1], nodes[i]->next());
}
--- a/test/hotspot/gtest/threadHelper.inline.hpp Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/gtest/threadHelper.inline.hpp Wed Nov 21 13:53:17 2018 -0500
@@ -33,21 +33,22 @@
class VM_StopSafepoint : public VM_Operation {
public:
+ Semaphore* _running;
Semaphore* _test_complete;
- VM_StopSafepoint(Semaphore* wait_for) : _test_complete(wait_for) {}
+ VM_StopSafepoint(Semaphore* running, Semaphore* wait_for) :
+ _running(running), _test_complete(wait_for) {}
VMOp_Type type() const { return VMOp_None; }
Mode evaluation_mode() const { return _no_safepoint; }
bool is_cheap_allocated() const { return false; }
- void doit() { _test_complete->wait(); }
+ void doit() { _running->signal(); _test_complete->wait(); }
};
// This class and thread keep the non-safepoint op running while we do our testing.
class VMThreadBlocker : public JavaThread {
public:
- Semaphore* _unblock;
- Semaphore* _done;
- VMThreadBlocker(Semaphore* ub, Semaphore* done) : _unblock(ub), _done(done) {
- }
+ Semaphore _ready;
+ Semaphore _unblock;
+ VMThreadBlocker() {}
virtual ~VMThreadBlocker() {}
void run() {
this->set_thread_state(_thread_in_vm);
@@ -55,9 +56,8 @@
MutexLocker ml(Threads_lock);
Threads::add(this);
}
- VM_StopSafepoint ss(_unblock);
+ VM_StopSafepoint ss(&_ready, &_unblock);
VMThread::execute(&ss);
- _done->signal();
Threads::remove(this);
this->smr_delete();
}
@@ -68,6 +68,12 @@
ASSERT_TRUE(false);
}
}
+ void ready() {
+ _ready.wait();
+ }
+ void release() {
+ _unblock.signal();
+ }
};
// For testing in a real JavaThread.
@@ -130,26 +136,32 @@
template <typename TESTFUNC>
static void nomt_test_doer(TESTFUNC &f) {
- Semaphore post, block_done, vmt_done;
- VMThreadBlocker* blocker = new VMThreadBlocker(&block_done, &vmt_done);
+ Semaphore post;
+
+ VMThreadBlocker* blocker = new VMThreadBlocker();
blocker->doit();
+ blocker->ready();
+
SingleTestThread<TESTFUNC>* stt = new SingleTestThread<TESTFUNC>(&post, f);
stt->doit();
post.wait();
- block_done.signal();
- vmt_done.wait();
+
+ blocker->release();
}
template <typename RUNNER>
static void mt_test_doer() {
- Semaphore post, block_done, vmt_done;
- VMThreadBlocker* blocker = new VMThreadBlocker(&block_done, &vmt_done);
+ Semaphore post;
+
+ VMThreadBlocker* blocker = new VMThreadBlocker();
blocker->doit();
+ blocker->ready();
+
RUNNER* runner = new RUNNER(&post);
runner->doit();
post.wait();
- block_done.signal();
- vmt_done.wait();
+
+ blocker->release();
}
#endif // include guard
--- a/test/hotspot/jtreg/ProblemList.txt Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/ProblemList.txt Wed Nov 21 13:53:17 2018 -0500
@@ -139,6 +139,8 @@
serviceability/sa/TestType.java 8193639 solaris-all
serviceability/sa/TestUniverse.java#id0 8193639,8211767 solaris-all,linux-ppc64le,linux-ppc64
+serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorStatIntervalTest.java 8214032 generic-all
+
#############################################################################
# :hotspot_misc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/arguments/TestScavengeRootsInCode.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2018, 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 8214025
+ * @summary Test compilation with non-default value for ScavengeRootsInCode.
+ * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -Xcomp -XX:-TieredCompilation
+ * -XX:ScavengeRootsInCode=1 compiler.arguments.TestScavengeRootsInCode
+ */
+
+package compiler.arguments;
+
+public class TestScavengeRootsInCode {
+
+ static public void main(String[] args) {
+ System.out.println("Passed");
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/compiler/integerArithmetic/MultiplyByIntegerMinHang.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2018, Red Hat, Inc. 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 8213419
+ * @summary C2 may hang in MulLNode::Ideal()/MulINode::Ideal() with gcc 8.2.1
+ *
+ * @run main/othervm -XX:-TieredCompilation -XX:-BackgroundCompilation -XX:-UseOnStackReplacement MultiplyByIntegerMinHang
+ *
+ */
+
+public class MultiplyByIntegerMinHang {
+ public static void main(String[] args) {
+ for (int i = 0; i < 20_000; i++) {
+ if (test1(0) != 0) {
+ throw new RuntimeException("incorrect result");
+ }
+ if (test1(1) != Integer.MIN_VALUE) {
+ throw new RuntimeException("incorrect result");
+ }
+ if (test1(2) != 0) {
+ throw new RuntimeException("incorrect result");
+ }
+ if (test2(0) != 0) {
+ throw new RuntimeException("incorrect result");
+ }
+ if (test2(1) != Long.MIN_VALUE) {
+ throw new RuntimeException("incorrect result");
+ }
+ if (test2(2) != 0) {
+ throw new RuntimeException("incorrect result");
+ }
+ }
+ }
+
+ private static int test1(int v) {
+ return v * Integer.MIN_VALUE;
+ }
+
+ private static long test2(long v) {
+ return v * Long.MIN_VALUE;
+ }
+}
--- a/test/hotspot/jtreg/runtime/NMT/MallocStressTest.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/runtime/NMT/MallocStressTest.java Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, 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
@@ -175,7 +175,7 @@
public void run() {
Random random = new Random();
while (MallocStressTest.phase == TestPhase.alloc) {
- int r = Math.abs(random.nextInt());
+ int r = random.nextInt(Integer.MAX_VALUE);
// Only malloc small amount to avoid OOM
int size = r % 32;
if (is_64_bit_system()) {
@@ -259,7 +259,7 @@
}
synchronized(MallocStressTest.mallocd_memory) {
if (MallocStressTest.mallocd_memory.isEmpty()) return;
- int n = Math.abs(random.nextInt()) % MallocStressTest.mallocd_memory.size();
+ int n = random.nextInt(MallocStressTest.mallocd_memory.size());
MallocMemory mem = mallocd_memory.remove(n);
MallocStressTest.whiteBox.NMTFree(mem.addr());
MallocStressTest.mallocd_total -= mem.size();
--- a/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/ReplaceCriticalClasses.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/ReplaceCriticalClasses.java Wed Nov 21 13:53:17 2018 -0500
@@ -152,30 +152,11 @@
klassName);
final boolean expectDisable = !early.equals("");
- final boolean checkSubgraph = subgraph;
CDSTestUtils.run(opts).assertNormalExit(out -> {
if (expectDisable) {
out.shouldContain("UseSharedSpaces: CDS is disabled because early JVMTI ClassFileLoadHook is in use.");
System.out.println("CDS disabled as expected");
}
- if (checkSubgraph) {
- // As of 2018/10/21 the classes in the archived subgraphs won't be
- // replaced because all archived subgraphs were loaded in JVMTI_PHASE_PRIMORDIAL.
- //
- // This is the first class to be loaded after JVMTI has exited JVMTI_PHASE_PRIMORDIAL.
- // Make sure no subgraphs are loaded afterwards.
- //
- // Can't use out.shouldNotMatch() because that doesn't match across multiple lines.
- String firstNonPrimordialClass = "jdk.jfr.internal.EventWriter";
- String regexp = firstNonPrimordialClass + ".*initialize_from_archived_subgraph";
- Pattern regex = Pattern.compile(regexp, Pattern.DOTALL);
- Matcher matcher = regex.matcher(out.getStdout());
- if (matcher.find()) {
- out.reportDiagnosticSummary();
- throw new RuntimeException("'" + regexp
- + "' found in stdout: '" + matcher.group() + "' \n");
- }
- }
});
}
--- a/test/hotspot/jtreg/runtime/appcds/AppCDSOptions.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/runtime/appcds/AppCDSOptions.java Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, 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,17 +29,8 @@
public class AppCDSOptions extends CDSOptions {
public String appJar;
- // Application classes to be archived
- public String[] appClasses;
-
public AppCDSOptions setAppJar(String appJar) {
this.appJar = appJar;
return this;
}
-
- public AppCDSOptions setAppClasses(String[] appClasses) {
- this.appClasses = appClasses;
- return this;
- }
-
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/LotsOfClasses.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2018, 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.
+ *
+ */
+
+import java.net.URI;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import jdk.test.lib.cds.CDSTestUtils;
+import jdk.test.lib.cds.CDSOptions;
+import jdk.test.lib.process.OutputAnalyzer;
+
+/*
+ * @test
+ * @summary Try to archive lots of classes by searching for classes from the jrt:/ file system. With JDK 12
+ * this will produce an archive with over 30,000 classes.
+ * @requires vm.cds
+ * @library /test/lib
+ * @run driver/timeout=500 LotsOfClasses
+ */
+
+public class LotsOfClasses {
+ static Pattern pattern;
+
+ public static void main(String[] args) throws Throwable {
+ ArrayList<String> list = new ArrayList<>();
+ findAllClasses(list);
+
+ CDSOptions opts = new CDSOptions();
+ opts.setClassList(list);
+ opts.addSuffix("--add-modules");
+ opts.addSuffix("ALL-SYSTEM");
+ opts.addSuffix("-Xlog:hashtables");
+
+ OutputAnalyzer out = CDSTestUtils.createArchive(opts);
+ CDSTestUtils.checkDump(out);
+ }
+
+ static void findAllClasses(ArrayList<String> list) throws Throwable {
+ // Find all the classes in the jrt file system
+ pattern = Pattern.compile("/modules/[a-z.]*[a-z]+/([^-]*)[.]class");
+ FileSystem fs = FileSystems.getFileSystem(URI.create("jrt:/"));
+ Path base = fs.getPath("/modules/");
+ find(base, list);
+ }
+
+ static void find(Path p, ArrayList<String> list) throws Throwable {
+ try (DirectoryStream<Path> stream = Files.newDirectoryStream(p)) {
+ for (Path entry: stream) {
+ Matcher matcher = pattern.matcher(entry.toString());
+ if (matcher.find()) {
+ String className = matcher.group(1);
+ list.add(className);
+ //System.out.println(className);
+ }
+ try {
+ find(entry, list);
+ } catch (Throwable t) {}
+ }
+ }
+ }
+}
--- a/test/hotspot/jtreg/runtime/appcds/TestCommon.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/runtime/appcds/TestCommon.java Wed Nov 21 13:53:17 2018 -0500
@@ -95,17 +95,17 @@
// Create AppCDS archive using most common args - convenience method
// Legacy name preserved for compatibility
- public static OutputAnalyzer dump(String appJar, String appClasses[],
+ public static OutputAnalyzer dump(String appJar, String classList[],
String... suffix) throws Exception {
- return createArchive(appJar, appClasses, suffix);
+ return createArchive(appJar, classList, suffix);
}
// Create AppCDS archive using most common args - convenience method
- public static OutputAnalyzer createArchive(String appJar, String appClasses[],
+ public static OutputAnalyzer createArchive(String appJar, String classList[],
String... suffix) throws Exception {
- AppCDSOptions opts = (new AppCDSOptions()).setAppJar(appJar)
- .setAppClasses(appClasses);
+ AppCDSOptions opts = (new AppCDSOptions()).setAppJar(appJar);
+ opts.setClassList(classList);
opts.addSuffix(suffix);
return createArchive(opts);
}
@@ -115,7 +115,6 @@
throws Exception {
ArrayList<String> cmd = new ArrayList<String>();
- File classList = makeClassList(opts.appClasses);
startNewArchiveName();
for (String p : opts.prefix) cmd.add(p);
@@ -129,13 +128,17 @@
}
cmd.add("-Xshare:dump");
- cmd.add("-XX:ExtraSharedClassListFile=" + classList.getPath());
if (opts.archiveName == null)
opts.archiveName = getCurrentArchiveName();
cmd.add("-XX:SharedArchiveFile=" + opts.archiveName);
+ if (opts.classList != null) {
+ File classListFile = makeClassList(opts.classList);
+ cmd.add("-XX:ExtraSharedClassListFile=" + classListFile.getPath());
+ }
+
for (String s : opts.suffix) cmd.add(s);
String[] cmdLine = cmd.toArray(new String[cmd.size()]);
@@ -235,9 +238,9 @@
// A common operation: dump, then check results
- public static OutputAnalyzer testDump(String appJar, String appClasses[],
+ public static OutputAnalyzer testDump(String appJar, String classList[],
String... suffix) throws Exception {
- OutputAnalyzer output = dump(appJar, appClasses, suffix);
+ OutputAnalyzer output = dump(appJar, classList, suffix);
output.shouldContain("Loading classes to share");
output.shouldHaveExitValue(0);
return output;
@@ -245,11 +248,11 @@
/**
- * Simple test -- dump and execute appJar with the given appClasses in classlist.
+ * Simple test -- dump and execute appJar with the given classList in classlist.
*/
- public static OutputAnalyzer test(String appJar, String appClasses[], String... args)
+ public static OutputAnalyzer test(String appJar, String classList[], String... args)
throws Exception {
- testDump(appJar, appClasses);
+ testDump(appJar, classList);
OutputAnalyzer output = exec(appJar, args);
return checkExec(output);
--- a/test/hotspot/jtreg/runtime/appcds/cacheObject/ArchivedIntegerCacheTest.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/ArchivedIntegerCacheTest.java Wed Nov 21 13:53:17 2018 -0500
@@ -24,7 +24,7 @@
/*
* @test
- * @summary Test IntegerCache integrity in various scenarios
+ * @summary Test primitive box caches integrity in various scenarios (IntegerCache etc)
* @requires vm.cds.archived.java.heap
* @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/appcds
* @modules java.base/jdk.internal.misc
@@ -32,7 +32,7 @@
* jdk.jartool/sun.tools.jar
* @build sun.hotspot.WhiteBox
* @compile CheckIntegerCacheApp.java
- * @run driver ClassFileInstaller -jar integer.jar CheckIntegerCacheApp
+ * @run driver ClassFileInstaller -jar boxCache.jar CheckIntegerCacheApp
* @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox
* @run driver ArchivedIntegerCacheTest
*/
@@ -47,7 +47,7 @@
public static void main(String[] args) throws Exception {
String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar");
String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar;
- String appJar = ClassFileInstaller.getJarPath("integer.jar");
+ String appJar = ClassFileInstaller.getJarPath("boxCache.jar");
Path userDir = Paths.get(System.getProperty("user.dir"));
Path moduleDir = Files.createTempDirectory(userDir, "mods");
--- a/test/hotspot/jtreg/runtime/appcds/cacheObject/CheckIntegerCacheApp.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/CheckIntegerCacheApp.java Wed Nov 21 13:53:17 2018 -0500
@@ -25,11 +25,13 @@
import sun.hotspot.WhiteBox;
//
-// Help test archived integer cache consistency.
+// Help test archived box cache consistency.
//
// Takes two arguments:
-// 0: the expected AutoBoxCacheMax setting
+// 0: the expected maximum value expected to be archived
// 1: if the values are expected to be retrieved from the archive or not
+// (only applies to IntegerCache; other caches should always be mapped
+// from archive)
//
public class CheckIntegerCacheApp {
static WhiteBox wb;
@@ -55,7 +57,31 @@
throw new RuntimeException(
"FAILED. All values in range [-128, 127] should be interned in cache: " + i);
}
- checkArchivedAsExpected(archivedExpected, i);
+ if (Byte.valueOf((byte)i) != Byte.valueOf((byte)i)) {
+ throw new RuntimeException(
+ "FAILED. All Byte values in range [-128, 127] should be interned in cache: " + (byte)i);
+ }
+ if (Short.valueOf((short)i) != Short.valueOf((short)i)) {
+ throw new RuntimeException(
+ "FAILED. All Short values in range [-128, 127] should be interned in cache: " + (byte)i);
+ }
+ if (Long.valueOf(i) != Long.valueOf(i)) {
+ throw new RuntimeException(
+ "FAILED. All Long values in range [-128, 127] should be interned in cache: " + i);
+ }
+ checkArchivedAsExpected(archivedExpected, Integer.valueOf(i));
+ checkArchivedAsExpected(true, Byte.valueOf((byte)i));
+ checkArchivedAsExpected(true, Short.valueOf((short)i));
+ checkArchivedAsExpected(true, Long.valueOf(i));
+
+ // Character cache only values 0 through 127
+ if (i >= 0) {
+ if (Character.valueOf((char)i) != Character.valueOf((char)i)) {
+ throw new RuntimeException(
+ "FAILED. All Character values in range [0, 127] should be interned in cache: " + i);
+ }
+ checkArchivedAsExpected(true, Character.valueOf((char)i));
+ }
}
int high = Integer.parseInt(args[0]);
@@ -70,18 +96,23 @@
"FAILED. Value not expected to be retrieved from cache: " + high);
}
checkArchivedAsExpected(false, Integer.valueOf(high + 1));
+ checkArchivedAsExpected(false, Short.valueOf((short)128));
+ checkArchivedAsExpected(false, Long.valueOf(128));
+ checkArchivedAsExpected(false, Character.valueOf((char)128));
}
- private static void checkArchivedAsExpected(boolean archivedExpected, Integer value) {
+ private static void checkArchivedAsExpected(boolean archivedExpected, Object value) {
if (archivedExpected) {
- if (!wb.isShared(Integer.valueOf(value))) {
+ if (!wb.isShared(value)) {
throw new RuntimeException(
- "FAILED. Value expected to be archived: " + value);
+ "FAILED. Value expected to be archived: " + value +
+ " of type " + value.getClass().getName());
}
} else {
- if (wb.isShared(Integer.valueOf(value))) {
+ if (wb.isShared(value)) {
throw new RuntimeException(
- "FAILED. Value not expected to be archived: " + value);
+ "FAILED. Value not expected to be archived: " + value +
+ " of type " + value.getClass().getName());
}
}
}
--- a/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except001.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except001.java Wed Nov 21 13:53:17 2018 -0500
@@ -262,7 +262,7 @@
* @see #run(String[], PrintStream)
*/
public static void main(String args[]) {
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
// Last try. If there is some exception outside the code, test should end correctly
@Override
public void uncaughtException(Thread t, Throwable e) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except002.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except002.java Wed Nov 21 13:53:17 2018 -0500
@@ -257,7 +257,7 @@
* @see #run(String[], PrintStream)
*/
public static void main(String args[]) {
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
// Last try. If there is some exception outside the code, test should end correctly
@Override
public void uncaughtException(Thread t, Throwable e) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except003.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except003.java Wed Nov 21 13:53:17 2018 -0500
@@ -258,7 +258,7 @@
* @see #run(String[], PrintStream)
*/
public static void main(String args[]) {
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
// Last try. If there is some exception outside the code, test should end correctly
@Override
public void uncaughtException(Thread t, Throwable e) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except004.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except004.java Wed Nov 21 13:53:17 2018 -0500
@@ -476,7 +476,7 @@
* @see #run(String[], PrintStream)
*/
public static void main(String args[]) {
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
// Last try. If there is some exception outside the code, test should end correctly
@Override
public void uncaughtException(Thread t, Throwable e) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except005.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except005.java Wed Nov 21 13:53:17 2018 -0500
@@ -261,7 +261,7 @@
* @see #run(String[], PrintStream)
*/
public static void main(String args[]) {
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
// Last try. If there is some OOME, test should end correctly
@Override
public void uncaughtException(Thread t, Throwable e) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except006.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except006.java Wed Nov 21 13:53:17 2018 -0500
@@ -258,7 +258,7 @@
* @see #run(String[], PrintStream)
*/
public static void main(String args[]) {
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
// Last try. If there is some exception outside the code, test should end correctly
@Override
public void uncaughtException(Thread t, Throwable e) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except007.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except007.java Wed Nov 21 13:53:17 2018 -0500
@@ -350,7 +350,7 @@
* @see #run(String[], PrintStream)
*/
public static void main(String args[]) {
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
// Last try. If there is some exception outside the code, test should end correctly
@Override
public void uncaughtException(Thread t, Throwable e) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except008.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except008.java Wed Nov 21 13:53:17 2018 -0500
@@ -333,7 +333,7 @@
* @see #run(String[], PrintStream)
*/
public static void main(String args[]) {
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
// Last try. If there is some exception outside the code, test should end correctly
@Override
public void uncaughtException(Thread t, Throwable e) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except009.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except009.java Wed Nov 21 13:53:17 2018 -0500
@@ -258,7 +258,7 @@
* @see #run(String[], PrintStream)
*/
public static void main(String args[]) {
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
// Last try. If there is some exceprions outside the code, test should end correctly
@Override
public void uncaughtException(Thread t, Throwable e) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except010.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except010.java Wed Nov 21 13:53:17 2018 -0500
@@ -261,7 +261,7 @@
* @see #run(String[], PrintStream)
*/
public static void main(String args[]) {
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
// Last try. If there is some exceptions outside the code, test should end correctly
@Override
public void uncaughtException(Thread t, Throwable e) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except011.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except011.java Wed Nov 21 13:53:17 2018 -0500
@@ -266,7 +266,7 @@
* @see #run(String[], PrintStream)
*/
public static void main(String args[]) {
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
// Last try. If there is some OOME, test should end correctly
@Override
public void uncaughtException(Thread t, Throwable e) {
--- a/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except012.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/except/except012.java Wed Nov 21 13:53:17 2018 -0500
@@ -334,7 +334,7 @@
* @see #run(String[], PrintStream)
*/
public static void main(String args[]) {
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
// Last try. If there is some OOME, test should end correctly
@Override
public void uncaughtException(Thread t, Throwable e) {
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupport.xml Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupport.xml Wed Nov 21 13:53:17 2018 -0500
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<!-- DTDs and external entities -->
- <system systemId="http://openjdk.java.net/xml/catalog/dtd/system.dtd" uri="system.dtd"/>
+ <system systemId="http://openjdk_java_net/xml/catalog/dtd/system.dtd" uri="system.dtd"/>
<!-- XMLSchema refers to XMLSchema.dtd -->
<public publicId="-//W3C//DTD XMLSCHEMA 200102//EN" uri="XMLSchema.dtd"/>
@@ -35,8 +35,8 @@
<system systemId="pathto/XSLInclude_header.xsl" uri="XSLInclude_header.xsl"/>
<system systemId="pathto/XSLInclude_footer.xsl" uri="XSLInclude_footer.xsl"/>
<!-- and DTDs -->
- <system systemId="http://openjdk.java.net/xml/catalog/dtd/XSLDTD.dtd" uri="XSLDTD.dtd"/>
- <system systemId="http://openjdk.java.net/xml/catalog/dtd/include.dtd" uri="include.dtd"/>
+ <system systemId="http://openjdk_java_net/xml/catalog/dtd/XSLDTD.dtd" uri="XSLDTD.dtd"/>
+ <system systemId="http://openjdk_java_net/xml/catalog/dtd/include.dtd" uri="include.dtd"/>
<!-- XSLT document function -->
<system systemId="pathto/DocFunc2.xml" uri="DocFuncCatalog.xml"/>
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupport2.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupport2.java Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, 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
@@ -81,6 +81,7 @@
public void setUpClass() throws Exception {
setUp();
setSystemProperty(SP_USE_CATALOG, "false");
+ setSystemProperty(SP_ACCESS_EXTERNAL_DTD, "file");
timeoutRead = getSystemProperty(TTIMEOUTREAD);
timeoutConnect = getSystemProperty(TIMEOUTCONNECT);
setSystemProperty(TTIMEOUTREAD, "1000");
@@ -90,6 +91,7 @@
@AfterClass
public void tearDownClass() throws Exception {
clearSystemProperty(SP_USE_CATALOG);
+ clearSystemProperty(SP_ACCESS_EXTERNAL_DTD);
setSystemProperty(TIMEOUTCONNECT, "-1");
setSystemProperty(TTIMEOUTREAD, "-1");
}
@@ -97,7 +99,7 @@
/*
Verifies the Catalog support on SAXParser.
*/
- @Test(dataProvider = "data_SAXC", expectedExceptions = IOException.class)
+ @Test(dataProvider = "data_SAXC", expectedExceptions = SAXParseException.class)
public void testSAXC(boolean setUseCatalog, boolean useCatalog, String catalog, String
xml, MyHandler handler, String expected) throws Exception {
testSAX(setUseCatalog, useCatalog, catalog, xml, handler, expected);
@@ -106,7 +108,7 @@
/*
Verifies the Catalog support on XMLReader.
*/
- @Test(dataProvider = "data_SAXC", expectedExceptions = IOException.class)
+ @Test(dataProvider = "data_SAXC", expectedExceptions = SAXParseException.class)
public void testXMLReaderC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testXMLReader(setUseCatalog, useCatalog, catalog, xml, handler, expected);
@@ -124,7 +126,7 @@
/*
Verifies the Catalog support on DOM parser.
*/
- @Test(dataProvider = "data_DOMC", expectedExceptions = IOException.class)
+ @Test(dataProvider = "data_DOMC", expectedExceptions = SAXParseException.class)
public void testDOMC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testDOM(setUseCatalog, useCatalog, catalog, xml, handler, expected);
@@ -133,7 +135,7 @@
/*
Verifies the Catalog support on XMLStreamReader.
*/
- @Test(dataProvider = "data_StAXC")
+ @Test(dataProvider = "data_StAXC", expectedExceptions = XMLStreamException.class)
public void testStAXC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, XMLResolver resolver, String expected) throws Exception {
testStAXNegative(setUseCatalog, useCatalog, catalog, xml, resolver, expected);
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupport3.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupport3.java Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, 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
@@ -23,6 +23,7 @@
package catalog;
+import static jaxp.library.JAXPTestUtilities.clearSystemProperty;
import static jaxp.library.JAXPTestUtilities.getSystemProperty;
import static jaxp.library.JAXPTestUtilities.setSystemProperty;
@@ -82,18 +83,20 @@
timeoutConnect = getSystemProperty(TIMEOUTCONNECT);
setSystemProperty(TTIMEOUTREAD, "1000");
setSystemProperty(TIMEOUTCONNECT, "1000");
+ setSystemProperty(SP_ACCESS_EXTERNAL_DTD, "file");
}
@AfterClass
public void tearDownClass() throws Exception {
setSystemProperty(TIMEOUTCONNECT, "-1");
setSystemProperty(TTIMEOUTREAD, "-1");
+ clearSystemProperty(SP_ACCESS_EXTERNAL_DTD);
}
/*
Verifies the Catalog support on SAXParser.
*/
- @Test(dataProvider = "data_SAXC", expectedExceptions = IOException.class)
+ @Test(dataProvider = "data_SAXC", expectedExceptions = SAXParseException.class)
public void testSAXC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testSAX(setUseCatalog, useCatalog, catalog, xml, handler, expected);
@@ -102,7 +105,7 @@
/*
Verifies the Catalog support on XMLReader.
*/
- @Test(dataProvider = "data_SAXC", expectedExceptions = IOException.class)
+ @Test(dataProvider = "data_SAXC", expectedExceptions = SAXParseException.class)
public void testXMLReaderC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testXMLReader(setUseCatalog, useCatalog, catalog, xml, handler, expected);
@@ -120,7 +123,7 @@
/*
Verifies the Catalog support on DOM parser.
*/
- @Test(dataProvider = "data_DOMC", expectedExceptions = IOException.class)
+ @Test(dataProvider = "data_DOMC", expectedExceptions = SAXParseException.class)
public void testDOMC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testDOM(setUseCatalog, useCatalog, catalog, xml, handler, expected);
@@ -129,7 +132,7 @@
/*
Verifies the Catalog support on XMLStreamReader.
*/
- @Test(dataProvider = "data_StAXC")
+ @Test(dataProvider = "data_StAXC", expectedExceptions = XMLStreamException.class)
public void testStAXC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, XMLResolver resolver, String expected) throws Exception {
testStAXNegative(setUseCatalog, useCatalog, catalog, xml, resolver, expected);
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupportBase.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupportBase.java Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018, 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
@@ -90,6 +90,7 @@
public class CatalogSupportBase {
// the System Property for the USE_CATALOG feature
final static String SP_USE_CATALOG = "javax.xml.useCatalog";
+ final static String SP_ACCESS_EXTERNAL_DTD = "javax.xml.accessExternalDTD";
boolean debug = false;
@@ -232,7 +233,7 @@
+ ""
+ "</xsl:stylesheet>";
xsl_includeDTD = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- + "<!DOCTYPE HTMLlat1 SYSTEM \"http://openjdk.java.net/xml/catalog/dtd/XSLDTD.dtd\">"
+ + "<!DOCTYPE HTMLlat1 SYSTEM \"http://openjdk_java_net/xml/catalog/dtd/XSLDTD.dtd\">"
+ "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">"
+ " <xsl:import href=\"pathto/XSLImport_html.xsl\"/>"
+ " <xsl:include href=\"pathto/XSLInclude_header.xsl\"/>"
@@ -262,7 +263,7 @@
"</content>";
xml_xslDTD = "<?xml version=\"1.0\"?>\n" +
- "<!DOCTYPE content SYSTEM \"http://openjdk.java.net/xml/catalog/dtd/include.dtd\">" +
+ "<!DOCTYPE content SYSTEM \"http://openjdk_java_net/xml/catalog/dtd/include.dtd\">" +
"<content>\n" +
" <header>This is the header</header>\n" +
" Some content\n" +
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupport_uri.xml Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupport_uri.xml Wed Nov 21 13:53:17 2018 -0500
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<!-- DTDs and external entities -->
- <uri name="http://openjdk.java.net/xml/catalog/dtd/system.dtd" uri="system.dtd"/>
+ <uri name="http://openjdk_java_net/xml/catalog/dtd/system.dtd" uri="system.dtd"/>
<!-- XMLSchema refers to XMLSchema.dtd -->
<public publicId="-//W3C//DTD XMLSCHEMA 200102//EN" uri="XMLSchema.dtd"/>
@@ -34,8 +34,8 @@
<uri name="pathto/XSLInclude_header.xsl" uri="XSLInclude_header.xsl"/>
<uri name="pathto/XSLInclude_footer.xsl" uri="XSLInclude_footer.xsl"/>
<!-- and DTDs -->
- <uri name="http://openjdk.java.net/xml/catalog/dtd/XSLDTD.dtd" uri="XSLDTD.dtd"/>
- <uri name="http://openjdk.java.net/xml/catalog/dtd/include.dtd" uri="include.dtd"/>
+ <uri name="http://openjdk_java_net/xml/catalog/dtd/XSLDTD.dtd" uri="XSLDTD.dtd"/>
+ <uri name="http://openjdk_java_net/xml/catalog/dtd/include.dtd" uri="include.dtd"/>
<!-- XSLT document function -->
<uri name="pathto/DocFunc2.xml" uri="DocFuncCatalog.xml"/>
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogTest.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogTest.java Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, 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
@@ -654,7 +654,7 @@
};
}
- static String id = "http://openjdk.java.net/xml/catalog/dtd/system.dtd";
+ static String id = "http://openjdk_java_net/xml/catalog/dtd/system.dtd";
/*
DataProvider: used to verify how prefer settings affect the result of the
Catalog's matching operation.
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/catalog.xml Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/catalog.xml Wed Nov 21 13:53:17 2018 -0500
@@ -9,12 +9,12 @@
uri="file:///share/mirrors/w3c/xhtml1/xhtml1-strict.dtd"/>
<public publicId="-//OPENJDK//XML CATALOG DTD//1.0" uri="public.dtd"/>
- <system systemId="http://openjdk.java.net/xml/catalog/dtd/system.dtd" uri="system.dtd"/>
+ <system systemId="http://openjdk_java_net/xml/catalog/dtd/system.dtd" uri="system.dtd"/>
- <rewriteSystem systemIdStartString="http://openjdk.java.net/"
+ <rewriteSystem systemIdStartString="http://openjdk_java_net/"
rewritePrefix="files" />
- <rewriteSystem systemIdStartString="http://openjdk.java.net/xml/catalog/dtd/"
+ <rewriteSystem systemIdStartString="http://openjdk_java_net/xml/catalog/dtd/"
rewritePrefix="files" />
<systemSuffix systemIdSuffix="systemsuffix.dtd" uri="systemsuffix.dtd"/>
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/catalog_uri.xml Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/catalog_uri.xml Wed Nov 21 13:53:17 2018 -0500
@@ -3,11 +3,11 @@
xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<!-- using uri entries -->
- <uri name="http://openjdk.java.net/xml/catalog/dtd/system.dtd" uri="system.dtd"/>
- <rewriteURI uriStartString="http://openjdk.java.net/"
+ <uri name="http://openjdk_java_net/xml/catalog/dtd/system.dtd" uri="system.dtd"/>
+ <rewriteURI uriStartString="http://openjdk_java_net/"
rewritePrefix="files" />
- <rewriteURI uriStartString="http://openjdk.java.net/xml/catalog/dtd/"
+ <rewriteURI uriStartString="http://openjdk_java_net/xml/catalog/dtd/"
rewritePrefix="files" />
<uriSuffix uriSuffix="systemsuffix.dtd" uri="systemsuffix.dtd"/>
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/pubOnly.xml Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/pubOnly.xml Wed Nov 21 13:53:17 2018 -0500
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" xml:base="http://local/base/dtd/">
- <public publicId="http://openjdk.java.net/xml/catalog/dtd/system.dtd" uri="public.dtd"/>
+ <public publicId="http://openjdk_java_net/xml/catalog/dtd/system.dtd" uri="public.dtd"/>
</catalog>
\ No newline at end of file
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/rewritesystem.xml Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/rewritesystem.xml Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<!DOCTYPE catalogtest PUBLIC "-//OPENJDK//XML CATALOG DTD//REWRITE"
- "http://openjdk.java.net/xml/catalog/dtd/rewritesystem.dtd">
+ "http://openjdk_java_net/xml/catalog/dtd/rewritesystem.dtd">
<catalogtest>Test &rewritesystem; entry</catalogtest>
\ No newline at end of file
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/rewritesystem1.xml Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/rewritesystem1.xml Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<!DOCTYPE catalogtest PUBLIC "-//OPENJDK//XML CATALOG DTD//REWRITE"
- "http://openjdk.java.net/rewritesystem.dtd">
+ "http://openjdk_java_net/rewritesystem.dtd">
<catalogtest>Test &rewritesystem; entry</catalogtest>
\ No newline at end of file
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/sysAndPub.xml Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/sysAndPub.xml Wed Nov 21 13:53:17 2018 -0500
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" xml:base="http://local/base/dtd/">
- <system systemId="http://openjdk.java.net/xml/catalog/dtd/system.dtd" uri="system.dtd"/>
- <public publicId="http://openjdk.java.net/xml/catalog/dtd/system.dtd" uri="public.dtd"/>
+ <system systemId="http://openjdk_java_net/xml/catalog/dtd/system.dtd" uri="system.dtd"/>
+ <public publicId="http://openjdk_java_net/xml/catalog/dtd/system.dtd" uri="public.dtd"/>
</catalog>
\ No newline at end of file
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/sysOnly.xml Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/sysOnly.xml Wed Nov 21 13:53:17 2018 -0500
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" xml:base="http://local/base/dtd/">
- <system systemId="http://openjdk.java.net/xml/catalog/dtd/system.dtd" uri="system.dtd"/>
+ <system systemId="http://openjdk_java_net/xml/catalog/dtd/system.dtd" uri="system.dtd"/>
</catalog>
\ No newline at end of file
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/system.xml Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/system.xml Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<!DOCTYPE catalogtest PUBLIC "-//OPENJDK//XML CATALOG DTD SYSTEM//1.0"
- "http://openjdk.java.net/xml/catalog/dtd/system.dtd">
+ "http://openjdk_java_net/xml/catalog/dtd/system.dtd">
<catalogtest>Test &system; entry</catalogtest>
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/systemsuffix.xml Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/systemsuffix.xml Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<!DOCTYPE catalogtest PUBLIC "-//OPENJDK//XML CATALOG DTD//REWRITE"
- "http://openjdk.java.net/xml/catalog/dtd/systemsuffix.dtd">
+ "http://openjdk_java_net/xml/catalog/dtd/systemsuffix.dtd">
<catalogtest>Test &systemsuffix; entry</catalogtest>
\ No newline at end of file
--- a/test/jaxp/javax/xml/jaxp/unittest/catalog/val_test.xml Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/val_test.xml Wed Nov 21 13:53:17 2018 -0500
@@ -1,6 +1,6 @@
<?xml version="1.1"?>
<!DOCTYPE catalogtest PUBLIC "-//OPENJDK//XML CATALOG DTD//1.0"
- "http://openjdk.java.net/xml/catalog/dtd/system.dtd">
+ "http://openjdk_java_net/xml/catalog/dtd/system.dtd">
<test:root xmlns:test="test"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="test pathto/val_test.xsd"
--- a/test/jdk/java/lang/Character/PropList.txt Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/java/lang/Character/PropList.txt Wed Nov 21 13:53:17 2018 -0500
@@ -1,6 +1,6 @@
-# PropList-10.0.0.txt
-# Date: 2017-03-10, 08:25:30 GMT
-# Copyright (c) 2017 Unicode, Inc.
+# PropList-11.0.0.txt
+# Date: 2018-03-15, 04:28:35 GMT
+# Copyright (c) 2018 Unicode, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -125,7 +125,7 @@
05C3 ; Terminal_Punctuation # Po HEBREW PUNCTUATION SOF PASUQ
060C ; Terminal_Punctuation # Po ARABIC COMMA
061B ; Terminal_Punctuation # Po ARABIC SEMICOLON
-061F ; Terminal_Punctuation # Po ARABIC QUESTION MARK
+061E..061F ; Terminal_Punctuation # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
06D4 ; Terminal_Punctuation # Po ARABIC FULL STOP
0700..070A ; Terminal_Punctuation # Po [11] SYRIAC END OF PARAGRAPH..SYRIAC CONTRACTION
070C ; Terminal_Punctuation # Po SYRIAC HARKLEAN METOBELUS
@@ -156,6 +156,8 @@
2E2E ; Terminal_Punctuation # Po REVERSED QUESTION MARK
2E3C ; Terminal_Punctuation # Po STENOGRAPHIC FULL STOP
2E41 ; Terminal_Punctuation # Po REVERSED COMMA
+2E4C ; Terminal_Punctuation # Po MEDIEVAL COMMA
+2E4E ; Terminal_Punctuation # Po PUNCTUS ELEVATUS MARK
3001..3002 ; Terminal_Punctuation # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP
A4FE..A4FF ; Terminal_Punctuation # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
A60D..A60F ; Terminal_Punctuation # Po [3] VAI COMMA..VAI QUESTION MARK
@@ -185,6 +187,7 @@
10AF0..10AF5 ; Terminal_Punctuation # Po [6] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION TWO DOTS
10B3A..10B3F ; Terminal_Punctuation # Po [6] TINY TWO DOTS OVER ONE DOT PUNCTUATION..LARGE ONE RING OVER TWO RINGS PUNCTUATION
10B99..10B9C ; Terminal_Punctuation # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
+10F55..10F59 ; Terminal_Punctuation # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
11047..1104D ; Terminal_Punctuation # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
110BE..110C1 ; Terminal_Punctuation # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
11141..11143 ; Terminal_Punctuation # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
@@ -204,15 +207,17 @@
11AA1..11AA2 ; Terminal_Punctuation # Po [2] SOYOMBO TERMINAL MARK-1..SOYOMBO TERMINAL MARK-2
11C41..11C43 ; Terminal_Punctuation # Po [3] BHAIKSUKI DANDA..BHAIKSUKI WORD SEPARATOR
11C71 ; Terminal_Punctuation # Po MARCHEN MARK SHAD
+11EF7..11EF8 ; Terminal_Punctuation # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
12470..12474 ; Terminal_Punctuation # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
16A6E..16A6F ; Terminal_Punctuation # Po [2] MRO DANDA..MRO DOUBLE DANDA
16AF5 ; Terminal_Punctuation # Po BASSA VAH FULL STOP
16B37..16B39 ; Terminal_Punctuation # Po [3] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN CIM CHEEM
16B44 ; Terminal_Punctuation # Po PAHAWH HMONG SIGN XAUS
+16E97..16E98 ; Terminal_Punctuation # Po [2] MEDEFAIDRIN COMMA..MEDEFAIDRIN FULL STOP
1BC9F ; Terminal_Punctuation # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1DA87..1DA8A ; Terminal_Punctuation # Po [4] SIGNWRITING COMMA..SIGNWRITING COLON
-# Total code points: 252
+# Total code points: 264
# ================================================
@@ -661,6 +666,7 @@
10A01..10A03 ; Other_Alphabetic # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
10A05..10A06 ; Other_Alphabetic # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
10A0C..10A0F ; Other_Alphabetic # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10D24..10D27 ; Other_Alphabetic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
11000 ; Other_Alphabetic # Mc BRAHMI SIGN CANDRABINDU
11001 ; Other_Alphabetic # Mn BRAHMI SIGN ANUSVARA
11002 ; Other_Alphabetic # Mc BRAHMI SIGN VISARGA
@@ -673,6 +679,7 @@
11127..1112B ; Other_Alphabetic # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
1112C ; Other_Alphabetic # Mc CHAKMA VOWEL SIGN E
1112D..11132 ; Other_Alphabetic # Mn [6] CHAKMA VOWEL SIGN AI..CHAKMA AU MARK
+11145..11146 ; Other_Alphabetic # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
11180..11181 ; Other_Alphabetic # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
11182 ; Other_Alphabetic # Mc SHARADA SIGN VISARGA
111B3..111B5 ; Other_Alphabetic # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
@@ -730,9 +737,10 @@
11722..11725 ; Other_Alphabetic # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
11726 ; Other_Alphabetic # Mc AHOM VOWEL SIGN E
11727..1172A ; Other_Alphabetic # Mn [4] AHOM VOWEL SIGN AW..AHOM VOWEL SIGN AM
-11A01..11A06 ; Other_Alphabetic # Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O
-11A07..11A08 ; Other_Alphabetic # Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU
-11A09..11A0A ; Other_Alphabetic # Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+1182C..1182E ; Other_Alphabetic # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+1182F..11837 ; Other_Alphabetic # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+11838 ; Other_Alphabetic # Mc DOGRA SIGN VISARGA
+11A01..11A0A ; Other_Alphabetic # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
11A35..11A38 ; Other_Alphabetic # Mn [4] ZANABAZAR SQUARE SIGN CANDRABINDU..ZANABAZAR SQUARE SIGN ANUSVARA
11A39 ; Other_Alphabetic # Mc ZANABAZAR SQUARE SIGN VISARGA
11A3B..11A3E ; Other_Alphabetic # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
@@ -758,6 +766,13 @@
11D3F..11D41 ; Other_Alphabetic # Mn [3] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI SIGN VISARGA
11D43 ; Other_Alphabetic # Mn MASARAM GONDI SIGN CANDRA
11D47 ; Other_Alphabetic # Mn MASARAM GONDI RA-KARA
+11D8A..11D8E ; Other_Alphabetic # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+11D90..11D91 ; Other_Alphabetic # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D93..11D94 ; Other_Alphabetic # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+11D95 ; Other_Alphabetic # Mn GUNJALA GONDI SIGN ANUSVARA
+11D96 ; Other_Alphabetic # Mc GUNJALA GONDI SIGN VISARGA
+11EF3..11EF4 ; Other_Alphabetic # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+11EF5..11EF6 ; Other_Alphabetic # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
16B30..16B36 ; Other_Alphabetic # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
16F51..16F7E ; Other_Alphabetic # Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG
1BC9E ; Other_Alphabetic # Mn DUPLOYAN DOUBLE MARK
@@ -771,7 +786,7 @@
1F150..1F169 ; Other_Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F170..1F189 ; Other_Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
-# Total code points: 1300
+# Total code points: 1334
# ================================================
@@ -780,10 +795,10 @@
3021..3029 ; Ideographic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
3038..303A ; Ideographic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
3400..4DB5 ; Ideographic # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEA ; Ideographic # Lo [20971] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEA
+4E00..9FEF ; Ideographic # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
F900..FA6D ; Ideographic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
-17000..187EC ; Ideographic # Lo [6125] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC
+17000..187F1 ; Ideographic # Lo [6130] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F1
18800..18AF2 ; Ideographic # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
1B170..1B2FB ; Ideographic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
20000..2A6D6 ; Ideographic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
@@ -793,7 +808,7 @@
2CEB0..2EBE0 ; Ideographic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 96174
+# Total code points: 96184
# ================================================
@@ -953,6 +968,9 @@
FFE3 ; Diacritic # Sk FULLWIDTH MACRON
102E0 ; Diacritic # Mn COPTIC EPACT THOUSANDS MARK
10AE5..10AE6 ; Diacritic # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
+10D22..10D23 ; Diacritic # Lo [2] HANIFI ROHINGYA MARK SAKIN..HANIFI ROHINGYA MARK NA KHONNA
+10D24..10D27 ; Diacritic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10F46..10F50 ; Diacritic # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
110B9..110BA ; Diacritic # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
11133..11134 ; Diacritic # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA
11173 ; Diacritic # Mn MAHAJANI SIGN NUKTA
@@ -973,12 +991,14 @@
116B6 ; Diacritic # Mc TAKRI SIGN VIRAMA
116B7 ; Diacritic # Mn TAKRI SIGN NUKTA
1172B ; Diacritic # Mn AHOM SIGN KILLER
+11839..1183A ; Diacritic # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
11A34 ; Diacritic # Mn ZANABAZAR SQUARE SIGN VIRAMA
11A47 ; Diacritic # Mn ZANABAZAR SQUARE SUBJOINER
11A99 ; Diacritic # Mn SOYOMBO SUBJOINER
11C3F ; Diacritic # Mn BHAIKSUKI SIGN VIRAMA
11D42 ; Diacritic # Mn MASARAM GONDI SIGN NUKTA
11D44..11D45 ; Diacritic # Mn [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA
+11D97 ; Diacritic # Mn GUNJALA GONDI VIRAMA
16AF0..16AF4 ; Diacritic # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
16F8F..16F92 ; Diacritic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
16F93..16F9F ; Diacritic # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
@@ -991,7 +1011,7 @@
1E944..1E946 ; Diacritic # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK
1E948..1E94A ; Diacritic # Mn [3] ADLAM CONSONANT MODIFIER..ADLAM NUKTA
-# Total code points: 798
+# Total code points: 818
# ================================================
@@ -1137,7 +1157,7 @@
# ================================================
3400..4DB5 ; Unified_Ideograph # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEA ; Unified_Ideograph # Lo [20971] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEA
+4E00..9FEF ; Unified_Ideograph # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
FA0E..FA0F ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F
FA11 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA11
FA13..FA14 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14
@@ -1151,7 +1171,7 @@
2B820..2CEA1 ; Unified_Ideograph # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; Unified_Ideograph # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
-# Total code points: 87882
+# Total code points: 87887
# ================================================
@@ -1255,10 +1275,13 @@
002E ; Sentence_Terminal # Po FULL STOP
003F ; Sentence_Terminal # Po QUESTION MARK
0589 ; Sentence_Terminal # Po ARMENIAN FULL STOP
-061F ; Sentence_Terminal # Po ARABIC QUESTION MARK
+061E..061F ; Sentence_Terminal # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
06D4 ; Sentence_Terminal # Po ARABIC FULL STOP
0700..0702 ; Sentence_Terminal # Po [3] SYRIAC END OF PARAGRAPH..SYRIAC SUBLINEAR FULL STOP
07F9 ; Sentence_Terminal # Po NKO EXCLAMATION MARK
+0837 ; Sentence_Terminal # Po SAMARITAN PUNCTUATION MELODIC QITSA
+0839 ; Sentence_Terminal # Po SAMARITAN PUNCTUATION QITSA
+083D..083E ; Sentence_Terminal # Po [2] SAMARITAN PUNCTUATION SOF MASHFAAT..SAMARITAN PUNCTUATION ANNAAU
0964..0965 ; Sentence_Terminal # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
104A..104B ; Sentence_Terminal # Po [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION
1362 ; Sentence_Terminal # Po ETHIOPIC FULL STOP
@@ -1296,6 +1319,7 @@
FF1F ; Sentence_Terminal # Po FULLWIDTH QUESTION MARK
FF61 ; Sentence_Terminal # Po HALFWIDTH IDEOGRAPHIC FULL STOP
10A56..10A57 ; Sentence_Terminal # Po [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10F55..10F59 ; Sentence_Terminal # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
11047..11048 ; Sentence_Terminal # Po [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA
110BE..110C1 ; Sentence_Terminal # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
11141..11143 ; Sentence_Terminal # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
@@ -1313,14 +1337,16 @@
11A42..11A43 ; Sentence_Terminal # Po [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD
11A9B..11A9C ; Sentence_Terminal # Po [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD
11C41..11C42 ; Sentence_Terminal # Po [2] BHAIKSUKI DANDA..BHAIKSUKI DOUBLE DANDA
+11EF7..11EF8 ; Sentence_Terminal # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
16A6E..16A6F ; Sentence_Terminal # Po [2] MRO DANDA..MRO DOUBLE DANDA
16AF5 ; Sentence_Terminal # Po BASSA VAH FULL STOP
16B37..16B38 ; Sentence_Terminal # Po [2] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS TSHAB CEEB
16B44 ; Sentence_Terminal # Po PAHAWH HMONG SIGN XAUS
+16E98 ; Sentence_Terminal # Po MEDEFAIDRIN FULL STOP
1BC9F ; Sentence_Terminal # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1DA88 ; Sentence_Terminal # Po SIGNWRITING FULL STOP
-# Total code points: 128
+# Total code points: 141
# ================================================
@@ -1521,14 +1547,10 @@
2B74..2B75 ; Pattern_Syntax # Cn [2] <reserved-2B74>..<reserved-2B75>
2B76..2B95 ; Pattern_Syntax # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
2B96..2B97 ; Pattern_Syntax # Cn [2] <reserved-2B96>..<reserved-2B97>
-2B98..2BB9 ; Pattern_Syntax # So [34] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX
-2BBA..2BBC ; Pattern_Syntax # Cn [3] <reserved-2BBA>..<reserved-2BBC>
-2BBD..2BC8 ; Pattern_Syntax # So [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
+2B98..2BC8 ; Pattern_Syntax # So [49] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
2BC9 ; Pattern_Syntax # Cn <reserved-2BC9>
-2BCA..2BD2 ; Pattern_Syntax # So [9] TOP HALF BLACK CIRCLE..GROUP MARK
-2BD3..2BEB ; Pattern_Syntax # Cn [25] <reserved-2BD3>..<reserved-2BEB>
-2BEC..2BEF ; Pattern_Syntax # So [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
-2BF0..2BFF ; Pattern_Syntax # Cn [16] <reserved-2BF0>..<reserved-2BFF>
+2BCA..2BFE ; Pattern_Syntax # So [53] TOP HALF BLACK CIRCLE..REVERSED RIGHT ANGLE
+2BFF ; Pattern_Syntax # Cn <reserved-2BFF>
2E00..2E01 ; Pattern_Syntax # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
2E02 ; Pattern_Syntax # Pi LEFT SUBSTITUTION BRACKET
2E03 ; Pattern_Syntax # Pf RIGHT SUBSTITUTION BRACKET
@@ -1566,8 +1588,8 @@
2E40 ; Pattern_Syntax # Pd DOUBLE HYPHEN
2E41 ; Pattern_Syntax # Po REVERSED COMMA
2E42 ; Pattern_Syntax # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
-2E43..2E49 ; Pattern_Syntax # Po [7] DASH WITH LEFT UPTURN..DOUBLE STACKED COMMA
-2E4A..2E7F ; Pattern_Syntax # Cn [54] <reserved-2E4A>..<reserved-2E7F>
+2E43..2E4E ; Pattern_Syntax # Po [12] DASH WITH LEFT UPTURN..PUNCTUS ELEVATUS MARK
+2E4F..2E7F ; Pattern_Syntax # Cn [49] <reserved-2E4F>..<reserved-2E7F>
3001..3003 ; Pattern_Syntax # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
3008 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET
3009 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET
@@ -1606,8 +1628,9 @@
070F ; Prepended_Concatenation_Mark # Cf SYRIAC ABBREVIATION MARK
08E2 ; Prepended_Concatenation_Mark # Cf ARABIC DISPUTED END OF AYAH
110BD ; Prepended_Concatenation_Mark # Cf KAITHI NUMBER SIGN
+110CD ; Prepended_Concatenation_Mark # Cf KAITHI NUMBER SIGN ABOVE
-# Total code points: 10
+# Total code points: 11
# ================================================
--- a/test/jdk/java/lang/Character/PropertyValueAliases.txt Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/java/lang/Character/PropertyValueAliases.txt Wed Nov 21 13:53:17 2018 -0500
@@ -1,6 +1,6 @@
-# PropertyValueAliases-10.0.0.txt
-# Date: 2017-05-17, 08:45:34 GMT
-# Copyright (c) 2017 Unicode, Inc.
+# PropertyValueAliases-11.0.0.txt
+# Date: 2018-05-20, 09:03:12 GMT
+# Copyright (c) 2018 Unicode, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -81,6 +81,7 @@
age; 8.0 ; V8_0
age; 9.0 ; V9_0
age; 10.0 ; V10_0
+age; 11.0 ; V11_0
age; NA ; Unassigned
# Alphabetic (Alpha)
@@ -182,6 +183,7 @@
blk; Cham ; Cham
blk; Cherokee ; Cherokee
blk; Cherokee_Sup ; Cherokee_Supplement
+blk; Chess_Symbols ; Chess_Symbols
blk; CJK ; CJK_Unified_Ideographs
blk; CJK_Compat ; CJK_Compatibility
blk; CJK_Compat_Forms ; CJK_Compatibility_Forms
@@ -218,6 +220,7 @@
blk; Diacriticals_For_Symbols ; Combining_Diacritical_Marks_For_Symbols; Combining_Marks_For_Symbols
blk; Diacriticals_Sup ; Combining_Diacritical_Marks_Supplement
blk; Dingbats ; Dingbats
+blk; Dogra ; Dogra
blk; Domino ; Domino_Tiles
blk; Duployan ; Duployan
blk; Early_Dynastic_Cuneiform ; Early_Dynastic_Cuneiform
@@ -235,6 +238,7 @@
blk; Geometric_Shapes ; Geometric_Shapes
blk; Geometric_Shapes_Ext ; Geometric_Shapes_Extended
blk; Georgian ; Georgian
+blk; Georgian_Ext ; Georgian_Extended
blk; Georgian_Sup ; Georgian_Supplement
blk; Glagolitic ; Glagolitic
blk; Glagolitic_Sup ; Glagolitic_Supplement
@@ -243,10 +247,12 @@
blk; Greek ; Greek_And_Coptic
blk; Greek_Ext ; Greek_Extended
blk; Gujarati ; Gujarati
+blk; Gunjala_Gondi ; Gunjala_Gondi
blk; Gurmukhi ; Gurmukhi
blk; Half_And_Full_Forms ; Halfwidth_And_Fullwidth_Forms
blk; Half_Marks ; Combining_Half_Marks
blk; Hangul ; Hangul_Syllables
+blk; Hanifi_Rohingya ; Hanifi_Rohingya
blk; Hanunoo ; Hanunoo
blk; Hatran ; Hatran
blk; Hebrew ; Hebrew
@@ -257,6 +263,7 @@
blk; Ideographic_Symbols ; Ideographic_Symbols_And_Punctuation
blk; Imperial_Aramaic ; Imperial_Aramaic
blk; Indic_Number_Forms ; Common_Indic_Number_Forms
+blk; Indic_Siyaq_Numbers ; Indic_Siyaq_Numbers
blk; Inscriptional_Pahlavi ; Inscriptional_Pahlavi
blk; Inscriptional_Parthian ; Inscriptional_Parthian
blk; IPA_Ext ; IPA_Extensions
@@ -298,6 +305,7 @@
blk; Lydian ; Lydian
blk; Mahajani ; Mahajani
blk; Mahjong ; Mahjong_Tiles
+blk; Makasar ; Makasar
blk; Malayalam ; Malayalam
blk; Mandaic ; Mandaic
blk; Manichaean ; Manichaean
@@ -305,6 +313,8 @@
blk; Masaram_Gondi ; Masaram_Gondi
blk; Math_Alphanum ; Mathematical_Alphanumeric_Symbols
blk; Math_Operators ; Mathematical_Operators
+blk; Mayan_Numerals ; Mayan_Numerals
+blk; Medefaidrin ; Medefaidrin
blk; Meetei_Mayek ; Meetei_Mayek
blk; Meetei_Mayek_Ext ; Meetei_Mayek_Extensions
blk; Mende_Kikakui ; Mende_Kikakui
@@ -343,6 +353,7 @@
blk; Old_North_Arabian ; Old_North_Arabian
blk; Old_Permic ; Old_Permic
blk; Old_Persian ; Old_Persian
+blk; Old_Sogdian ; Old_Sogdian
blk; Old_South_Arabian ; Old_South_Arabian
blk; Old_Turkic ; Old_Turkic
blk; Oriya ; Oriya
@@ -373,6 +384,7 @@
blk; Sinhala ; Sinhala
blk; Sinhala_Archaic_Numbers ; Sinhala_Archaic_Numbers
blk; Small_Forms ; Small_Form_Variants
+blk; Sogdian ; Sogdian
blk; Sora_Sompeng ; Sora_Sompeng
blk; Soyombo ; Soyombo
blk; Specials ; Specials
@@ -586,6 +598,10 @@
ea ; Na ; Narrow
ea ; W ; Wide
+# Equivalent_Unified_Ideograph (EqUIdeo)
+
+# @missing: 0000..10FFFF; Equivalent_Unified_Ideograph; <none>
+
# Expands_On_NFC (XO_NFC)
XO_NFC; N ; No ; F ; False
@@ -774,6 +790,7 @@
InSC; Consonant_Dead ; Consonant_Dead
InSC; Consonant_Final ; Consonant_Final
InSC; Consonant_Head_Letter ; Consonant_Head_Letter
+InSC; Consonant_Initial_Postfixed ; Consonant_Initial_Postfixed
InSC; Consonant_Killer ; Consonant_Killer
InSC; Consonant_Medial ; Consonant_Medial
InSC; Consonant_Placeholder ; Consonant_Placeholder
@@ -884,6 +901,8 @@
jg ; Gaf ; Gaf
jg ; Gamal ; Gamal
jg ; Hah ; Hah
+jg ; Hanifi_Rohingya_Kinna_Ya ; Hanifi_Rohingya_Kinna_Ya
+jg ; Hanifi_Rohingya_Pa ; Hanifi_Rohingya_Pa
jg ; He ; He
jg ; Heh ; Heh
jg ; Heh_Goal ; Heh_Goal
@@ -1189,6 +1208,7 @@
sc ; Cprt ; Cypriot
sc ; Cyrl ; Cyrillic
sc ; Deva ; Devanagari
+sc ; Dogr ; Dogra
sc ; Dsrt ; Deseret
sc ; Dupl ; Duployan
sc ; Egyp ; Egyptian_Hieroglyphs
@@ -1196,6 +1216,7 @@
sc ; Ethi ; Ethiopic
sc ; Geor ; Georgian
sc ; Glag ; Glagolitic
+sc ; Gong ; Gunjala_Gondi
sc ; Gonm ; Masaram_Gondi
sc ; Goth ; Gothic
sc ; Gran ; Grantha
@@ -1232,9 +1253,11 @@
sc ; Lyci ; Lycian
sc ; Lydi ; Lydian
sc ; Mahj ; Mahajani
+sc ; Maka ; Makasar
sc ; Mand ; Mandaic
sc ; Mani ; Manichaean
sc ; Marc ; Marchen
+sc ; Medf ; Medefaidrin
sc ; Mend ; Mende_Kikakui
sc ; Merc ; Meroitic_Cursive
sc ; Mero ; Meroitic_Hieroglyphs
@@ -1266,6 +1289,7 @@
sc ; Plrd ; Miao
sc ; Prti ; Inscriptional_Parthian
sc ; Rjng ; Rejang
+sc ; Rohg ; Hanifi_Rohingya
sc ; Runr ; Runic
sc ; Samr ; Samaritan
sc ; Sarb ; Old_South_Arabian
@@ -1276,6 +1300,8 @@
sc ; Sidd ; Siddham
sc ; Sind ; Khudawadi
sc ; Sinh ; Sinhala
+sc ; Sogd ; Sogdian
+sc ; Sogo ; Old_Sogdian
sc ; Sora ; Sora_Sompeng
sc ; Soyo ; Soyombo
sc ; Sund ; Sundanese
@@ -1420,6 +1446,7 @@
WB ; NU ; Numeric
WB ; RI ; Regional_Indicator
WB ; SQ ; Single_Quote
+WB ; WSegSpace ; WSegSpace
WB ; XX ; Other
WB ; ZWJ ; ZWJ
--- a/test/jdk/java/lang/Character/Scripts.txt Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/java/lang/Character/Scripts.txt Wed Nov 21 13:53:17 2018 -0500
@@ -1,6 +1,6 @@
-# Scripts-10.0.0.txt
-# Date: 2017-03-11, 06:40:37 GMT
-# Copyright (c) 2017 Unicode, Inc.
+# Scripts-11.0.0.txt
+# Date: 2018-02-21, 05:34:31 GMT
+# Copyright (c) 2018 Unicode, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -308,10 +308,8 @@
2B47..2B4C ; Common # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
2B4D..2B73 ; Common # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B76..2B95 ; Common # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-2B98..2BB9 ; Common # So [34] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX
-2BBD..2BC8 ; Common # So [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
-2BCA..2BD2 ; Common # So [9] TOP HALF BLACK CIRCLE..GROUP MARK
-2BEC..2BEF ; Common # So [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+2B98..2BC8 ; Common # So [49] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
+2BCA..2BFE ; Common # So [53] TOP HALF BLACK CIRCLE..REVERSED RIGHT ANGLE
2E00..2E01 ; Common # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
2E02 ; Common # Pi LEFT SUBSTITUTION BRACKET
2E03 ; Common # Pf RIGHT SUBSTITUTION BRACKET
@@ -349,7 +347,7 @@
2E40 ; Common # Pd DOUBLE HYPHEN
2E41 ; Common # Po REVERSED COMMA
2E42 ; Common # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
-2E43..2E49 ; Common # Po [7] DASH WITH LEFT UPTURN..DOUBLE STACKED COMMA
+2E43..2E4E ; Common # Po [12] DASH WITH LEFT UPTURN..PUNCTUS ELEVATUS MARK
2FF0..2FFB ; Common # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
3000 ; Common # Zs IDEOGRAPHIC SPACE
3001..3003 ; Common # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
@@ -523,8 +521,9 @@
1D183..1D184 ; Common # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
1D18C..1D1A9 ; Common # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
1D1AE..1D1E8 ; Common # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN
+1D2E0..1D2F3 ; Common # No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN
1D300..1D356 ; Common # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
-1D360..1D371 ; Common # No [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE
+1D360..1D378 ; Common # No [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE
1D400..1D454 ; Common # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
1D456..1D49C ; Common # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
1D49E..1D49F ; Common # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
@@ -566,6 +565,11 @@
1D7C3 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
1D7C4..1D7CB ; Common # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
1D7CE..1D7FF ; Common # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1EC71..1ECAB ; Common # No [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE
+1ECAC ; Common # So INDIC SIYAQ PLACEHOLDER
+1ECAD..1ECAF ; Common # No [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS
+1ECB0 ; Common # Sc INDIC SIYAQ RUPEE MARK
+1ECB1..1ECB4 ; Common # No [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK
1F000..1F02B ; Common # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
1F030..1F093 ; Common # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
1F0A0..1F0AE ; Common # So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
@@ -573,8 +577,7 @@
1F0C1..1F0CF ; Common # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
1F0D1..1F0F5 ; Common # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
1F100..1F10C ; Common # No [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
-1F110..1F12E ; Common # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
-1F130..1F16B ; Common # So [60] SQUARED LATIN CAPITAL LETTER A..RAISED MD SIGN
+1F110..1F16B ; Common # So [92] PARENTHESIZED LATIN CAPITAL LETTER A..RAISED MD SIGN
1F170..1F1AC ; Common # So [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD
1F1E6..1F1FF ; Common # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
1F201..1F202 ; Common # So [2] SQUARED KATAKANA KOKO..SQUARED KATAKANA SA
@@ -586,9 +589,9 @@
1F3FB..1F3FF ; Common # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
1F400..1F6D4 ; Common # So [725] RAT..PAGODA
1F6E0..1F6EC ; Common # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
-1F6F0..1F6F8 ; Common # So [9] SATELLITE..FLYING SAUCER
+1F6F0..1F6F9 ; Common # So [10] SATELLITE..SKATEBOARD
1F700..1F773 ; Common # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
-1F780..1F7D4 ; Common # So [85] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR
+1F780..1F7D8 ; Common # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
1F800..1F80B ; Common # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
1F810..1F847 ; Common # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
1F850..1F859 ; Common # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
@@ -596,15 +599,18 @@
1F890..1F8AD ; Common # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
1F900..1F90B ; Common # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
1F910..1F93E ; Common # So [47] ZIPPER-MOUTH FACE..HANDBALL
-1F940..1F94C ; Common # So [13] WILTED FLOWER..CURLING STONE
-1F950..1F96B ; Common # So [28] CROISSANT..CANNED FOOD
-1F980..1F997 ; Common # So [24] CRAB..CRICKET
-1F9C0 ; Common # So CHEESE WEDGE
-1F9D0..1F9E6 ; Common # So [23] FACE WITH MONOCLE..SOCKS
+1F940..1F970 ; Common # So [49] WILTED FLOWER..SMILING FACE WITH SMILING EYES AND THREE HEARTS
+1F973..1F976 ; Common # So [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
+1F97A ; Common # So FACE WITH PLEADING EYES
+1F97C..1F9A2 ; Common # So [39] LAB COAT..SWAN
+1F9B0..1F9B9 ; Common # So [10] EMOJI COMPONENT RED HAIR..SUPERVILLAIN
+1F9C0..1F9C2 ; Common # So [3] CHEESE WEDGE..SALT SHAKER
+1F9D0..1F9FF ; Common # So [48] FACE WITH MONOCLE..NAZAR AMULET
+1FA60..1FA6D ; Common # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
E0001 ; Common # Cf LANGUAGE TAG
E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
-# Total code points: 7363
+# Total code points: 7591
# ================================================
@@ -647,8 +653,7 @@
A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
A78B..A78E ; Latin # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; Latin # Lo LATIN LETTER SINOLOGICAL DOT
-A790..A7AE ; Latin # L& [31] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER SMALL CAPITAL I
-A7B0..A7B7 ; Latin # L& [8] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER OMEGA
+A790..A7B9 ; Latin # L& [42] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER U WITH STROKE
A7F7 ; Latin # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; Latin # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; Latin # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -660,7 +665,7 @@
FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
-# Total code points: 1350
+# Total code points: 1353
# ================================================
@@ -754,13 +759,13 @@
0531..0556 ; Armenian # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
0559 ; Armenian # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
055A..055F ; Armenian # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
-0561..0587 ; Armenian # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+0560..0588 ; Armenian # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
058A ; Armenian # Pd ARMENIAN HYPHEN
058D..058E ; Armenian # So [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN
058F ; Armenian # Sc ARMENIAN DRAM SIGN
FB13..FB17 ; Armenian # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
-# Total code points: 93
+# Total code points: 95
# ================================================
@@ -774,7 +779,7 @@
05C6 ; Hebrew # Po HEBREW PUNCTUATION NUN HAFUKHA
05C7 ; Hebrew # Mn HEBREW POINT QAMATS QATAN
05D0..05EA ; Hebrew # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
-05F0..05F2 ; Hebrew # Lo [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
+05EF..05F2 ; Hebrew # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
05F3..05F4 ; Hebrew # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
FB1D ; Hebrew # Lo HEBREW LETTER YOD WITH HIRIQ
FB1E ; Hebrew # Mn HEBREW POINT JUDEO-SPANISH VARIKA
@@ -787,7 +792,7 @@
FB43..FB44 ; Hebrew # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
-# Total code points: 133
+# Total code points: 134
# ================================================
@@ -824,7 +829,7 @@
0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
08A0..08B4 ; Arabic # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
08B6..08BD ; Arabic # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
-08D4..08E1 ; Arabic # Mn [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA
+08D3..08E1 ; Arabic # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
08E3..08FF ; Arabic # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
FBB2..FBC1 ; Arabic # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
@@ -872,7 +877,7 @@
1EEAB..1EEBB ; Arabic # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
1EEF0..1EEF1 ; Arabic # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
-# Total code points: 1280
+# Total code points: 1281
# ================================================
@@ -922,9 +927,10 @@
A8F8..A8FA ; Devanagari # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
A8FC ; Devanagari # Po DEVANAGARI SIGN SIDDHAM
-A8FD ; Devanagari # Lo DEVANAGARI JAIN OM
-
-# Total code points: 154
+A8FD..A8FE ; Devanagari # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
+A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY
+
+# Total code points: 156
# ================================================
@@ -957,8 +963,9 @@
09FB ; Bengali # Sc BENGALI GANDA MARK
09FC ; Bengali # Lo BENGALI LETTER VEDIC ANUSVARA
09FD ; Bengali # Po BENGALI ABBREVIATION SIGN
-
-# Total code points: 95
+09FE ; Bengali # Mn BENGALI SANDHI MARK
+
+# Total code points: 96
# ================================================
@@ -983,8 +990,9 @@
0A70..0A71 ; Gurmukhi # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
0A72..0A74 ; Gurmukhi # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
0A75 ; Gurmukhi # Mn GURMUKHI SIGN YAKASH
-
-# Total code points: 79
+0A76 ; Gurmukhi # Po GURMUKHI ABBREVIATION SIGN
+
+# Total code points: 80
# ================================================
@@ -1079,6 +1087,7 @@
0C00 ; Telugu # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE
0C01..0C03 ; Telugu # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C04 ; Telugu # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE
0C05..0C0C ; Telugu # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
0C0E..0C10 ; Telugu # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
0C12..0C28 ; Telugu # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
@@ -1096,13 +1105,14 @@
0C78..0C7E ; Telugu # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
0C7F ; Telugu # So TELUGU SIGN TUUMU
-# Total code points: 96
+# Total code points: 97
# ================================================
0C80 ; Kannada # Lo KANNADA SIGN SPACING CANDRABINDU
0C81 ; Kannada # Mn KANNADA SIGN CANDRABINDU
0C82..0C83 ; Kannada # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C84 ; Kannada # Po KANNADA SIGN SIDDHAM
0C85..0C8C ; Kannada # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
0C8E..0C90 ; Kannada # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
0C92..0CA8 ; Kannada # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
@@ -1124,7 +1134,7 @@
0CE6..0CEF ; Kannada # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
0CF1..0CF2 ; Kannada # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-# Total code points: 88
+# Total code points: 89
# ================================================
@@ -1318,14 +1328,16 @@
10A0..10C5 ; Georgian # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
10C7 ; Georgian # L& GEORGIAN CAPITAL LETTER YN
10CD ; Georgian # L& GEORGIAN CAPITAL LETTER AEN
-10D0..10FA ; Georgian # Lo [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10D0..10FA ; Georgian # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
10FC ; Georgian # Lm MODIFIER LETTER GEORGIAN NAR
-10FD..10FF ; Georgian # Lo [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+10FD..10FF ; Georgian # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+1C90..1CBA ; Georgian # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; Georgian # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
2D00..2D25 ; Georgian # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
2D27 ; Georgian # L& GEORGIAN SMALL LETTER YN
2D2D ; Georgian # L& GEORGIAN SMALL LETTER AEN
-# Total code points: 127
+# Total code points: 173
# ================================================
@@ -1454,7 +1466,7 @@
1810..1819 ; Mongolian # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
1820..1842 ; Mongolian # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
1843 ; Mongolian # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
-1844..1877 ; Mongolian # Lo [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
+1844..1878 ; Mongolian # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
1880..1884 ; Mongolian # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
1885..1886 ; Mongolian # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
1887..18A8 ; Mongolian # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
@@ -1462,7 +1474,7 @@
18AA ; Mongolian # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
11660..1166C ; Mongolian # Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
-# Total code points: 166
+# Total code points: 167
# ================================================
@@ -1491,10 +1503,10 @@
# ================================================
02EA..02EB ; Bopomofo # Sk [2] MODIFIER LETTER YIN DEPARTING TONE MARK..MODIFIER LETTER YANG DEPARTING TONE MARK
-3105..312E ; Bopomofo # Lo [42] BOPOMOFO LETTER B..BOPOMOFO LETTER O WITH DOT ABOVE
+3105..312F ; Bopomofo # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
31A0..31BA ; Bopomofo # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
-# Total code points: 71
+# Total code points: 72
# ================================================
@@ -1507,7 +1519,7 @@
3038..303A ; Han # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
303B ; Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
3400..4DB5 ; Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEA ; Han # Lo [20971] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEA
+4E00..9FEF ; Han # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
F900..FA6D ; Han # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
@@ -1517,7 +1529,7 @@
2CEB0..2EBE0 ; Han # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 89228
+# Total code points: 89233
# ================================================
@@ -1580,13 +1592,14 @@
FE20..FE2D ; Inherited # Mn [14] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON BELOW
101FD ; Inherited # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
102E0 ; Inherited # Mn COPTIC EPACT THOUSANDS MARK
+1133B ; Inherited # Mn COMBINING BINDU BELOW
1D167..1D169 ; Inherited # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
1D17B..1D182 ; Inherited # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
1D185..1D18B ; Inherited # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
1D1AA..1D1AD ; Inherited # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 568
+# Total code points: 569
# ================================================
@@ -1779,13 +1792,13 @@
10A0C..10A0F ; Kharoshthi # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
10A10..10A13 ; Kharoshthi # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
10A15..10A17 ; Kharoshthi # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
-10A19..10A33 ; Kharoshthi # Lo [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
+10A19..10A35 ; Kharoshthi # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
10A38..10A3A ; Kharoshthi # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
10A3F ; Kharoshthi # Mn KHAROSHTHI VIRAMA
-10A40..10A47 ; Kharoshthi # No [8] KHAROSHTHI DIGIT ONE..KHAROSHTHI NUMBER ONE THOUSAND
+10A40..10A48 ; Kharoshthi # No [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF
10A50..10A58 ; Kharoshthi # Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
-# Total code points: 65
+# Total code points: 68
# ================================================
@@ -1842,8 +1855,10 @@
07F6 ; Nko # So NKO SYMBOL OO DENNEN
07F7..07F9 ; Nko # Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK
07FA ; Nko # Lm NKO LAJANYALAN
-
-# Total code points: 59
+07FD ; Nko # Mn NKO DANTAYALAN
+07FE..07FF ; Nko # Sc [2] NKO DOROME SIGN..NKO TAMAN SIGN
+
+# Total code points: 62
# ================================================
@@ -2138,8 +2153,9 @@
110BB..110BC ; Kaithi # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
110BD ; Kaithi # Cf KAITHI NUMBER SIGN
110BE..110C1 ; Kaithi # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
-
-# Total code points: 66
+110CD ; Kaithi # Cf KAITHI NUMBER SIGN ABOVE
+
+# Total code points: 67
# ================================================
@@ -2187,8 +2203,10 @@
1112D..11134 ; Chakma # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
11136..1113F ; Chakma # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
11140..11143 ; Chakma # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
-
-# Total code points: 67
+11144 ; Chakma # Lo CHAKMA LETTER LHAA
+11145..11146 ; Chakma # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+
+# Total code points: 70
# ================================================
@@ -2225,8 +2243,8 @@
111B6..111BE ; Sharada # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111BF..111C0 ; Sharada # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
111C1..111C4 ; Sharada # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
-111C5..111C9 ; Sharada # Po [5] SHARADA DANDA..SHARADA SANDHI MARK
-111CA..111CC ; Sharada # Mn [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK
+111C5..111C8 ; Sharada # Po [4] SHARADA DANDA..SHARADA SEPARATOR
+111C9..111CC ; Sharada # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
111CD ; Sharada # Po SHARADA SUTRA MARK
111D0..111D9 ; Sharada # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
111DA ; Sharada # Lo SHARADA EKAM
@@ -2503,7 +2521,7 @@
# ================================================
-11700..11719 ; Ahom # Lo [26] AHOM LETTER KA..AHOM LETTER JHA
+11700..1171A ; Ahom # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
1171D..1171F ; Ahom # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
11720..11721 ; Ahom # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
11722..11725 ; Ahom # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
@@ -2514,7 +2532,7 @@
1173C..1173E ; Ahom # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
1173F ; Ahom # So AHOM SYMBOL VI
-# Total code points: 57
+# Total code points: 58
# ================================================
@@ -2619,8 +2637,9 @@
11450..11459 ; Newa # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
1145B ; Newa # Po NEWA PLACEHOLDER MARK
1145D ; Newa # Po NEWA INSERTION SIGN
-
-# Total code points: 92
+1145E ; Newa # Mn NEWA SANDHI MARK
+
+# Total code points: 93
# ================================================
@@ -2632,10 +2651,10 @@
# ================================================
16FE0 ; Tangut # Lm TANGUT ITERATION MARK
-17000..187EC ; Tangut # Lo [6125] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC
+17000..187F1 ; Tangut # Lo [6130] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F1
18800..18AF2 ; Tangut # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
-# Total code points: 6881
+# Total code points: 6886
# ================================================
@@ -2671,16 +2690,15 @@
11A97 ; Soyombo # Mc SOYOMBO SIGN VISARGA
11A98..11A99 ; Soyombo # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
11A9A..11A9C ; Soyombo # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
+11A9D ; Soyombo # Lo SOYOMBO MARK PLUTA
11A9E..11AA2 ; Soyombo # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
-# Total code points: 80
+# Total code points: 81
# ================================================
11A00 ; Zanabazar_Square # Lo ZANABAZAR SQUARE LETTER A
-11A01..11A06 ; Zanabazar_Square # Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O
-11A07..11A08 ; Zanabazar_Square # Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU
-11A09..11A0A ; Zanabazar_Square # Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A01..11A0A ; Zanabazar_Square # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
11A0B..11A32 ; Zanabazar_Square # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
11A33..11A38 ; Zanabazar_Square # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
11A39 ; Zanabazar_Square # Mc ZANABAZAR SQUARE SIGN VISARGA
@@ -2691,4 +2709,73 @@
# Total code points: 72
+# ================================================
+
+11800..1182B ; Dogra # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
+1182C..1182E ; Dogra # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+1182F..11837 ; Dogra # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+11838 ; Dogra # Mc DOGRA SIGN VISARGA
+11839..1183A ; Dogra # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+1183B ; Dogra # Po DOGRA ABBREVIATION SIGN
+
+# Total code points: 60
+
+# ================================================
+
+11D60..11D65 ; Gunjala_Gondi # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+11D67..11D68 ; Gunjala_Gondi # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+11D6A..11D89 ; Gunjala_Gondi # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
+11D8A..11D8E ; Gunjala_Gondi # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+11D90..11D91 ; Gunjala_Gondi # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D93..11D94 ; Gunjala_Gondi # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+11D95 ; Gunjala_Gondi # Mn GUNJALA GONDI SIGN ANUSVARA
+11D96 ; Gunjala_Gondi # Mc GUNJALA GONDI SIGN VISARGA
+11D97 ; Gunjala_Gondi # Mn GUNJALA GONDI VIRAMA
+11D98 ; Gunjala_Gondi # Lo GUNJALA GONDI OM
+11DA0..11DA9 ; Gunjala_Gondi # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
+
+# Total code points: 63
+
+# ================================================
+
+11EE0..11EF2 ; Makasar # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11EF3..11EF4 ; Makasar # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+11EF5..11EF6 ; Makasar # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+11EF7..11EF8 ; Makasar # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+
+# Total code points: 25
+
+# ================================================
+
+16E40..16E7F ; Medefaidrin # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+16E80..16E96 ; Medefaidrin # No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM
+16E97..16E9A ; Medefaidrin # Po [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH
+
+# Total code points: 91
+
+# ================================================
+
+10D00..10D23 ; Hanifi_Rohingya # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10D24..10D27 ; Hanifi_Rohingya # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10D30..10D39 ; Hanifi_Rohingya # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
+
+# Total code points: 50
+
+# ================================================
+
+10F30..10F45 ; Sogdian # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10F46..10F50 ; Sogdian # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+10F51..10F54 ; Sogdian # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
+10F55..10F59 ; Sogdian # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+
+# Total code points: 42
+
+# ================================================
+
+10F00..10F1C ; Old_Sogdian # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+10F1D..10F26 ; Old_Sogdian # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
+10F27 ; Old_Sogdian # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
+
+# Total code points: 40
+
# EOF
--- a/test/jdk/java/lang/Character/SpecialCasing.txt Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/java/lang/Character/SpecialCasing.txt Wed Nov 21 13:53:17 2018 -0500
@@ -1,6 +1,6 @@
-# SpecialCasing-10.0.0.txt
-# Date: 2017-04-14, 05:40:43 GMT
-# Copyright (c) 2017 Unicode, Inc.
+# SpecialCasing-11.0.0.txt
+# Date: 2018-02-22, 06:16:47 GMT
+# Copyright (c) 2018 Unicode, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -121,7 +121,7 @@
# The following cases are already in the UnicodeData.txt file, so are only commented here.
-# 0345; 0345; 0345; 0399; # COMBINING GREEK YPOGEGRAMMENI
+# 0345; 0345; 0399; 0399; # COMBINING GREEK YPOGEGRAMMENI
# All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript)
# have special uppercases.
--- a/test/jdk/java/lang/Character/UnicodeBlock/Blocks.txt Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/java/lang/Character/UnicodeBlock/Blocks.txt Wed Nov 21 13:53:17 2018 -0500
@@ -1,6 +1,6 @@
-# Blocks-10.0.0.txt
-# Date: 2017-04-12, 17:30:00 GMT [KW]
-# Copyright (c) 2017 Unicode, Inc.
+# Blocks-11.0.0.txt
+# Date: 2017-10-16, 24:39:00 GMT [KW]
+# Copyright (c) 2018 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
@@ -95,6 +95,7 @@
1C00..1C4F; Lepcha
1C50..1C7F; Ol Chiki
1C80..1C8F; Cyrillic Extended-C
+1C90..1CBF; Georgian Extended
1CC0..1CCF; Sundanese Supplement
1CD0..1CFF; Vedic Extensions
1D00..1D7F; Phonetic Extensions
@@ -234,7 +235,10 @@
10B80..10BAF; Psalter Pahlavi
10C00..10C4F; Old Turkic
10C80..10CFF; Old Hungarian
+10D00..10D3F; Hanifi Rohingya
10E60..10E7F; Rumi Numeral Symbols
+10F00..10F2F; Old Sogdian
+10F30..10F6F; Sogdian
11000..1107F; Brahmi
11080..110CF; Kaithi
110D0..110FF; Sora Sompeng
@@ -253,6 +257,7 @@
11660..1167F; Mongolian Supplement
11680..116CF; Takri
11700..1173F; Ahom
+11800..1184F; Dogra
118A0..118FF; Warang Citi
11A00..11A4F; Zanabazar Square
11A50..11AAF; Soyombo
@@ -260,6 +265,8 @@
11C00..11C6F; Bhaiksuki
11C70..11CBF; Marchen
11D00..11D5F; Masaram Gondi
+11D60..11DAF; Gunjala Gondi
+11EE0..11EFF; Makasar
12000..123FF; Cuneiform
12400..1247F; Cuneiform Numbers and Punctuation
12480..1254F; Early Dynastic Cuneiform
@@ -269,6 +276,7 @@
16A40..16A6F; Mro
16AD0..16AFF; Bassa Vah
16B00..16B8F; Pahawh Hmong
+16E40..16E9F; Medefaidrin
16F00..16F9F; Miao
16FE0..16FFF; Ideographic Symbols and Punctuation
17000..187FF; Tangut
@@ -281,6 +289,7 @@
1D000..1D0FF; Byzantine Musical Symbols
1D100..1D1FF; Musical Symbols
1D200..1D24F; Ancient Greek Musical Notation
+1D2E0..1D2FF; Mayan Numerals
1D300..1D35F; Tai Xuan Jing Symbols
1D360..1D37F; Counting Rod Numerals
1D400..1D7FF; Mathematical Alphanumeric Symbols
@@ -288,6 +297,7 @@
1E000..1E02F; Glagolitic Supplement
1E800..1E8DF; Mende Kikakui
1E900..1E95F; Adlam
+1EC70..1ECBF; Indic Siyaq Numbers
1EE00..1EEFF; Arabic Mathematical Alphabetic Symbols
1F000..1F02F; Mahjong Tiles
1F030..1F09F; Domino Tiles
@@ -302,6 +312,7 @@
1F780..1F7FF; Geometric Shapes Extended
1F800..1F8FF; Supplemental Arrows-C
1F900..1F9FF; Supplemental Symbols and Pictographs
+1FA00..1FA6F; Chess Symbols
20000..2A6DF; CJK Unified Ideographs Extension B
2A700..2B73F; CJK Unified Ideographs Extension C
2B740..2B81F; CJK Unified Ideographs Extension D
--- a/test/jdk/java/lang/Character/UnicodeData.txt Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/java/lang/Character/UnicodeData.txt Wed Nov 21 13:53:17 2018 -0500
@@ -1362,6 +1362,7 @@
055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0560;ARMENIAN SMALL LETTER TURNED AYB;Ll;0;L;;;;;N;;;;;
0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
@@ -1401,6 +1402,7 @@
0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0588;ARMENIAN SMALL LETTER YI WITH STROKE;Ll;0;L;;;;;N;;;;;
0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
058D;RIGHT-FACING ARMENIAN ETERNITY SIGN;So;0;ON;;;;;N;;;;;
@@ -1488,6 +1490,7 @@
05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05EF;HEBREW YOD TRIANGLE;Lo;0;R;;;;;N;;;;;
05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
@@ -1982,6 +1985,9 @@
07F8;NKO COMMA;Po;0;ON;;;;;N;;;;;
07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;;
+07FD;NKO DANTAYALAN;Mn;220;NSM;;;;;N;;;;;
+07FE;NKO DOROME SIGN;Sc;0;R;;;;;N;;;;;
+07FF;NKO TAMAN SIGN;Sc;0;R;;;;;N;;;;;
0800;SAMARITAN LETTER ALAF;Lo;0;R;;;;;N;;;;;
0801;SAMARITAN LETTER BIT;Lo;0;R;;;;;N;;;;;
0802;SAMARITAN LETTER GAMAN;Lo;0;R;;;;;N;;;;;
@@ -2112,6 +2118,7 @@
08BB;ARABIC LETTER AFRICAN FEH;Lo;0;AL;;;;;N;;;;;
08BC;ARABIC LETTER AFRICAN QAF;Lo;0;AL;;;;;N;;;;;
08BD;ARABIC LETTER AFRICAN NOON;Lo;0;AL;;;;;N;;;;;
+08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;;
08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;;
08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;;
08D6;ARABIC SMALL HIGH AIN;Mn;230;NSM;;;;;N;;;;;
@@ -2379,6 +2386,7 @@
09FB;BENGALI GANDA MARK;Sc;0;ET;;;;;N;;;;;
09FC;BENGALI LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;
09FD;BENGALI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+09FE;BENGALI SANDHI MARK;Mn;230;NSM;;;;;N;;;;;
0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;;
0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
@@ -2458,6 +2466,7 @@
0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;;
+0A76;GURMUKHI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
@@ -2715,6 +2724,7 @@
0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C04;TELUGU SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;;
0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
@@ -2811,6 +2821,7 @@
0C81;KANNADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C84;KANNADA SIGN SIDDHAM;Po;0;L;;;;;N;;;;;
0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
@@ -3667,54 +3678,54 @@
10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;2D25;
10C7;GEORGIAN CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;2D27;
10CD;GEORGIAN CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;2D2D;
-10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
-10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
-10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
-10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
-10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
-10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
-10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
-10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
-10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
-10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
-10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
-10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
-10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
-10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
-10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
-10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
-10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
-10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
-10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
-10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
-10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
-10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
-10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
-10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
-10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
-10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
-10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
-10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
-10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
-10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
-10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
-10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
-10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
-10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
-10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
-10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
-10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
-10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
-10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
-10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;;
-10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;;
-10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;;
-10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;;
+10D0;GEORGIAN LETTER AN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;1C90;;10D0
+10D1;GEORGIAN LETTER BAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;1C91;;10D1
+10D2;GEORGIAN LETTER GAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;1C92;;10D2
+10D3;GEORGIAN LETTER DON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;1C93;;10D3
+10D4;GEORGIAN LETTER EN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;1C94;;10D4
+10D5;GEORGIAN LETTER VIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;1C95;;10D5
+10D6;GEORGIAN LETTER ZEN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;1C96;;10D6
+10D7;GEORGIAN LETTER TAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;1C97;;10D7
+10D8;GEORGIAN LETTER IN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;1C98;;10D8
+10D9;GEORGIAN LETTER KAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;1C99;;10D9
+10DA;GEORGIAN LETTER LAS;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;1C9A;;10DA
+10DB;GEORGIAN LETTER MAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;1C9B;;10DB
+10DC;GEORGIAN LETTER NAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;1C9C;;10DC
+10DD;GEORGIAN LETTER ON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;1C9D;;10DD
+10DE;GEORGIAN LETTER PAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;1C9E;;10DE
+10DF;GEORGIAN LETTER ZHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;1C9F;;10DF
+10E0;GEORGIAN LETTER RAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;1CA0;;10E0
+10E1;GEORGIAN LETTER SAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;1CA1;;10E1
+10E2;GEORGIAN LETTER TAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;1CA2;;10E2
+10E3;GEORGIAN LETTER UN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;1CA3;;10E3
+10E4;GEORGIAN LETTER PHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;1CA4;;10E4
+10E5;GEORGIAN LETTER KHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;1CA5;;10E5
+10E6;GEORGIAN LETTER GHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;1CA6;;10E6
+10E7;GEORGIAN LETTER QAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;1CA7;;10E7
+10E8;GEORGIAN LETTER SHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;1CA8;;10E8
+10E9;GEORGIAN LETTER CHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;1CA9;;10E9
+10EA;GEORGIAN LETTER CAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;1CAA;;10EA
+10EB;GEORGIAN LETTER JIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;1CAB;;10EB
+10EC;GEORGIAN LETTER CIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;1CAC;;10EC
+10ED;GEORGIAN LETTER CHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;1CAD;;10ED
+10EE;GEORGIAN LETTER XAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;1CAE;;10EE
+10EF;GEORGIAN LETTER JHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;1CAF;;10EF
+10F0;GEORGIAN LETTER HAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;1CB0;;10F0
+10F1;GEORGIAN LETTER HE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;1CB1;;10F1
+10F2;GEORGIAN LETTER HIE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;1CB2;;10F2
+10F3;GEORGIAN LETTER WE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;1CB3;;10F3
+10F4;GEORGIAN LETTER HAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;1CB4;;10F4
+10F5;GEORGIAN LETTER HOE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;1CB5;;10F5
+10F6;GEORGIAN LETTER FI;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;1CB6;;10F6
+10F7;GEORGIAN LETTER YN;Ll;0;L;;;;;N;;;1CB7;;10F7
+10F8;GEORGIAN LETTER ELIFI;Ll;0;L;;;;;N;;;1CB8;;10F8
+10F9;GEORGIAN LETTER TURNED GAN;Ll;0;L;;;;;N;;;1CB9;;10F9
+10FA;GEORGIAN LETTER AIN;Ll;0;L;;;;;N;;;1CBA;;10FA
10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;;
-10FD;GEORGIAN LETTER AEN;Lo;0;L;;;;;N;;;;;
-10FE;GEORGIAN LETTER HARD SIGN;Lo;0;L;;;;;N;;;;;
-10FF;GEORGIAN LETTER LABIAL SIGN;Lo;0;L;;;;;N;;;;;
+10FD;GEORGIAN LETTER AEN;Ll;0;L;;;;;N;;;1CBD;;10FD
+10FE;GEORGIAN LETTER HARD SIGN;Ll;0;L;;;;;N;;;1CBE;;10FE
+10FF;GEORGIAN LETTER LABIAL SIGN;Ll;0;L;;;;;N;;;1CBF;;10FF
1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;;
@@ -5513,6 +5524,7 @@
1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
+1878;MONGOLIAN LETTER CHA WITH TWO DOTS;Lo;0;L;;;;;N;;;;;
1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
@@ -6388,6 +6400,52 @@
1C86;CYRILLIC SMALL LETTER TALL HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
1C87;CYRILLIC SMALL LETTER TALL YAT;Ll;0;L;;;;;N;;;0462;;0462
1C88;CYRILLIC SMALL LETTER UNBLENDED UK;Ll;0;L;;;;;N;;;A64A;;A64A
+1C90;GEORGIAN MTAVRULI CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;10D0;
+1C91;GEORGIAN MTAVRULI CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;10D1;
+1C92;GEORGIAN MTAVRULI CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;10D2;
+1C93;GEORGIAN MTAVRULI CAPITAL LETTER DON;Lu;0;L;;;;;N;;;;10D3;
+1C94;GEORGIAN MTAVRULI CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;10D4;
+1C95;GEORGIAN MTAVRULI CAPITAL LETTER VIN;Lu;0;L;;;;;N;;;;10D5;
+1C96;GEORGIAN MTAVRULI CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;;;10D6;
+1C97;GEORGIAN MTAVRULI CAPITAL LETTER TAN;Lu;0;L;;;;;N;;;;10D7;
+1C98;GEORGIAN MTAVRULI CAPITAL LETTER IN;Lu;0;L;;;;;N;;;;10D8;
+1C99;GEORGIAN MTAVRULI CAPITAL LETTER KAN;Lu;0;L;;;;;N;;;;10D9;
+1C9A;GEORGIAN MTAVRULI CAPITAL LETTER LAS;Lu;0;L;;;;;N;;;;10DA;
+1C9B;GEORGIAN MTAVRULI CAPITAL LETTER MAN;Lu;0;L;;;;;N;;;;10DB;
+1C9C;GEORGIAN MTAVRULI CAPITAL LETTER NAR;Lu;0;L;;;;;N;;;;10DC;
+1C9D;GEORGIAN MTAVRULI CAPITAL LETTER ON;Lu;0;L;;;;;N;;;;10DD;
+1C9E;GEORGIAN MTAVRULI CAPITAL LETTER PAR;Lu;0;L;;;;;N;;;;10DE;
+1C9F;GEORGIAN MTAVRULI CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;;;10DF;
+1CA0;GEORGIAN MTAVRULI CAPITAL LETTER RAE;Lu;0;L;;;;;N;;;;10E0;
+1CA1;GEORGIAN MTAVRULI CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;10E1;
+1CA2;GEORGIAN MTAVRULI CAPITAL LETTER TAR;Lu;0;L;;;;;N;;;;10E2;
+1CA3;GEORGIAN MTAVRULI CAPITAL LETTER UN;Lu;0;L;;;;;N;;;;10E3;
+1CA4;GEORGIAN MTAVRULI CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;;;10E4;
+1CA5;GEORGIAN MTAVRULI CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;;;10E5;
+1CA6;GEORGIAN MTAVRULI CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;;;10E6;
+1CA7;GEORGIAN MTAVRULI CAPITAL LETTER QAR;Lu;0;L;;;;;N;;;;10E7;
+1CA8;GEORGIAN MTAVRULI CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;;;10E8;
+1CA9;GEORGIAN MTAVRULI CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;;;10E9;
+1CAA;GEORGIAN MTAVRULI CAPITAL LETTER CAN;Lu;0;L;;;;;N;;;;10EA;
+1CAB;GEORGIAN MTAVRULI CAPITAL LETTER JIL;Lu;0;L;;;;;N;;;;10EB;
+1CAC;GEORGIAN MTAVRULI CAPITAL LETTER CIL;Lu;0;L;;;;;N;;;;10EC;
+1CAD;GEORGIAN MTAVRULI CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;;;10ED;
+1CAE;GEORGIAN MTAVRULI CAPITAL LETTER XAN;Lu;0;L;;;;;N;;;;10EE;
+1CAF;GEORGIAN MTAVRULI CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;;;10EF;
+1CB0;GEORGIAN MTAVRULI CAPITAL LETTER HAE;Lu;0;L;;;;;N;;;;10F0;
+1CB1;GEORGIAN MTAVRULI CAPITAL LETTER HE;Lu;0;L;;;;;N;;;;10F1;
+1CB2;GEORGIAN MTAVRULI CAPITAL LETTER HIE;Lu;0;L;;;;;N;;;;10F2;
+1CB3;GEORGIAN MTAVRULI CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;10F3;
+1CB4;GEORGIAN MTAVRULI CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;10F4;
+1CB5;GEORGIAN MTAVRULI CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;10F5;
+1CB6;GEORGIAN MTAVRULI CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;10F6;
+1CB7;GEORGIAN MTAVRULI CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;10F7;
+1CB8;GEORGIAN MTAVRULI CAPITAL LETTER ELIFI;Lu;0;L;;;;;N;;;;10F8;
+1CB9;GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN;Lu;0;L;;;;;N;;;;10F9;
+1CBA;GEORGIAN MTAVRULI CAPITAL LETTER AIN;Lu;0;L;;;;;N;;;;10FA;
+1CBD;GEORGIAN MTAVRULI CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;10FD;
+1CBE;GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;10FE;
+1CBF;GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN;Lu;0;L;;;;;N;;;;10FF;
1CC0;SUNDANESE PUNCTUATION BINDU SURYA;Po;0;L;;;;;N;;;;;
1CC1;SUNDANESE PUNCTUATION BINDU PANGLONG;Po;0;L;;;;;N;;;;;
1CC2;SUNDANESE PUNCTUATION BINDU PURNAMA;Po;0;L;;;;;N;;;;;
@@ -9559,7 +9617,7 @@
299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;;
299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;;
29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
-29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;
+29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;N;;;;;
29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;;
29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;;
29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
@@ -10092,6 +10150,9 @@
2BB7;RIBBON ARROW RIGHT DOWN;So;0;ON;;;;;N;;;;;
2BB8;UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
2BB9;UP ARROWHEAD IN A RECTANGLE BOX;So;0;ON;;;;;N;;;;;
+2BBA;OVERLAPPING WHITE SQUARES;So;0;ON;;;;;N;;;;;
+2BBB;OVERLAPPING WHITE AND BLACK SQUARES;So;0;ON;;;;;N;;;;;
+2BBC;OVERLAPPING BLACK SQUARES;So;0;ON;;;;;N;;;;;
2BBD;BALLOT BOX WITH LIGHT X;So;0;ON;;;;;N;;;;;
2BBE;CIRCLED X;So;0;ON;;;;;N;;;;;
2BBF;CIRCLED BOLD X;So;0;ON;;;;;N;;;;;
@@ -10113,10 +10174,50 @@
2BD0;SQUARE POSITION INDICATOR;So;0;ON;;;;;N;;;;;
2BD1;UNCERTAINTY SIGN;So;0;ON;;;;;N;;;;;
2BD2;GROUP MARK;So;0;ON;;;;;N;;;;;
+2BD3;PLUTO FORM TWO;So;0;ON;;;;;N;;;;;
+2BD4;PLUTO FORM THREE;So;0;ON;;;;;N;;;;;
+2BD5;PLUTO FORM FOUR;So;0;ON;;;;;N;;;;;
+2BD6;PLUTO FORM FIVE;So;0;ON;;;;;N;;;;;
+2BD7;TRANSPLUTO;So;0;ON;;;;;N;;;;;
+2BD8;PROSERPINA;So;0;ON;;;;;N;;;;;
+2BD9;ASTRAEA;So;0;ON;;;;;N;;;;;
+2BDA;HYGIEA;So;0;ON;;;;;N;;;;;
+2BDB;PHOLUS;So;0;ON;;;;;N;;;;;
+2BDC;NESSUS;So;0;ON;;;;;N;;;;;
+2BDD;WHITE MOON SELENA;So;0;ON;;;;;N;;;;;
+2BDE;BLACK DIAMOND ON CROSS;So;0;ON;;;;;N;;;;;
+2BDF;TRUE LIGHT MOON ARTA;So;0;ON;;;;;N;;;;;
+2BE0;CUPIDO;So;0;ON;;;;;N;;;;;
+2BE1;HADES;So;0;ON;;;;;N;;;;;
+2BE2;ZEUS;So;0;ON;;;;;N;;;;;
+2BE3;KRONOS;So;0;ON;;;;;N;;;;;
+2BE4;APOLLON;So;0;ON;;;;;N;;;;;
+2BE5;ADMETOS;So;0;ON;;;;;N;;;;;
+2BE6;VULCANUS;So;0;ON;;;;;N;;;;;
+2BE7;POSEIDON;So;0;ON;;;;;N;;;;;
+2BE8;LEFT HALF BLACK STAR;So;0;ON;;;;;N;;;;;
+2BE9;RIGHT HALF BLACK STAR;So;0;ON;;;;;N;;;;;
+2BEA;STAR WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+2BEB;STAR WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
2BEC;LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
2BED;UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
2BEE;RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
2BEF;DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
+2BF0;ERIS FORM ONE;So;0;ON;;;;;N;;;;;
+2BF1;ERIS FORM TWO;So;0;ON;;;;;N;;;;;
+2BF2;SEDNA;So;0;ON;;;;;N;;;;;
+2BF3;RUSSIAN ASTROLOGICAL SYMBOL VIGINTILE;So;0;ON;;;;;N;;;;;
+2BF4;RUSSIAN ASTROLOGICAL SYMBOL NOVILE;So;0;ON;;;;;N;;;;;
+2BF5;RUSSIAN ASTROLOGICAL SYMBOL QUINTILE;So;0;ON;;;;;N;;;;;
+2BF6;RUSSIAN ASTROLOGICAL SYMBOL BINOVILE;So;0;ON;;;;;N;;;;;
+2BF7;RUSSIAN ASTROLOGICAL SYMBOL SENTAGON;So;0;ON;;;;;N;;;;;
+2BF8;RUSSIAN ASTROLOGICAL SYMBOL TREDECILE;So;0;ON;;;;;N;;;;;
+2BF9;EQUALS SIGN WITH INFINITY BELOW;So;0;ON;;;;;N;;;;;
+2BFA;UNITED SYMBOL;So;0;ON;;;;;N;;;;;
+2BFB;SEPARATED SYMBOL;So;0;ON;;;;;N;;;;;
+2BFC;DOUBLED SYMBOL;So;0;ON;;;;;N;;;;;
+2BFD;PASSED SYMBOL;So;0;ON;;;;;N;;;;;
+2BFE;REVERSED RIGHT ANGLE;So;0;ON;;;;;Y;;;;;
2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30;
2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31;
2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32;
@@ -10650,6 +10751,11 @@
2E47;LOW KAVYKA;Po;0;ON;;;;;N;;;;;
2E48;LOW KAVYKA WITH DOT;Po;0;ON;;;;;N;;;;;
2E49;DOUBLE STACKED COMMA;Po;0;ON;;;;;N;;;;;
+2E4A;DOTTED SOLIDUS;Po;0;ON;;;;;N;;;;;
+2E4B;TRIPLE DAGGER;Po;0;ON;;;;;N;;;;;
+2E4C;MEDIEVAL COMMA;Po;0;ON;;;;;N;;;;;
+2E4D;PARAGRAPHUS MARK;Po;0;ON;;;;;N;;;;;
+2E4E;PUNCTUS ELEVATUS MARK;Po;0;ON;;;;;N;;;;;
2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
@@ -11286,6 +11392,7 @@
312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;;
312E;BOPOMOFO LETTER O WITH DOT ABOVE;Lo;0;L;;;;;N;;;;;
+312F;BOPOMOFO LETTER NN;Lo;0;L;;;;;N;;;;;
3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
@@ -12053,7 +12160,7 @@
4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
-9FEA;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+9FEF;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
@@ -13981,6 +14088,7 @@
A7AC;LATIN CAPITAL LETTER SCRIPT G;Lu;0;L;;;;;N;;;;0261;
A7AD;LATIN CAPITAL LETTER L WITH BELT;Lu;0;L;;;;;N;;;;026C;
A7AE;LATIN CAPITAL LETTER SMALL CAPITAL I;Lu;0;L;;;;;N;;;;026A;
+A7AF;LATIN LETTER SMALL CAPITAL Q;Ll;0;L;;;;;N;;;;;
A7B0;LATIN CAPITAL LETTER TURNED K;Lu;0;L;;;;;N;;;;029E;
A7B1;LATIN CAPITAL LETTER TURNED T;Lu;0;L;;;;;N;;;;0287;
A7B2;LATIN CAPITAL LETTER J WITH CROSSED-TAIL;Lu;0;L;;;;;N;;;;029D;
@@ -13989,6 +14097,8 @@
A7B5;LATIN SMALL LETTER BETA;Ll;0;L;;;;;N;;;A7B4;;A7B4
A7B6;LATIN CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;A7B7;
A7B7;LATIN SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;A7B6;;A7B6
+A7B8;LATIN CAPITAL LETTER U WITH STROKE;Lu;0;L;;;;;N;;;;A7B9;
+A7B9;LATIN SMALL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;A7B8;;A7B8
A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;;
A7F8;MODIFIER LETTER CAPITAL H WITH STROKE;Lm;0;L;<super> 0126;;;;N;;;;;
A7F9;MODIFIER LETTER SMALL LIGATURE OE;Lm;0;L;<super> 0153;;;;N;;;;;
@@ -14220,6 +14330,8 @@
A8FB;DEVANAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;;
A8FC;DEVANAGARI SIGN SIDDHAM;Po;0;L;;;;;N;;;;;
A8FD;DEVANAGARI JAIN OM;Lo;0;L;;;;;N;;;;;
+A8FE;DEVANAGARI LETTER AY;Lo;0;L;;;;;N;;;;;
+A8FF;DEVANAGARI VOWEL SIGN AY;Mn;0;NSM;;;;;N;;;;;
A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -18364,6 +18476,8 @@
10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;;
10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;;
10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;;
+10A34;KHAROSHTHI LETTER TTTA;Lo;0;R;;;;;N;;;;;
+10A35;KHAROSHTHI LETTER VHA;Lo;0;R;;;;;N;;;;;
10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;;
10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;;
10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
@@ -18376,6 +18490,7 @@
10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;;
10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10A48;KHAROSHTHI FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;;
10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;;
10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;;
10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;;
@@ -18828,6 +18943,56 @@
10CFD;OLD HUNGARIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;;
10CFE;OLD HUNGARIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
10CFF;OLD HUNGARIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10D00;HANIFI ROHINGYA LETTER A;Lo;0;AL;;;;;N;;;;;
+10D01;HANIFI ROHINGYA LETTER BA;Lo;0;AL;;;;;N;;;;;
+10D02;HANIFI ROHINGYA LETTER PA;Lo;0;AL;;;;;N;;;;;
+10D03;HANIFI ROHINGYA LETTER TA;Lo;0;AL;;;;;N;;;;;
+10D04;HANIFI ROHINGYA LETTER TTA;Lo;0;AL;;;;;N;;;;;
+10D05;HANIFI ROHINGYA LETTER JA;Lo;0;AL;;;;;N;;;;;
+10D06;HANIFI ROHINGYA LETTER CA;Lo;0;AL;;;;;N;;;;;
+10D07;HANIFI ROHINGYA LETTER HA;Lo;0;AL;;;;;N;;;;;
+10D08;HANIFI ROHINGYA LETTER KHA;Lo;0;AL;;;;;N;;;;;
+10D09;HANIFI ROHINGYA LETTER FA;Lo;0;AL;;;;;N;;;;;
+10D0A;HANIFI ROHINGYA LETTER DA;Lo;0;AL;;;;;N;;;;;
+10D0B;HANIFI ROHINGYA LETTER DDA;Lo;0;AL;;;;;N;;;;;
+10D0C;HANIFI ROHINGYA LETTER RA;Lo;0;AL;;;;;N;;;;;
+10D0D;HANIFI ROHINGYA LETTER RRA;Lo;0;AL;;;;;N;;;;;
+10D0E;HANIFI ROHINGYA LETTER ZA;Lo;0;AL;;;;;N;;;;;
+10D0F;HANIFI ROHINGYA LETTER SA;Lo;0;AL;;;;;N;;;;;
+10D10;HANIFI ROHINGYA LETTER SHA;Lo;0;AL;;;;;N;;;;;
+10D11;HANIFI ROHINGYA LETTER KA;Lo;0;AL;;;;;N;;;;;
+10D12;HANIFI ROHINGYA LETTER GA;Lo;0;AL;;;;;N;;;;;
+10D13;HANIFI ROHINGYA LETTER LA;Lo;0;AL;;;;;N;;;;;
+10D14;HANIFI ROHINGYA LETTER MA;Lo;0;AL;;;;;N;;;;;
+10D15;HANIFI ROHINGYA LETTER NA;Lo;0;AL;;;;;N;;;;;
+10D16;HANIFI ROHINGYA LETTER WA;Lo;0;AL;;;;;N;;;;;
+10D17;HANIFI ROHINGYA LETTER KINNA WA;Lo;0;AL;;;;;N;;;;;
+10D18;HANIFI ROHINGYA LETTER YA;Lo;0;AL;;;;;N;;;;;
+10D19;HANIFI ROHINGYA LETTER KINNA YA;Lo;0;AL;;;;;N;;;;;
+10D1A;HANIFI ROHINGYA LETTER NGA;Lo;0;AL;;;;;N;;;;;
+10D1B;HANIFI ROHINGYA LETTER NYA;Lo;0;AL;;;;;N;;;;;
+10D1C;HANIFI ROHINGYA LETTER VA;Lo;0;AL;;;;;N;;;;;
+10D1D;HANIFI ROHINGYA VOWEL A;Lo;0;AL;;;;;N;;;;;
+10D1E;HANIFI ROHINGYA VOWEL I;Lo;0;AL;;;;;N;;;;;
+10D1F;HANIFI ROHINGYA VOWEL U;Lo;0;AL;;;;;N;;;;;
+10D20;HANIFI ROHINGYA VOWEL E;Lo;0;AL;;;;;N;;;;;
+10D21;HANIFI ROHINGYA VOWEL O;Lo;0;AL;;;;;N;;;;;
+10D22;HANIFI ROHINGYA MARK SAKIN;Lo;0;AL;;;;;N;;;;;
+10D23;HANIFI ROHINGYA MARK NA KHONNA;Lo;0;AL;;;;;N;;;;;
+10D24;HANIFI ROHINGYA SIGN HARBAHAY;Mn;230;NSM;;;;;N;;;;;
+10D25;HANIFI ROHINGYA SIGN TAHALA;Mn;230;NSM;;;;;N;;;;;
+10D26;HANIFI ROHINGYA SIGN TANA;Mn;230;NSM;;;;;N;;;;;
+10D27;HANIFI ROHINGYA SIGN TASSI;Mn;230;NSM;;;;;N;;;;;
+10D30;HANIFI ROHINGYA DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+10D31;HANIFI ROHINGYA DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+10D32;HANIFI ROHINGYA DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+10D33;HANIFI ROHINGYA DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+10D34;HANIFI ROHINGYA DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+10D35;HANIFI ROHINGYA DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+10D36;HANIFI ROHINGYA DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+10D37;HANIFI ROHINGYA DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+10D38;HANIFI ROHINGYA DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+10D39;HANIFI ROHINGYA DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
10E60;RUMI DIGIT ONE;No;0;AN;;;1;1;N;;;;;
10E61;RUMI DIGIT TWO;No;0;AN;;;2;2;N;;;;;
10E62;RUMI DIGIT THREE;No;0;AN;;;3;3;N;;;;;
@@ -18859,6 +19024,88 @@
10E7C;RUMI FRACTION ONE QUARTER;No;0;AN;;;;1/4;N;;;;;
10E7D;RUMI FRACTION ONE THIRD;No;0;AN;;;;1/3;N;;;;;
10E7E;RUMI FRACTION TWO THIRDS;No;0;AN;;;;2/3;N;;;;;
+10F00;OLD SOGDIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10F01;OLD SOGDIAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;;
+10F02;OLD SOGDIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
+10F03;OLD SOGDIAN LETTER FINAL BETH;Lo;0;R;;;;;N;;;;;
+10F04;OLD SOGDIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10F05;OLD SOGDIAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10F06;OLD SOGDIAN LETTER FINAL HE;Lo;0;R;;;;;N;;;;;
+10F07;OLD SOGDIAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+10F08;OLD SOGDIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10F09;OLD SOGDIAN LETTER HETH;Lo;0;R;;;;;N;;;;;
+10F0A;OLD SOGDIAN LETTER YODH;Lo;0;R;;;;;N;;;;;
+10F0B;OLD SOGDIAN LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10F0C;OLD SOGDIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10F0D;OLD SOGDIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+10F0E;OLD SOGDIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+10F0F;OLD SOGDIAN LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+10F10;OLD SOGDIAN LETTER FINAL NUN WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;;
+10F11;OLD SOGDIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10F12;OLD SOGDIAN LETTER AYIN;Lo;0;R;;;;;N;;;;;
+10F13;OLD SOGDIAN LETTER ALTERNATE AYIN;Lo;0;R;;;;;N;;;;;
+10F14;OLD SOGDIAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10F15;OLD SOGDIAN LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10F16;OLD SOGDIAN LETTER FINAL SADHE;Lo;0;R;;;;;N;;;;;
+10F17;OLD SOGDIAN LETTER FINAL SADHE WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;;
+10F18;OLD SOGDIAN LETTER RESH-AYIN-DALETH;Lo;0;R;;;;;N;;;;;
+10F19;OLD SOGDIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10F1A;OLD SOGDIAN LETTER TAW;Lo;0;R;;;;;N;;;;;
+10F1B;OLD SOGDIAN LETTER FINAL TAW;Lo;0;R;;;;;N;;;;;
+10F1C;OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;;
+10F1D;OLD SOGDIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10F1E;OLD SOGDIAN NUMBER TWO;No;0;R;;;;2;N;;;;;
+10F1F;OLD SOGDIAN NUMBER THREE;No;0;R;;;;3;N;;;;;
+10F20;OLD SOGDIAN NUMBER FOUR;No;0;R;;;;4;N;;;;;
+10F21;OLD SOGDIAN NUMBER FIVE;No;0;R;;;;5;N;;;;;
+10F22;OLD SOGDIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10F23;OLD SOGDIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10F24;OLD SOGDIAN NUMBER THIRTY;No;0;R;;;;30;N;;;;;
+10F25;OLD SOGDIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10F26;OLD SOGDIAN FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;;
+10F27;OLD SOGDIAN LIGATURE AYIN-DALETH;Lo;0;R;;;;;N;;;;;
+10F30;SOGDIAN LETTER ALEPH;Lo;0;AL;;;;;N;;;;;
+10F31;SOGDIAN LETTER BETH;Lo;0;AL;;;;;N;;;;;
+10F32;SOGDIAN LETTER GIMEL;Lo;0;AL;;;;;N;;;;;
+10F33;SOGDIAN LETTER HE;Lo;0;AL;;;;;N;;;;;
+10F34;SOGDIAN LETTER WAW;Lo;0;AL;;;;;N;;;;;
+10F35;SOGDIAN LETTER ZAYIN;Lo;0;AL;;;;;N;;;;;
+10F36;SOGDIAN LETTER HETH;Lo;0;AL;;;;;N;;;;;
+10F37;SOGDIAN LETTER YODH;Lo;0;AL;;;;;N;;;;;
+10F38;SOGDIAN LETTER KAPH;Lo;0;AL;;;;;N;;;;;
+10F39;SOGDIAN LETTER LAMEDH;Lo;0;AL;;;;;N;;;;;
+10F3A;SOGDIAN LETTER MEM;Lo;0;AL;;;;;N;;;;;
+10F3B;SOGDIAN LETTER NUN;Lo;0;AL;;;;;N;;;;;
+10F3C;SOGDIAN LETTER SAMEKH;Lo;0;AL;;;;;N;;;;;
+10F3D;SOGDIAN LETTER AYIN;Lo;0;AL;;;;;N;;;;;
+10F3E;SOGDIAN LETTER PE;Lo;0;AL;;;;;N;;;;;
+10F3F;SOGDIAN LETTER SADHE;Lo;0;AL;;;;;N;;;;;
+10F40;SOGDIAN LETTER RESH-AYIN;Lo;0;AL;;;;;N;;;;;
+10F41;SOGDIAN LETTER SHIN;Lo;0;AL;;;;;N;;;;;
+10F42;SOGDIAN LETTER TAW;Lo;0;AL;;;;;N;;;;;
+10F43;SOGDIAN LETTER FETH;Lo;0;AL;;;;;N;;;;;
+10F44;SOGDIAN LETTER LESH;Lo;0;AL;;;;;N;;;;;
+10F45;SOGDIAN INDEPENDENT SHIN;Lo;0;AL;;;;;N;;;;;
+10F46;SOGDIAN COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+10F47;SOGDIAN COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+10F48;SOGDIAN COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F49;SOGDIAN COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F4A;SOGDIAN COMBINING CURVE ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F4B;SOGDIAN COMBINING CURVE BELOW;Mn;220;NSM;;;;;N;;;;;
+10F4C;SOGDIAN COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F4D;SOGDIAN COMBINING HOOK BELOW;Mn;220;NSM;;;;;N;;;;;
+10F4E;SOGDIAN COMBINING LONG HOOK BELOW;Mn;220;NSM;;;;;N;;;;;
+10F4F;SOGDIAN COMBINING RESH BELOW;Mn;220;NSM;;;;;N;;;;;
+10F50;SOGDIAN COMBINING STROKE BELOW;Mn;220;NSM;;;;;N;;;;;
+10F51;SOGDIAN NUMBER ONE;No;0;AL;;;;1;N;;;;;
+10F52;SOGDIAN NUMBER TEN;No;0;AL;;;;10;N;;;;;
+10F53;SOGDIAN NUMBER TWENTY;No;0;AL;;;;20;N;;;;;
+10F54;SOGDIAN NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;;
+10F55;SOGDIAN PUNCTUATION TWO VERTICAL BARS;Po;0;AL;;;;;N;;;;;
+10F56;SOGDIAN PUNCTUATION TWO VERTICAL BARS WITH DOTS;Po;0;AL;;;;;N;;;;;
+10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
+10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;;
+10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
11000;BRAHMI SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
11001;BRAHMI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
11002;BRAHMI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
@@ -19034,6 +19281,7 @@
110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;
110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;;
110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+110CD;KAITHI NUMBER SIGN ABOVE;Cf;0;L;;;;;N;;;;;
110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;;
110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;;
110D2;SORA SOMPENG LETTER BAH;Lo;0;L;;;;;N;;;;;
@@ -19136,6 +19384,9 @@
11141;CHAKMA DANDA;Po;0;L;;;;;N;;;;;
11142;CHAKMA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
11143;CHAKMA QUESTION MARK;Po;0;L;;;;;N;;;;;
+11144;CHAKMA LETTER LHAA;Lo;0;L;;;;;N;;;;;
+11145;CHAKMA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11146;CHAKMA VOWEL SIGN EI;Mc;0;L;;;;;N;;;;;
11150;MAHAJANI LETTER A;Lo;0;L;;;;;N;;;;;
11151;MAHAJANI LETTER I;Lo;0;L;;;;;N;;;;;
11152;MAHAJANI LETTER U;Lo;0;L;;;;;N;;;;;
@@ -19248,7 +19499,7 @@
111C6;SHARADA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
111C7;SHARADA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
111C8;SHARADA SEPARATOR;Po;0;L;;;;;N;;;;;
-111C9;SHARADA SANDHI MARK;Po;0;L;;;;;N;;;;;
+111C9;SHARADA SANDHI MARK;Mn;0;NSM;;;;;N;;;;;
111CA;SHARADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
111CB;SHARADA VOWEL MODIFIER MARK;Mn;0;NSM;;;;;N;;;;;
111CC;SHARADA EXTRA SHORT VOWEL MARK;Mn;0;NSM;;;;;N;;;;;
@@ -19508,6 +19759,7 @@
11337;GRANTHA LETTER SSA;Lo;0;L;;;;;N;;;;;
11338;GRANTHA LETTER SA;Lo;0;L;;;;;N;;;;;
11339;GRANTHA LETTER HA;Lo;0;L;;;;;N;;;;;
+1133B;COMBINING BINDU BELOW;Mn;7;NSM;;;;;N;;;;;
1133C;GRANTHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
1133D;GRANTHA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
1133E;GRANTHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
@@ -19635,6 +19887,7 @@
11459;NEWA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
1145B;NEWA PLACEHOLDER MARK;Po;0;L;;;;;N;;;;;
1145D;NEWA INSERTION SIGN;Po;0;L;;;;;N;;;;;
+1145E;NEWA SANDHI MARK;Mn;230;NSM;;;;;N;;;;;
11480;TIRHUTA ANJI;Lo;0;L;;;;;N;;;;;
11481;TIRHUTA LETTER A;Lo;0;L;;;;;N;;;;;
11482;TIRHUTA LETTER AA;Lo;0;L;;;;;N;;;;;
@@ -19993,6 +20246,7 @@
11717;AHOM LETTER GHA;Lo;0;L;;;;;N;;;;;
11718;AHOM LETTER BHA;Lo;0;L;;;;;N;;;;;
11719;AHOM LETTER JHA;Lo;0;L;;;;;N;;;;;
+1171A;AHOM LETTER ALTERNATE BA;Lo;0;L;;;;;N;;;;;
1171D;AHOM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;;
1171E;AHOM CONSONANT SIGN MEDIAL RA;Mn;0;NSM;;;;;N;;;;;
1171F;AHOM CONSONANT SIGN MEDIAL LIGATING RA;Mn;0;NSM;;;;;N;;;;;
@@ -20024,6 +20278,66 @@
1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;;
1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;;
1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;;
+11800;DOGRA LETTER A;Lo;0;L;;;;;N;;;;;
+11801;DOGRA LETTER AA;Lo;0;L;;;;;N;;;;;
+11802;DOGRA LETTER I;Lo;0;L;;;;;N;;;;;
+11803;DOGRA LETTER II;Lo;0;L;;;;;N;;;;;
+11804;DOGRA LETTER U;Lo;0;L;;;;;N;;;;;
+11805;DOGRA LETTER UU;Lo;0;L;;;;;N;;;;;
+11806;DOGRA LETTER E;Lo;0;L;;;;;N;;;;;
+11807;DOGRA LETTER AI;Lo;0;L;;;;;N;;;;;
+11808;DOGRA LETTER O;Lo;0;L;;;;;N;;;;;
+11809;DOGRA LETTER AU;Lo;0;L;;;;;N;;;;;
+1180A;DOGRA LETTER KA;Lo;0;L;;;;;N;;;;;
+1180B;DOGRA LETTER KHA;Lo;0;L;;;;;N;;;;;
+1180C;DOGRA LETTER GA;Lo;0;L;;;;;N;;;;;
+1180D;DOGRA LETTER GHA;Lo;0;L;;;;;N;;;;;
+1180E;DOGRA LETTER NGA;Lo;0;L;;;;;N;;;;;
+1180F;DOGRA LETTER CA;Lo;0;L;;;;;N;;;;;
+11810;DOGRA LETTER CHA;Lo;0;L;;;;;N;;;;;
+11811;DOGRA LETTER JA;Lo;0;L;;;;;N;;;;;
+11812;DOGRA LETTER JHA;Lo;0;L;;;;;N;;;;;
+11813;DOGRA LETTER NYA;Lo;0;L;;;;;N;;;;;
+11814;DOGRA LETTER TTA;Lo;0;L;;;;;N;;;;;
+11815;DOGRA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11816;DOGRA LETTER DDA;Lo;0;L;;;;;N;;;;;
+11817;DOGRA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11818;DOGRA LETTER NNA;Lo;0;L;;;;;N;;;;;
+11819;DOGRA LETTER TA;Lo;0;L;;;;;N;;;;;
+1181A;DOGRA LETTER THA;Lo;0;L;;;;;N;;;;;
+1181B;DOGRA LETTER DA;Lo;0;L;;;;;N;;;;;
+1181C;DOGRA LETTER DHA;Lo;0;L;;;;;N;;;;;
+1181D;DOGRA LETTER NA;Lo;0;L;;;;;N;;;;;
+1181E;DOGRA LETTER PA;Lo;0;L;;;;;N;;;;;
+1181F;DOGRA LETTER PHA;Lo;0;L;;;;;N;;;;;
+11820;DOGRA LETTER BA;Lo;0;L;;;;;N;;;;;
+11821;DOGRA LETTER BHA;Lo;0;L;;;;;N;;;;;
+11822;DOGRA LETTER MA;Lo;0;L;;;;;N;;;;;
+11823;DOGRA LETTER YA;Lo;0;L;;;;;N;;;;;
+11824;DOGRA LETTER RA;Lo;0;L;;;;;N;;;;;
+11825;DOGRA LETTER LA;Lo;0;L;;;;;N;;;;;
+11826;DOGRA LETTER VA;Lo;0;L;;;;;N;;;;;
+11827;DOGRA LETTER SHA;Lo;0;L;;;;;N;;;;;
+11828;DOGRA LETTER SSA;Lo;0;L;;;;;N;;;;;
+11829;DOGRA LETTER SA;Lo;0;L;;;;;N;;;;;
+1182A;DOGRA LETTER HA;Lo;0;L;;;;;N;;;;;
+1182B;DOGRA LETTER RRA;Lo;0;L;;;;;N;;;;;
+1182C;DOGRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+1182D;DOGRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+1182E;DOGRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+1182F;DOGRA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11830;DOGRA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+11831;DOGRA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+11832;DOGRA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+11833;DOGRA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11834;DOGRA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11835;DOGRA VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11836;DOGRA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+11837;DOGRA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11838;DOGRA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11839;DOGRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1183A;DOGRA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+1183B;DOGRA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
118A0;WARANG CITI CAPITAL LETTER NGAA;Lu;0;L;;;;;N;;;;118C0;
118A1;WARANG CITI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;118C1;
118A2;WARANG CITI CAPITAL LETTER WI;Lu;0;L;;;;;N;;;;118C2;
@@ -20115,8 +20429,8 @@
11A04;ZANABAZAR SQUARE VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
11A05;ZANABAZAR SQUARE VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;
11A06;ZANABAZAR SQUARE VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
-11A07;ZANABAZAR SQUARE VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-11A08;ZANABAZAR SQUARE VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+11A07;ZANABAZAR SQUARE VOWEL SIGN AI;Mn;0;L;;;;;N;;;;;
+11A08;ZANABAZAR SQUARE VOWEL SIGN AU;Mn;0;L;;;;;N;;;;;
11A09;ZANABAZAR SQUARE VOWEL SIGN REVERSED I;Mn;0;NSM;;;;;N;;;;;
11A0A;ZANABAZAR SQUARE VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
11A0B;ZANABAZAR SQUARE LETTER KA;Lo;0;L;;;;;N;;;;;
@@ -20255,6 +20569,7 @@
11A9A;SOYOMBO MARK TSHEG;Po;0;L;;;;;N;;;;;
11A9B;SOYOMBO MARK SHAD;Po;0;L;;;;;N;;;;;
11A9C;SOYOMBO MARK DOUBLE SHAD;Po;0;L;;;;;N;;;;;
+11A9D;SOYOMBO MARK PLUTA;Lo;0;L;;;;;N;;;;;
11A9E;SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME;Po;0;L;;;;;N;;;;;
11A9F;SOYOMBO HEAD MARK WITH MOON AND SUN AND FLAME;Po;0;L;;;;;N;;;;;
11AA0;SOYOMBO HEAD MARK WITH MOON AND SUN;Po;0;L;;;;;N;;;;;
@@ -20557,6 +20872,94 @@
11D57;MASARAM GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
11D58;MASARAM GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
11D59;MASARAM GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11D60;GUNJALA GONDI LETTER A;Lo;0;L;;;;;N;;;;;
+11D61;GUNJALA GONDI LETTER AA;Lo;0;L;;;;;N;;;;;
+11D62;GUNJALA GONDI LETTER I;Lo;0;L;;;;;N;;;;;
+11D63;GUNJALA GONDI LETTER II;Lo;0;L;;;;;N;;;;;
+11D64;GUNJALA GONDI LETTER U;Lo;0;L;;;;;N;;;;;
+11D65;GUNJALA GONDI LETTER UU;Lo;0;L;;;;;N;;;;;
+11D67;GUNJALA GONDI LETTER EE;Lo;0;L;;;;;N;;;;;
+11D68;GUNJALA GONDI LETTER AI;Lo;0;L;;;;;N;;;;;
+11D6A;GUNJALA GONDI LETTER OO;Lo;0;L;;;;;N;;;;;
+11D6B;GUNJALA GONDI LETTER AU;Lo;0;L;;;;;N;;;;;
+11D6C;GUNJALA GONDI LETTER YA;Lo;0;L;;;;;N;;;;;
+11D6D;GUNJALA GONDI LETTER VA;Lo;0;L;;;;;N;;;;;
+11D6E;GUNJALA GONDI LETTER BA;Lo;0;L;;;;;N;;;;;
+11D6F;GUNJALA GONDI LETTER BHA;Lo;0;L;;;;;N;;;;;
+11D70;GUNJALA GONDI LETTER MA;Lo;0;L;;;;;N;;;;;
+11D71;GUNJALA GONDI LETTER KA;Lo;0;L;;;;;N;;;;;
+11D72;GUNJALA GONDI LETTER KHA;Lo;0;L;;;;;N;;;;;
+11D73;GUNJALA GONDI LETTER TA;Lo;0;L;;;;;N;;;;;
+11D74;GUNJALA GONDI LETTER THA;Lo;0;L;;;;;N;;;;;
+11D75;GUNJALA GONDI LETTER LA;Lo;0;L;;;;;N;;;;;
+11D76;GUNJALA GONDI LETTER GA;Lo;0;L;;;;;N;;;;;
+11D77;GUNJALA GONDI LETTER GHA;Lo;0;L;;;;;N;;;;;
+11D78;GUNJALA GONDI LETTER DA;Lo;0;L;;;;;N;;;;;
+11D79;GUNJALA GONDI LETTER DHA;Lo;0;L;;;;;N;;;;;
+11D7A;GUNJALA GONDI LETTER NA;Lo;0;L;;;;;N;;;;;
+11D7B;GUNJALA GONDI LETTER CA;Lo;0;L;;;;;N;;;;;
+11D7C;GUNJALA GONDI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11D7D;GUNJALA GONDI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11D7E;GUNJALA GONDI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11D7F;GUNJALA GONDI LETTER LLA;Lo;0;L;;;;;N;;;;;
+11D80;GUNJALA GONDI LETTER JA;Lo;0;L;;;;;N;;;;;
+11D81;GUNJALA GONDI LETTER JHA;Lo;0;L;;;;;N;;;;;
+11D82;GUNJALA GONDI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11D83;GUNJALA GONDI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11D84;GUNJALA GONDI LETTER NGA;Lo;0;L;;;;;N;;;;;
+11D85;GUNJALA GONDI LETTER PA;Lo;0;L;;;;;N;;;;;
+11D86;GUNJALA GONDI LETTER PHA;Lo;0;L;;;;;N;;;;;
+11D87;GUNJALA GONDI LETTER HA;Lo;0;L;;;;;N;;;;;
+11D88;GUNJALA GONDI LETTER RA;Lo;0;L;;;;;N;;;;;
+11D89;GUNJALA GONDI LETTER SA;Lo;0;L;;;;;N;;;;;
+11D8A;GUNJALA GONDI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11D8B;GUNJALA GONDI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+11D8C;GUNJALA GONDI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+11D8D;GUNJALA GONDI VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+11D8E;GUNJALA GONDI VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+11D90;GUNJALA GONDI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+11D91;GUNJALA GONDI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11D93;GUNJALA GONDI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+11D94;GUNJALA GONDI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+11D95;GUNJALA GONDI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11D96;GUNJALA GONDI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11D97;GUNJALA GONDI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11D98;GUNJALA GONDI OM;Lo;0;L;;;;;N;;;;;
+11DA0;GUNJALA GONDI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11DA1;GUNJALA GONDI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11DA2;GUNJALA GONDI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11DA3;GUNJALA GONDI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11DA4;GUNJALA GONDI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11DA5;GUNJALA GONDI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11DA6;GUNJALA GONDI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11DA7;GUNJALA GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11DA8;GUNJALA GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11DA9;GUNJALA GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11EE0;MAKASAR LETTER KA;Lo;0;L;;;;;N;;;;;
+11EE1;MAKASAR LETTER GA;Lo;0;L;;;;;N;;;;;
+11EE2;MAKASAR LETTER NGA;Lo;0;L;;;;;N;;;;;
+11EE3;MAKASAR LETTER PA;Lo;0;L;;;;;N;;;;;
+11EE4;MAKASAR LETTER BA;Lo;0;L;;;;;N;;;;;
+11EE5;MAKASAR LETTER MA;Lo;0;L;;;;;N;;;;;
+11EE6;MAKASAR LETTER TA;Lo;0;L;;;;;N;;;;;
+11EE7;MAKASAR LETTER DA;Lo;0;L;;;;;N;;;;;
+11EE8;MAKASAR LETTER NA;Lo;0;L;;;;;N;;;;;
+11EE9;MAKASAR LETTER CA;Lo;0;L;;;;;N;;;;;
+11EEA;MAKASAR LETTER JA;Lo;0;L;;;;;N;;;;;
+11EEB;MAKASAR LETTER NYA;Lo;0;L;;;;;N;;;;;
+11EEC;MAKASAR LETTER YA;Lo;0;L;;;;;N;;;;;
+11EED;MAKASAR LETTER RA;Lo;0;L;;;;;N;;;;;
+11EEE;MAKASAR LETTER LA;Lo;0;L;;;;;N;;;;;
+11EEF;MAKASAR LETTER VA;Lo;0;L;;;;;N;;;;;
+11EF0;MAKASAR LETTER SA;Lo;0;L;;;;;N;;;;;
+11EF1;MAKASAR LETTER A;Lo;0;L;;;;;N;;;;;
+11EF2;MAKASAR ANGKA;Lo;0;L;;;;;N;;;;;
+11EF3;MAKASAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11EF4;MAKASAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11EF5;MAKASAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+11EF6;MAKASAR VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+11EF7;MAKASAR PASSIMBANG;Po;0;L;;;;;N;;;;;
+11EF8;MAKASAR END OF SECTION;Po;0;L;;;;;N;;;;;
12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;;
12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;;
12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;;
@@ -24220,6 +24623,97 @@
16B8D;PAHAWH HMONG CLAN SIGN TSWB;Lo;0;L;;;;;N;;;;;
16B8E;PAHAWH HMONG CLAN SIGN KWM;Lo;0;L;;;;;N;;;;;
16B8F;PAHAWH HMONG CLAN SIGN VWJ;Lo;0;L;;;;;N;;;;;
+16E40;MEDEFAIDRIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;16E60;
+16E41;MEDEFAIDRIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;16E61;
+16E42;MEDEFAIDRIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;16E62;
+16E43;MEDEFAIDRIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;16E63;
+16E44;MEDEFAIDRIN CAPITAL LETTER ATIU;Lu;0;L;;;;;N;;;;16E64;
+16E45;MEDEFAIDRIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;16E65;
+16E46;MEDEFAIDRIN CAPITAL LETTER KP;Lu;0;L;;;;;N;;;;16E66;
+16E47;MEDEFAIDRIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;16E67;
+16E48;MEDEFAIDRIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;16E68;
+16E49;MEDEFAIDRIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;16E69;
+16E4A;MEDEFAIDRIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;16E6A;
+16E4B;MEDEFAIDRIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;16E6B;
+16E4C;MEDEFAIDRIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;16E6C;
+16E4D;MEDEFAIDRIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;16E6D;
+16E4E;MEDEFAIDRIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;16E6E;
+16E4F;MEDEFAIDRIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;16E6F;
+16E50;MEDEFAIDRIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;16E70;
+16E51;MEDEFAIDRIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;16E71;
+16E52;MEDEFAIDRIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;16E72;
+16E53;MEDEFAIDRIN CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;16E73;
+16E54;MEDEFAIDRIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;16E74;
+16E55;MEDEFAIDRIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;16E75;
+16E56;MEDEFAIDRIN CAPITAL LETTER HP;Lu;0;L;;;;;N;;;;16E76;
+16E57;MEDEFAIDRIN CAPITAL LETTER NY;Lu;0;L;;;;;N;;;;16E77;
+16E58;MEDEFAIDRIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;16E78;
+16E59;MEDEFAIDRIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;16E79;
+16E5A;MEDEFAIDRIN CAPITAL LETTER OE;Lu;0;L;;;;;N;;;;16E7A;
+16E5B;MEDEFAIDRIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;16E7B;
+16E5C;MEDEFAIDRIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;16E7C;
+16E5D;MEDEFAIDRIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;16E7D;
+16E5E;MEDEFAIDRIN CAPITAL LETTER AI;Lu;0;L;;;;;N;;;;16E7E;
+16E5F;MEDEFAIDRIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;16E7F;
+16E60;MEDEFAIDRIN SMALL LETTER M;Ll;0;L;;;;;N;;;16E40;;16E40
+16E61;MEDEFAIDRIN SMALL LETTER S;Ll;0;L;;;;;N;;;16E41;;16E41
+16E62;MEDEFAIDRIN SMALL LETTER V;Ll;0;L;;;;;N;;;16E42;;16E42
+16E63;MEDEFAIDRIN SMALL LETTER W;Ll;0;L;;;;;N;;;16E43;;16E43
+16E64;MEDEFAIDRIN SMALL LETTER ATIU;Ll;0;L;;;;;N;;;16E44;;16E44
+16E65;MEDEFAIDRIN SMALL LETTER Z;Ll;0;L;;;;;N;;;16E45;;16E45
+16E66;MEDEFAIDRIN SMALL LETTER KP;Ll;0;L;;;;;N;;;16E46;;16E46
+16E67;MEDEFAIDRIN SMALL LETTER P;Ll;0;L;;;;;N;;;16E47;;16E47
+16E68;MEDEFAIDRIN SMALL LETTER T;Ll;0;L;;;;;N;;;16E48;;16E48
+16E69;MEDEFAIDRIN SMALL LETTER G;Ll;0;L;;;;;N;;;16E49;;16E49
+16E6A;MEDEFAIDRIN SMALL LETTER F;Ll;0;L;;;;;N;;;16E4A;;16E4A
+16E6B;MEDEFAIDRIN SMALL LETTER I;Ll;0;L;;;;;N;;;16E4B;;16E4B
+16E6C;MEDEFAIDRIN SMALL LETTER K;Ll;0;L;;;;;N;;;16E4C;;16E4C
+16E6D;MEDEFAIDRIN SMALL LETTER A;Ll;0;L;;;;;N;;;16E4D;;16E4D
+16E6E;MEDEFAIDRIN SMALL LETTER J;Ll;0;L;;;;;N;;;16E4E;;16E4E
+16E6F;MEDEFAIDRIN SMALL LETTER E;Ll;0;L;;;;;N;;;16E4F;;16E4F
+16E70;MEDEFAIDRIN SMALL LETTER B;Ll;0;L;;;;;N;;;16E50;;16E50
+16E71;MEDEFAIDRIN SMALL LETTER C;Ll;0;L;;;;;N;;;16E51;;16E51
+16E72;MEDEFAIDRIN SMALL LETTER U;Ll;0;L;;;;;N;;;16E52;;16E52
+16E73;MEDEFAIDRIN SMALL LETTER YU;Ll;0;L;;;;;N;;;16E53;;16E53
+16E74;MEDEFAIDRIN SMALL LETTER L;Ll;0;L;;;;;N;;;16E54;;16E54
+16E75;MEDEFAIDRIN SMALL LETTER Q;Ll;0;L;;;;;N;;;16E55;;16E55
+16E76;MEDEFAIDRIN SMALL LETTER HP;Ll;0;L;;;;;N;;;16E56;;16E56
+16E77;MEDEFAIDRIN SMALL LETTER NY;Ll;0;L;;;;;N;;;16E57;;16E57
+16E78;MEDEFAIDRIN SMALL LETTER X;Ll;0;L;;;;;N;;;16E58;;16E58
+16E79;MEDEFAIDRIN SMALL LETTER D;Ll;0;L;;;;;N;;;16E59;;16E59
+16E7A;MEDEFAIDRIN SMALL LETTER OE;Ll;0;L;;;;;N;;;16E5A;;16E5A
+16E7B;MEDEFAIDRIN SMALL LETTER N;Ll;0;L;;;;;N;;;16E5B;;16E5B
+16E7C;MEDEFAIDRIN SMALL LETTER R;Ll;0;L;;;;;N;;;16E5C;;16E5C
+16E7D;MEDEFAIDRIN SMALL LETTER O;Ll;0;L;;;;;N;;;16E5D;;16E5D
+16E7E;MEDEFAIDRIN SMALL LETTER AI;Ll;0;L;;;;;N;;;16E5E;;16E5E
+16E7F;MEDEFAIDRIN SMALL LETTER Y;Ll;0;L;;;;;N;;;16E5F;;16E5F
+16E80;MEDEFAIDRIN DIGIT ZERO;No;0;L;;;;0;N;;;;;
+16E81;MEDEFAIDRIN DIGIT ONE;No;0;L;;;;1;N;;;;;
+16E82;MEDEFAIDRIN DIGIT TWO;No;0;L;;;;2;N;;;;;
+16E83;MEDEFAIDRIN DIGIT THREE;No;0;L;;;;3;N;;;;;
+16E84;MEDEFAIDRIN DIGIT FOUR;No;0;L;;;;4;N;;;;;
+16E85;MEDEFAIDRIN DIGIT FIVE;No;0;L;;;;5;N;;;;;
+16E86;MEDEFAIDRIN DIGIT SIX;No;0;L;;;;6;N;;;;;
+16E87;MEDEFAIDRIN DIGIT SEVEN;No;0;L;;;;7;N;;;;;
+16E88;MEDEFAIDRIN DIGIT EIGHT;No;0;L;;;;8;N;;;;;
+16E89;MEDEFAIDRIN DIGIT NINE;No;0;L;;;;9;N;;;;;
+16E8A;MEDEFAIDRIN NUMBER TEN;No;0;L;;;;10;N;;;;;
+16E8B;MEDEFAIDRIN NUMBER ELEVEN;No;0;L;;;;11;N;;;;;
+16E8C;MEDEFAIDRIN NUMBER TWELVE;No;0;L;;;;12;N;;;;;
+16E8D;MEDEFAIDRIN NUMBER THIRTEEN;No;0;L;;;;13;N;;;;;
+16E8E;MEDEFAIDRIN NUMBER FOURTEEN;No;0;L;;;;14;N;;;;;
+16E8F;MEDEFAIDRIN NUMBER FIFTEEN;No;0;L;;;;15;N;;;;;
+16E90;MEDEFAIDRIN NUMBER SIXTEEN;No;0;L;;;;16;N;;;;;
+16E91;MEDEFAIDRIN NUMBER SEVENTEEN;No;0;L;;;;17;N;;;;;
+16E92;MEDEFAIDRIN NUMBER EIGHTEEN;No;0;L;;;;18;N;;;;;
+16E93;MEDEFAIDRIN NUMBER NINETEEN;No;0;L;;;;19;N;;;;;
+16E94;MEDEFAIDRIN DIGIT ONE ALTERNATE FORM;No;0;L;;;;1;N;;;;;
+16E95;MEDEFAIDRIN DIGIT TWO ALTERNATE FORM;No;0;L;;;;2;N;;;;;
+16E96;MEDEFAIDRIN DIGIT THREE ALTERNATE FORM;No;0;L;;;;3;N;;;;;
+16E97;MEDEFAIDRIN COMMA;Po;0;L;;;;;N;;;;;
+16E98;MEDEFAIDRIN FULL STOP;Po;0;L;;;;;N;;;;;
+16E99;MEDEFAIDRIN SYMBOL AIVA;Po;0;L;;;;;N;;;;;
+16E9A;MEDEFAIDRIN EXCLAMATION OH;Po;0;L;;;;;N;;;;;
16F00;MIAO LETTER PA;Lo;0;L;;;;;N;;;;;
16F01;MIAO LETTER BA;Lo;0;L;;;;;N;;;;;
16F02;MIAO LETTER YI PA;Lo;0;L;;;;;N;;;;;
@@ -24356,7 +24850,7 @@
16FE0;TANGUT ITERATION MARK;Lm;0;L;;;;;N;;;;;
16FE1;NUSHU ITERATION MARK;Lm;0;L;;;;;N;;;;;
17000;<Tangut Ideograph, First>;Lo;0;L;;;;;N;;;;;
-187EC;<Tangut Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+187F1;<Tangut Ideograph, Last>;Lo;0;L;;;;;N;;;;;
18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;;
18801;TANGUT COMPONENT-002;Lo;0;L;;;;;N;;;;;
18802;TANGUT COMPONENT-003;Lo;0;L;;;;;N;;;;;
@@ -26489,6 +26983,26 @@
1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;;
1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;;
1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;;
+1D2E0;MAYAN NUMERAL ZERO;No;0;L;;;;0;N;;;;;
+1D2E1;MAYAN NUMERAL ONE;No;0;L;;;;1;N;;;;;
+1D2E2;MAYAN NUMERAL TWO;No;0;L;;;;2;N;;;;;
+1D2E3;MAYAN NUMERAL THREE;No;0;L;;;;3;N;;;;;
+1D2E4;MAYAN NUMERAL FOUR;No;0;L;;;;4;N;;;;;
+1D2E5;MAYAN NUMERAL FIVE;No;0;L;;;;5;N;;;;;
+1D2E6;MAYAN NUMERAL SIX;No;0;L;;;;6;N;;;;;
+1D2E7;MAYAN NUMERAL SEVEN;No;0;L;;;;7;N;;;;;
+1D2E8;MAYAN NUMERAL EIGHT;No;0;L;;;;8;N;;;;;
+1D2E9;MAYAN NUMERAL NINE;No;0;L;;;;9;N;;;;;
+1D2EA;MAYAN NUMERAL TEN;No;0;L;;;;10;N;;;;;
+1D2EB;MAYAN NUMERAL ELEVEN;No;0;L;;;;11;N;;;;;
+1D2EC;MAYAN NUMERAL TWELVE;No;0;L;;;;12;N;;;;;
+1D2ED;MAYAN NUMERAL THIRTEEN;No;0;L;;;;13;N;;;;;
+1D2EE;MAYAN NUMERAL FOURTEEN;No;0;L;;;;14;N;;;;;
+1D2EF;MAYAN NUMERAL FIFTEEN;No;0;L;;;;15;N;;;;;
+1D2F0;MAYAN NUMERAL SIXTEEN;No;0;L;;;;16;N;;;;;
+1D2F1;MAYAN NUMERAL SEVENTEEN;No;0;L;;;;17;N;;;;;
+1D2F2;MAYAN NUMERAL EIGHTEEN;No;0;L;;;;18;N;;;;;
+1D2F3;MAYAN NUMERAL NINETEEN;No;0;L;;;;19;N;;;;;
1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;;
1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;;
@@ -26594,6 +27108,13 @@
1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;;
1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;;
1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;;
+1D372;IDEOGRAPHIC TALLY MARK ONE;No;0;L;;;;1;N;;;;;
+1D373;IDEOGRAPHIC TALLY MARK TWO;No;0;L;;;;2;N;;;;;
+1D374;IDEOGRAPHIC TALLY MARK THREE;No;0;L;;;;3;N;;;;;
+1D375;IDEOGRAPHIC TALLY MARK FOUR;No;0;L;;;;4;N;;;;;
+1D376;IDEOGRAPHIC TALLY MARK FIVE;No;0;L;;;;5;N;;;;;
+1D377;TALLY MARK ONE;No;0;L;;;;1;N;;;;;
+1D378;TALLY MARK FIVE;No;0;L;;;;5;N;;;;;
1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
@@ -28600,6 +29121,74 @@
1E959;ADLAM DIGIT NINE;Nd;0;R;;9;9;9;N;;;;;
1E95E;ADLAM INITIAL EXCLAMATION MARK;Po;0;R;;;;;N;;;;;
1E95F;ADLAM INITIAL QUESTION MARK;Po;0;R;;;;;N;;;;;
+1EC71;INDIC SIYAQ NUMBER ONE;No;0;AL;;;;1;N;;;;;
+1EC72;INDIC SIYAQ NUMBER TWO;No;0;AL;;;;2;N;;;;;
+1EC73;INDIC SIYAQ NUMBER THREE;No;0;AL;;;;3;N;;;;;
+1EC74;INDIC SIYAQ NUMBER FOUR;No;0;AL;;;;4;N;;;;;
+1EC75;INDIC SIYAQ NUMBER FIVE;No;0;AL;;;;5;N;;;;;
+1EC76;INDIC SIYAQ NUMBER SIX;No;0;AL;;;;6;N;;;;;
+1EC77;INDIC SIYAQ NUMBER SEVEN;No;0;AL;;;;7;N;;;;;
+1EC78;INDIC SIYAQ NUMBER EIGHT;No;0;AL;;;;8;N;;;;;
+1EC79;INDIC SIYAQ NUMBER NINE;No;0;AL;;;;9;N;;;;;
+1EC7A;INDIC SIYAQ NUMBER TEN;No;0;AL;;;;10;N;;;;;
+1EC7B;INDIC SIYAQ NUMBER TWENTY;No;0;AL;;;;20;N;;;;;
+1EC7C;INDIC SIYAQ NUMBER THIRTY;No;0;AL;;;;30;N;;;;;
+1EC7D;INDIC SIYAQ NUMBER FORTY;No;0;AL;;;;40;N;;;;;
+1EC7E;INDIC SIYAQ NUMBER FIFTY;No;0;AL;;;;50;N;;;;;
+1EC7F;INDIC SIYAQ NUMBER SIXTY;No;0;AL;;;;60;N;;;;;
+1EC80;INDIC SIYAQ NUMBER SEVENTY;No;0;AL;;;;70;N;;;;;
+1EC81;INDIC SIYAQ NUMBER EIGHTY;No;0;AL;;;;80;N;;;;;
+1EC82;INDIC SIYAQ NUMBER NINETY;No;0;AL;;;;90;N;;;;;
+1EC83;INDIC SIYAQ NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;;
+1EC84;INDIC SIYAQ NUMBER TWO HUNDRED;No;0;AL;;;;200;N;;;;;
+1EC85;INDIC SIYAQ NUMBER THREE HUNDRED;No;0;AL;;;;300;N;;;;;
+1EC86;INDIC SIYAQ NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;;
+1EC87;INDIC SIYAQ NUMBER FIVE HUNDRED;No;0;AL;;;;500;N;;;;;
+1EC88;INDIC SIYAQ NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;;
+1EC89;INDIC SIYAQ NUMBER SEVEN HUNDRED;No;0;AL;;;;700;N;;;;;
+1EC8A;INDIC SIYAQ NUMBER EIGHT HUNDRED;No;0;AL;;;;800;N;;;;;
+1EC8B;INDIC SIYAQ NUMBER NINE HUNDRED;No;0;AL;;;;900;N;;;;;
+1EC8C;INDIC SIYAQ NUMBER ONE THOUSAND;No;0;AL;;;;1000;N;;;;;
+1EC8D;INDIC SIYAQ NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;;
+1EC8E;INDIC SIYAQ NUMBER THREE THOUSAND;No;0;AL;;;;3000;N;;;;;
+1EC8F;INDIC SIYAQ NUMBER FOUR THOUSAND;No;0;AL;;;;4000;N;;;;;
+1EC90;INDIC SIYAQ NUMBER FIVE THOUSAND;No;0;AL;;;;5000;N;;;;;
+1EC91;INDIC SIYAQ NUMBER SIX THOUSAND;No;0;AL;;;;6000;N;;;;;
+1EC92;INDIC SIYAQ NUMBER SEVEN THOUSAND;No;0;AL;;;;7000;N;;;;;
+1EC93;INDIC SIYAQ NUMBER EIGHT THOUSAND;No;0;AL;;;;8000;N;;;;;
+1EC94;INDIC SIYAQ NUMBER NINE THOUSAND;No;0;AL;;;;9000;N;;;;;
+1EC95;INDIC SIYAQ NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;;
+1EC96;INDIC SIYAQ NUMBER TWENTY THOUSAND;No;0;AL;;;;20000;N;;;;;
+1EC97;INDIC SIYAQ NUMBER THIRTY THOUSAND;No;0;AL;;;;30000;N;;;;;
+1EC98;INDIC SIYAQ NUMBER FORTY THOUSAND;No;0;AL;;;;40000;N;;;;;
+1EC99;INDIC SIYAQ NUMBER FIFTY THOUSAND;No;0;AL;;;;50000;N;;;;;
+1EC9A;INDIC SIYAQ NUMBER SIXTY THOUSAND;No;0;AL;;;;60000;N;;;;;
+1EC9B;INDIC SIYAQ NUMBER SEVENTY THOUSAND;No;0;AL;;;;70000;N;;;;;
+1EC9C;INDIC SIYAQ NUMBER EIGHTY THOUSAND;No;0;AL;;;;80000;N;;;;;
+1EC9D;INDIC SIYAQ NUMBER NINETY THOUSAND;No;0;AL;;;;90000;N;;;;;
+1EC9E;INDIC SIYAQ NUMBER LAKH;No;0;AL;;;;100000;N;;;;;
+1EC9F;INDIC SIYAQ NUMBER LAKHAN;No;0;AL;;;;200000;N;;;;;
+1ECA0;INDIC SIYAQ LAKH MARK;No;0;AL;;;;100000;N;;;;;
+1ECA1;INDIC SIYAQ NUMBER KAROR;No;0;AL;;;;10000000;N;;;;;
+1ECA2;INDIC SIYAQ NUMBER KARORAN;No;0;AL;;;;20000000;N;;;;;
+1ECA3;INDIC SIYAQ NUMBER PREFIXED ONE;No;0;AL;;;;1;N;;;;;
+1ECA4;INDIC SIYAQ NUMBER PREFIXED TWO;No;0;AL;;;;2;N;;;;;
+1ECA5;INDIC SIYAQ NUMBER PREFIXED THREE;No;0;AL;;;;3;N;;;;;
+1ECA6;INDIC SIYAQ NUMBER PREFIXED FOUR;No;0;AL;;;;4;N;;;;;
+1ECA7;INDIC SIYAQ NUMBER PREFIXED FIVE;No;0;AL;;;;5;N;;;;;
+1ECA8;INDIC SIYAQ NUMBER PREFIXED SIX;No;0;AL;;;;6;N;;;;;
+1ECA9;INDIC SIYAQ NUMBER PREFIXED SEVEN;No;0;AL;;;;7;N;;;;;
+1ECAA;INDIC SIYAQ NUMBER PREFIXED EIGHT;No;0;AL;;;;8;N;;;;;
+1ECAB;INDIC SIYAQ NUMBER PREFIXED NINE;No;0;AL;;;;9;N;;;;;
+1ECAC;INDIC SIYAQ PLACEHOLDER;So;0;AL;;;;;N;;;;;
+1ECAD;INDIC SIYAQ FRACTION ONE QUARTER;No;0;AL;;;;1/4;N;;;;;
+1ECAE;INDIC SIYAQ FRACTION ONE HALF;No;0;AL;;;;1/2;N;;;;;
+1ECAF;INDIC SIYAQ FRACTION THREE QUARTERS;No;0;AL;;;;3/4;N;;;;;
+1ECB0;INDIC SIYAQ RUPEE MARK;Sc;0;AL;;;;;N;;;;;
+1ECB1;INDIC SIYAQ NUMBER ALTERNATE ONE;No;0;AL;;;;1;N;;;;;
+1ECB2;INDIC SIYAQ NUMBER ALTERNATE TWO;No;0;AL;;;;2;N;;;;;
+1ECB3;INDIC SIYAQ NUMBER ALTERNATE TEN THOUSAND;No;0;AL;;;;10000;N;;;;;
+1ECB4;INDIC SIYAQ ALTERNATE LAKH MARK;No;0;AL;;;;100000;N;;;;;
1EE00;ARABIC MATHEMATICAL ALEF;Lo;0;AL;<font> 0627;;;;N;;;;;
1EE01;ARABIC MATHEMATICAL BEH;Lo;0;AL;<font> 0628;;;;N;;;;;
1EE02;ARABIC MATHEMATICAL JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
@@ -29013,6 +29602,7 @@
1F12C;CIRCLED ITALIC LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;;
1F12D;CIRCLED CD;So;0;L;<circle> 0043 0044;;;;N;;;;;
1F12E;CIRCLED WZ;So;0;L;<circle> 0057 005A;;;;N;;;;;
+1F12F;COPYLEFT SYMBOL;So;0;ON;;;;;N;;;;;
1F130;SQUARED LATIN CAPITAL LETTER A;So;0;L;<square> 0041;;;;N;;;;;
1F131;SQUARED LATIN CAPITAL LETTER B;So;0;L;<square> 0042;;;;N;;;;;
1F132;SQUARED LATIN CAPITAL LETTER C;So;0;L;<square> 0043;;;;N;;;;;
@@ -30227,6 +30817,7 @@
1F6F6;CANOE;So;0;ON;;;;;N;;;;;
1F6F7;SLED;So;0;ON;;;;;N;;;;;
1F6F8;FLYING SAUCER;So;0;ON;;;;;N;;;;;
+1F6F9;SKATEBOARD;So;0;ON;;;;;N;;;;;
1F700;ALCHEMICAL SYMBOL FOR QUINTESSENCE;So;0;ON;;;;;N;;;;;
1F701;ALCHEMICAL SYMBOL FOR AIR;So;0;ON;;;;;N;;;;;
1F702;ALCHEMICAL SYMBOL FOR FIRE;So;0;ON;;;;;N;;;;;
@@ -30428,6 +31019,10 @@
1F7D2;LIGHT TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
1F7D3;HEAVY TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
1F7D4;HEAVY TWELVE POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+1F7D5;CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F7D6;NEGATIVE CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F7D7;CIRCLED SQUARE;So;0;ON;;;;;N;;;;;
+1F7D8;NEGATIVE CIRCLED SQUARE;So;0;ON;;;;;N;;;;;
1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
@@ -30648,6 +31243,9 @@
1F94A;BOXING GLOVE;So;0;ON;;;;;N;;;;;
1F94B;MARTIAL ARTS UNIFORM;So;0;ON;;;;;N;;;;;
1F94C;CURLING STONE;So;0;ON;;;;;N;;;;;
+1F94D;LACROSSE STICK AND BALL;So;0;ON;;;;;N;;;;;
+1F94E;SOFTBALL;So;0;ON;;;;;N;;;;;
+1F94F;FLYING DISC;So;0;ON;;;;;N;;;;;
1F950;CROISSANT;So;0;ON;;;;;N;;;;;
1F951;AVOCADO;So;0;ON;;;;;N;;;;;
1F952;CUCUMBER;So;0;ON;;;;;N;;;;;
@@ -30676,6 +31274,20 @@
1F969;CUT OF MEAT;So;0;ON;;;;;N;;;;;
1F96A;SANDWICH;So;0;ON;;;;;N;;;;;
1F96B;CANNED FOOD;So;0;ON;;;;;N;;;;;
+1F96C;LEAFY GREEN;So;0;ON;;;;;N;;;;;
+1F96D;MANGO;So;0;ON;;;;;N;;;;;
+1F96E;MOON CAKE;So;0;ON;;;;;N;;;;;
+1F96F;BAGEL;So;0;ON;;;;;N;;;;;
+1F970;SMILING FACE WITH SMILING EYES AND THREE HEARTS;So;0;ON;;;;;N;;;;;
+1F973;FACE WITH PARTY HORN AND PARTY HAT;So;0;ON;;;;;N;;;;;
+1F974;FACE WITH UNEVEN EYES AND WAVY MOUTH;So;0;ON;;;;;N;;;;;
+1F975;OVERHEATED FACE;So;0;ON;;;;;N;;;;;
+1F976;FREEZING FACE;So;0;ON;;;;;N;;;;;
+1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;;
+1F97C;LAB COAT;So;0;ON;;;;;N;;;;;
+1F97D;GOGGLES;So;0;ON;;;;;N;;;;;
+1F97E;HIKING BOOT;So;0;ON;;;;;N;;;;;
+1F97F;FLAT SHOE;So;0;ON;;;;;N;;;;;
1F980;CRAB;So;0;ON;;;;;N;;;;;
1F981;LION FACE;So;0;ON;;;;;N;;;;;
1F982;SCORPION;So;0;ON;;;;;N;;;;;
@@ -30700,7 +31312,30 @@
1F995;SAUROPOD;So;0;ON;;;;;N;;;;;
1F996;T-REX;So;0;ON;;;;;N;;;;;
1F997;CRICKET;So;0;ON;;;;;N;;;;;
+1F998;KANGAROO;So;0;ON;;;;;N;;;;;
+1F999;LLAMA;So;0;ON;;;;;N;;;;;
+1F99A;PEACOCK;So;0;ON;;;;;N;;;;;
+1F99B;HIPPOPOTAMUS;So;0;ON;;;;;N;;;;;
+1F99C;PARROT;So;0;ON;;;;;N;;;;;
+1F99D;RACCOON;So;0;ON;;;;;N;;;;;
+1F99E;LOBSTER;So;0;ON;;;;;N;;;;;
+1F99F;MOSQUITO;So;0;ON;;;;;N;;;;;
+1F9A0;MICROBE;So;0;ON;;;;;N;;;;;
+1F9A1;BADGER;So;0;ON;;;;;N;;;;;
+1F9A2;SWAN;So;0;ON;;;;;N;;;;;
+1F9B0;EMOJI COMPONENT RED HAIR;So;0;ON;;;;;N;;;;;
+1F9B1;EMOJI COMPONENT CURLY HAIR;So;0;ON;;;;;N;;;;;
+1F9B2;EMOJI COMPONENT BALD;So;0;ON;;;;;N;;;;;
+1F9B3;EMOJI COMPONENT WHITE HAIR;So;0;ON;;;;;N;;;;;
+1F9B4;BONE;So;0;ON;;;;;N;;;;;
+1F9B5;LEG;So;0;ON;;;;;N;;;;;
+1F9B6;FOOT;So;0;ON;;;;;N;;;;;
+1F9B7;TOOTH;So;0;ON;;;;;N;;;;;
+1F9B8;SUPERHERO;So;0;ON;;;;;N;;;;;
+1F9B9;SUPERVILLAIN;So;0;ON;;;;;N;;;;;
1F9C0;CHEESE WEDGE;So;0;ON;;;;;N;;;;;
+1F9C1;CUPCAKE;So;0;ON;;;;;N;;;;;
+1F9C2;SALT SHAKER;So;0;ON;;;;;N;;;;;
1F9D0;FACE WITH MONOCLE;So;0;ON;;;;;N;;;;;
1F9D1;ADULT;So;0;ON;;;;;N;;;;;
1F9D2;CHILD;So;0;ON;;;;;N;;;;;
@@ -30724,6 +31359,45 @@
1F9E4;GLOVES;So;0;ON;;;;;N;;;;;
1F9E5;COAT;So;0;ON;;;;;N;;;;;
1F9E6;SOCKS;So;0;ON;;;;;N;;;;;
+1F9E7;RED GIFT ENVELOPE;So;0;ON;;;;;N;;;;;
+1F9E8;FIRECRACKER;So;0;ON;;;;;N;;;;;
+1F9E9;JIGSAW PUZZLE PIECE;So;0;ON;;;;;N;;;;;
+1F9EA;TEST TUBE;So;0;ON;;;;;N;;;;;
+1F9EB;PETRI DISH;So;0;ON;;;;;N;;;;;
+1F9EC;DNA DOUBLE HELIX;So;0;ON;;;;;N;;;;;
+1F9ED;COMPASS;So;0;ON;;;;;N;;;;;
+1F9EE;ABACUS;So;0;ON;;;;;N;;;;;
+1F9EF;FIRE EXTINGUISHER;So;0;ON;;;;;N;;;;;
+1F9F0;TOOLBOX;So;0;ON;;;;;N;;;;;
+1F9F1;BRICK;So;0;ON;;;;;N;;;;;
+1F9F2;MAGNET;So;0;ON;;;;;N;;;;;
+1F9F3;LUGGAGE;So;0;ON;;;;;N;;;;;
+1F9F4;LOTION BOTTLE;So;0;ON;;;;;N;;;;;
+1F9F5;SPOOL OF THREAD;So;0;ON;;;;;N;;;;;
+1F9F6;BALL OF YARN;So;0;ON;;;;;N;;;;;
+1F9F7;SAFETY PIN;So;0;ON;;;;;N;;;;;
+1F9F8;TEDDY BEAR;So;0;ON;;;;;N;;;;;
+1F9F9;BROOM;So;0;ON;;;;;N;;;;;
+1F9FA;BASKET;So;0;ON;;;;;N;;;;;
+1F9FB;ROLL OF PAPER;So;0;ON;;;;;N;;;;;
+1F9FC;BAR OF SOAP;So;0;ON;;;;;N;;;;;
+1F9FD;SPONGE;So;0;ON;;;;;N;;;;;
+1F9FE;RECEIPT;So;0;ON;;;;;N;;;;;
+1F9FF;NAZAR AMULET;So;0;ON;;;;;N;;;;;
+1FA60;XIANGQI RED GENERAL;So;0;ON;;;;;N;;;;;
+1FA61;XIANGQI RED MANDARIN;So;0;ON;;;;;N;;;;;
+1FA62;XIANGQI RED ELEPHANT;So;0;ON;;;;;N;;;;;
+1FA63;XIANGQI RED HORSE;So;0;ON;;;;;N;;;;;
+1FA64;XIANGQI RED CHARIOT;So;0;ON;;;;;N;;;;;
+1FA65;XIANGQI RED CANNON;So;0;ON;;;;;N;;;;;
+1FA66;XIANGQI RED SOLDIER;So;0;ON;;;;;N;;;;;
+1FA67;XIANGQI BLACK GENERAL;So;0;ON;;;;;N;;;;;
+1FA68;XIANGQI BLACK MANDARIN;So;0;ON;;;;;N;;;;;
+1FA69;XIANGQI BLACK ELEPHANT;So;0;ON;;;;;N;;;;;
+1FA6A;XIANGQI BLACK HORSE;So;0;ON;;;;;N;;;;;
+1FA6B;XIANGQI BLACK CHARIOT;So;0;ON;;;;;N;;;;;
+1FA6C;XIANGQI BLACK CANNON;So;0;ON;;;;;N;;;;;
+1FA6D;XIANGQI BLACK SOLDIER;So;0;ON;;;;;N;;;;;
20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;
Binary file test/jdk/java/lang/Character/charprop00.bin has changed
Binary file test/jdk/java/lang/Character/charprop01.bin has changed
Binary file test/jdk/java/lang/Character/charprop02.bin has changed
Binary file test/jdk/java/lang/Character/charprop03.bin has changed
Binary file test/jdk/java/lang/Character/charprop0E.bin has changed
Binary file test/jdk/java/lang/Character/charprop0F.bin has changed
Binary file test/jdk/java/lang/Character/charprop10.bin has changed
--- a/test/jdk/java/net/Socket/asyncClose/AsyncCloseTest.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/java/net/Socket/asyncClose/AsyncCloseTest.java Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2018, 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,19 +36,20 @@
}
protected synchronized AsyncCloseTest passed() {
- if (reason == null)
+ if (failureReason() == null) {
passed = true;
+ }
return this;
}
protected synchronized AsyncCloseTest failed(String r) {
passed = false;
- reason = r;
+ reason.append(String.format("%n - %s", r));
return this;
}
public synchronized String failureReason() {
- return reason;
+ return reason.length() > 0 ? reason.toString() : null;
}
protected synchronized void closed() {
@@ -60,6 +61,6 @@
}
private boolean passed;
- private String reason;
+ private final StringBuilder reason = new StringBuilder();
private boolean closed;
}
--- a/test/jdk/java/net/Socket/asyncClose/DatagramSocket_receive.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/java/net/Socket/asyncClose/DatagramSocket_receive.java Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2018, 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,7 +40,7 @@
public DatagramSocket_receive(int timeout) throws SocketException {
this.timeout = timeout;
latch = new CountDownLatch(1);
- s = new DatagramSocket();
+ s = new DatagramSocket(0, InetAddress.getLoopbackAddress());
}
public String description() {
@@ -60,7 +60,7 @@
}
latch.countDown();
s.receive(p);
- failed("DatagramSocket.receive(DatagramPacket) returned unexpectly!!");
+ failed("DatagramSocket.receive(DatagramPacket) returned unexpectly!!" + " - " + p.getAddress());
} catch (SocketException se) {
if (latch.getCount() != 1) {
closed();
--- a/test/jdk/java/net/Socket/asyncClose/ServerSocket_accept.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/java/net/Socket/asyncClose/ServerSocket_accept.java Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2018, 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,7 @@
public ServerSocket_accept(int timeout) throws IOException {
this.timeout = timeout;
latch = new CountDownLatch(1);
- ss = new ServerSocket(0);
+ ss = new ServerSocket(0, 0, InetAddress.getLoopbackAddress());
}
public String description() {
@@ -56,7 +56,7 @@
try {
latch.countDown();
Socket s = ss.accept();
- failed("ServerSocket.accept() returned unexpectly!!");
+ failed("ServerSocket.accept() returned unexpectly!!" + " - " + s);
} catch (SocketException se) {
closed();
} catch (Exception e) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/net/URL/RacyHandler.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+import java.io.IOException;
+import java.lang.reflect.*;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+import java.util.concurrent.CountDownLatch;
+
+/*
+ * @test
+ * @bug 8213942
+ * @summary URLStreamHandler initialization race
+ * @run main/othervm RacyHandler
+ * @run main/othervm RacyHandler
+ * @run main/othervm RacyHandler
+ */
+
+/*
+ * This test makes reasonable effort to reproduce the race.
+ * Run repeatedly to ensure correctness.
+ */
+public class RacyHandler {
+ static volatile boolean factorySet = false;
+ static int NUM_THREADS = 2;
+ static CountDownLatch cdl = new CountDownLatch(NUM_THREADS + 1);
+
+ public static void main(String[] args) {
+ RacyHandler tester = new RacyHandler();
+ tester.runTest();
+ }
+
+ public void runTest() {
+ new Thread(() -> {
+ try {
+ cdl.await();
+ URL.setURLStreamHandlerFactory(proto -> new CustomHttpHandler());
+ factorySet = true;
+ } catch (Exception ignore) { }
+ }).start();
+ cdl.countDown();
+
+ for (int i = 0; i < NUM_THREADS; i++) {
+ new Thread(() -> {
+ try {
+ cdl.await();
+ while (!factorySet) {
+ // trigger URL class load
+ getURLStreamHandler();
+ }
+ } catch (Exception ignore) { }
+ }).start();
+ cdl.countDown();
+ }
+
+ // wait for the factory to be set
+ while (!factorySet) { }
+ // The sleep seems to help trigger the failure
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException ie) {
+ }
+
+ URLStreamHandler httpHandler = getURLStreamHandler();
+ System.out.println("After setting factory URL handlers: http " + httpHandler);
+ if (!(httpHandler instanceof CustomHttpHandler))
+ throw new RuntimeException("FAILED: Incorrect handler type");
+ }
+
+ /*
+ * This is just so we can see what we get for the URLStreamHandler back
+ * from the factory to verify whether it really is using our Handler
+ * or something else...
+ */
+ public URLStreamHandler getURLStreamHandler() {
+ try {
+ Method method = URL.class.getDeclaredMethod("getURLStreamHandler",
+ String.class);
+ method.setAccessible(true);
+ return (URLStreamHandler) method.invoke(null, "http");
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ class CustomHttpHandler extends URLStreamHandler {
+ @Override
+ protected URLConnection openConnection(URL u) throws IOException {
+ return null;
+ }
+ }
+}
\ No newline at end of file
--- a/test/jdk/java/nio/channels/SocketChannel/AsyncCloseChannel.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/java/nio/channels/SocketChannel/AsyncCloseChannel.java Wed Nov 21 13:53:17 2018 -0500
@@ -24,7 +24,6 @@
/* @test
* @bug 6285901 6501089
* @summary Check no data is written to wrong socket channel during async closing.
- * @run main/othervm AsyncCloseChannel
*/
import java.io.IOException;
@@ -112,7 +111,7 @@
public void run() {
boolean empty = true;
try {
- for(;;) {
+ while (keepGoing) {
int c = s.getInputStream().read();
if(c == -1) {
if(!empty)
--- a/test/jdk/javax/crypto/Cipher/TestCipherMode.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/javax/crypto/Cipher/TestCipherMode.java Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2018, 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
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 4953556
+ * @bug 4953556 8210838
* @summary ensure that IllegalStateException is thrown if the
* Cipher object is initialized with a wrong mode, e.g. WRAP_MODE
* for update()/doFinal() calls.
@@ -44,13 +44,13 @@
public static void main(String[] argv) throws Exception {
TestCipherMode test = new TestCipherMode();
System.out.println("Testing ENCRYPT_MODE...");
- test.checkMode(Cipher.ENCRYPT_MODE);
+ test.checkMode(Cipher.ENCRYPT_MODE, "encryption");
System.out.println("Testing DECRYPT_MODE...");
- test.checkMode(Cipher.DECRYPT_MODE);
+ test.checkMode(Cipher.DECRYPT_MODE, "decryption");
System.out.println("Testing WRAP_MODE...");
- test.checkMode(Cipher.WRAP_MODE);
+ test.checkMode(Cipher.WRAP_MODE, "key wrapping");
System.out.println("Testing UNWRAP_MODE...");
- test.checkMode(Cipher.UNWRAP_MODE);
+ test.checkMode(Cipher.UNWRAP_MODE, "key unwrapping");
System.out.println("All Tests Passed");
}
@@ -60,11 +60,23 @@
private TestCipherMode() throws NoSuchAlgorithmException,
NoSuchProviderException, NoSuchPaddingException {
c = Cipher.getInstance(ALGO + "/ECB/PKCS5Padding", "SunJCE");
+ String output = c.toString();
+ if (!output.equals(
+ "Cipher.DES/ECB/PKCS5Padding, mode: not initialized, algorithm from: SunJCE")) {
+ throw new RuntimeException(
+ "Unexpected Cipher.toString() output:" + output);
+ }
key = new SecretKeySpec(new byte[8], ALGO);
}
- private void checkMode(int mode) throws Exception {
+ private void checkMode(int mode, String opString) throws Exception {
c.init(mode, key);
+ String output = c.toString();
+ if (!output.contains("Cipher.DES/ECB/PKCS5Padding")
+ && !output.contains(opString)
+ && !output.contains("Algorithm from: SunJCE")) {
+ throw new Exception("Unexpected toString() output:" + output);
+ }
switch (mode) {
case Cipher.ENCRYPT_MODE:
--- a/test/jdk/jdk/jfr/event/metadata/TestDefaultConfigurations.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/jdk/jfr/event/metadata/TestDefaultConfigurations.java Wed Nov 21 13:53:17 2018 -0500
@@ -173,6 +173,10 @@
insertSetting(doc, EventNames.ActiveRecording, "threshold", "0 ns");
insertSetting(doc, EventNames.JavaExceptionThrow, "threshold", "0 ns");
insertSetting(doc, EventNames.JavaErrorThrow, "threshold", "0 ns");
+ insertSetting(doc, EventNames.SecurityProperty, "threshold", "0 ns");
+ insertSetting(doc, EventNames.TLSHandshake, "threshold", "0 ns");
+ insertSetting(doc, EventNames.X509Certificate, "threshold", "0 ns");
+ insertSetting(doc, EventNames.X509Validation, "threshold", "0 ns");
return doc;
}
--- a/test/jdk/jdk/jfr/event/runtime/TestActiveSettingEvent.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/jdk/jfr/event/runtime/TestActiveSettingEvent.java Wed Nov 21 13:53:17 2018 -0500
@@ -201,6 +201,10 @@
settingValues.put(EventNames.ActiveRecording + "#threshold", "0 ns");
settingValues.put(EventNames.JavaExceptionThrow + "#threshold", "0 ns");
settingValues.put(EventNames.JavaErrorThrow + "#threshold", "0 ns");
+ settingValues.put(EventNames.SecurityProperty + "#threshold", "0 ns");
+ settingValues.put(EventNames.TLSHandshake + "#threshold", "0 ns");
+ settingValues.put(EventNames.X509Certificate + "#threshold", "0 ns");
+ settingValues.put(EventNames.X509Validation + "#threshold", "0 ns");
try (Recording recording = new Recording(c)) {
Map<Long, EventType> eventTypes = new HashMap<>();
--- a/test/jdk/jdk/jfr/event/runtime/TestModuleEvents.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/jdk/jdk/jfr/event/runtime/TestModuleEvents.java Wed Nov 21 13:53:17 2018 -0500
@@ -64,8 +64,8 @@
recording.stop();
List<RecordedEvent> events = Events.fromRecording(recording);
- assertDependency(events, "jdk.jfr", "java.base"); // jdk.jfr requires java.base (by edfault)
- assertDependency(events, "java.base", "jdk.jfr"); // java.base require jdk.jfr for JDK events, i.e. FileRead
+ assertDependency(events, "jdk.jfr", "java.base"); // jdk.jfr requires java.base (by default)
+ assertDependency(events, "java.base", "jdk.jfr"); // java.base requires jdk.jfr for JDK events, i.e. FileRead
recording.close();
}
@@ -97,8 +97,9 @@
events.stream().forEach((ev) -> {
String exportedPackage = getValue(ev.getValue("exportedPackage"), "name", UNNAMED);
String toModule = getValue(ev.getValue("targetModule"), "name", UNNAMED);
-
- edges.put(exportedPackage, toModule);
+ if (!toModule.equals("jdk.proxy1")) { // ignore jdk.proxy1 module
+ edges.put(exportedPackage, toModule);
+ }
});
// We expect
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/jfr/event/security/TestSecurityPropertyModificationEvent.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2018, 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 jdk.jfr.event.security;
+
+import java.security.Security;
+import java.util.List;
+
+import jdk.jfr.Recording;
+import jdk.jfr.consumer.RecordedEvent;
+import jdk.test.lib.Asserts;
+import jdk.test.lib.jfr.EventNames;
+import jdk.test.lib.jfr.Events;
+import jdk.test.lib.security.JDKSecurityProperties;
+
+/*
+ * @test
+ * @bug 8148188
+ * @summary Enhance the security libraries to record events of interest
+ * @key jfr
+ * @library /test/lib
+ * @run main/othervm jdk.jfr.event.security.TestSecurityPropertyModificationEvent
+ */
+public class TestSecurityPropertyModificationEvent {
+
+ static List<String> keys = JDKSecurityProperties.getKeys();
+ static String keyValue = "shouldBecomeAnEvent";
+
+ public static void main(String[] args) throws Exception {
+ try (Recording recording = new Recording()) {
+ recording.enable(EventNames.SecurityProperty);
+ recording.start();
+ for (String key: keys) {
+ Security.setProperty(key, keyValue);
+ }
+ recording.stop();
+
+ List<RecordedEvent> events = Events.fromRecording(recording);
+ Asserts.assertEquals(events.size(), keys.size(),
+ "Incorrect number of events");
+ assertEvent(events);
+ }
+ }
+
+ private static void assertEvent(List<RecordedEvent> events) throws Exception {
+ int i = 1;
+ for (RecordedEvent e : events) {
+ if (keys.contains(e.getString("key"))) {
+ Events.assertField(e, "value").equal(keyValue);
+ i++;
+ } else {
+ System.out.println(events);
+ throw new Exception("Unexpected event at index:" + i);
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/jfr/event/security/TestTLSHandshakeEvent.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2018, 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 jdk.jfr.event.security;
+
+import java.util.List;
+
+import jdk.jfr.Recording;
+import jdk.jfr.consumer.RecordedEvent;
+import jdk.test.lib.jfr.EventNames;
+import jdk.test.lib.jfr.Events;
+import jdk.test.lib.security.TestTLSHandshake;
+
+/*
+ * @test
+ * @bug 8148188
+ * @summary Enhance the security libraries to record events of interest
+ * @key jfr
+ * @library /test/lib
+ * @run main/othervm jdk.jfr.event.security.TestTLSHandshakeEvent
+ */
+public class TestTLSHandshakeEvent {
+ public static void main(String[] args) throws Exception {
+ try (Recording recording = new Recording()) {
+ recording.enable(EventNames.TLSHandshake);
+ recording.start();
+ TestTLSHandshake handshake = new TestTLSHandshake();
+ handshake.run();
+ recording.stop();
+
+ List<RecordedEvent> events = Events.fromRecording(recording);
+ Events.hasEvents(events);
+ assertEvent(events, handshake);
+ }
+ }
+
+ private static void assertEvent(List<RecordedEvent> events, TestTLSHandshake handshake) throws Exception {
+ System.out.println(events);
+ for (RecordedEvent e : events) {
+ if (handshake.peerHost.equals(e.getString("peerHost"))) {
+ Events.assertField(e, "peerPort").equal(handshake.peerPort);
+ Events.assertField(e, "protocolVersion").equal(handshake.protocolVersion);
+ Events.assertField(e, "certificateId").equal(TestTLSHandshake.HASHCODE);
+ Events.assertField(e, "cipherSuite").equal(TestTLSHandshake.CIPHER_SUITE);
+ return;
+ }
+ }
+ System.out.println(events);
+ throw new Exception("Could not find event with hostname: " + handshake.peerHost);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/jfr/event/security/TestX509CertificateEvent.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2018, 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 jdk.jfr.event.security;
+
+import java.security.cert.CertificateFactory;
+import java.util.List;
+
+import jdk.jfr.Recording;
+import jdk.jfr.consumer.RecordedEvent;
+import jdk.test.lib.Asserts;
+import jdk.test.lib.jfr.EventNames;
+import jdk.test.lib.jfr.Events;
+import jdk.test.lib.security.TestCertificate;
+
+/*
+ * @test
+ * @bug 8148188
+ * @summary Enhance the security libraries to record events of interest
+ * @key jfr
+ * @library /test/lib
+ * @run main/othervm jdk.jfr.event.security.TestX509CertificateEvent
+ */
+public class TestX509CertificateEvent {
+ public static void main(String[] args) throws Exception {
+ try (Recording recording = new Recording()) {
+ recording.enable(EventNames.X509Certificate);
+ recording.start();
+
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+ TestCertificate.ONE.generate(cf);
+ TestCertificate.TWO.generate(cf);
+ // Generate twice to make sure only one event per certificate is generated
+ TestCertificate.ONE.generate(cf);
+ TestCertificate.TWO.generate(cf);
+
+ recording.stop();
+
+ List<RecordedEvent> events = Events.fromRecording(recording);
+ Asserts.assertEquals(events.size(), 2, "Incorrect number of X509Certificate events");
+ assertEvent(events, TestCertificate.ONE);
+ assertEvent(events, TestCertificate.TWO);
+ }
+ }
+
+ private static void assertEvent(List<RecordedEvent> events, TestCertificate cert) throws Exception {
+ for (RecordedEvent e : events) {
+ if (e.getLong("certificateId") == cert.certId) {
+ Events.assertField(e, "algorithm").equal(cert.algorithm);
+ Events.assertField(e, "subject").equal(cert.subject);
+ Events.assertField(e, "issuer").equal(cert.issuer);
+ Events.assertField(e, "keyType").equal(cert.keyType);
+ Events.assertField(e, "keyLength").equal(cert.keyLength);
+ Events.assertField(e, "serialNumber").equal(cert.serialNumber);
+ return;
+ }
+ }
+ System.out.println(events);
+ throw new Exception("Could not find event with cert Id: " + cert.certId);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/jfr/event/security/TestX509ValidationEvent.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2018, 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 jdk.jfr.event.security;
+
+import java.util.List;
+
+import jdk.jfr.AnnotationElement;
+import jdk.jfr.EventType;
+import jdk.jfr.FlightRecorder;
+import jdk.jfr.Recording;
+import jdk.jfr.consumer.RecordedEvent;
+import jdk.test.lib.Asserts;
+import jdk.test.lib.jfr.Events;
+import jdk.test.lib.jfr.EventNames;
+import jdk.test.lib.security.TestCertificate;
+
+/*
+ * @test
+ * @bug 8148188
+ * @summary Enhance the security libraries to record events of interest
+ * @key jfr
+ * @library /test/lib
+ * @modules jdk.jfr/jdk.jfr.events
+ * @run main/othervm jdk.jfr.event.security.TestX509ValidationEvent
+ */
+public class TestX509ValidationEvent {
+ public static void main(String[] args) throws Exception {
+ try (Recording recording = new Recording()) {
+ recording.enable(EventNames.X509Validation);
+ recording.start();
+ // intermeditate certificate test
+ TestCertificate.generateChain(false);
+ recording.stop();
+ List<RecordedEvent> events = Events.fromRecording(recording);
+ Asserts.assertEquals(events.size(), 3, "Incorrect number of events");
+ assertEvent1(events);
+ }
+
+ try (Recording recording = new Recording()) {
+ recording.enable(EventNames.X509Validation);
+ recording.start();
+ // self signed certificate test
+ TestCertificate.generateChain(true);
+ recording.stop();
+ List<RecordedEvent> events = Events.fromRecording(recording);
+ Asserts.assertEquals(events.size(), 2, "Incorrect number of events");
+ assertEvent2(events);
+ }
+ }
+
+ private static void assertEvent1(List<RecordedEvent> events) throws Exception {
+ for (RecordedEvent e : events) {
+ int pos = e.getInt("certificatePosition");
+ switch (pos) {
+ case 1:
+ Events.assertField(e, "certificateId")
+ .equal(TestCertificate.ROOT_CA.certId);
+ break;
+ case 2:
+ Events.assertField(e, "certificateId")
+ .equal(TestCertificate.TWO.certId);
+ break;
+ case 3:
+ Events.assertField(e, "certificateId")
+ .equal(TestCertificate.ONE.certId);
+ break;
+ default:
+ System.out.println(events);
+ throw new Exception("Unexpected position:" + pos);
+ }
+ }
+ }
+
+ /*
+ * Self signed certificate test
+ */
+ private static void assertEvent2(List<RecordedEvent> events) throws Exception {
+ for (RecordedEvent e : events) {
+ int pos = e.getInt("certificatePosition");
+ switch (pos) {
+ case 1:
+ case 2:
+ Events.assertField(e, "certificateId")
+ .equal(TestCertificate.ROOT_CA.certId);
+ break;
+ default:
+ System.out.println(events);
+ throw new Exception("Unexpected position:" + pos);
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/security/logging/LogJvm.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2018, 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 jdk.security.logging;
+
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import jdk.test.lib.process.OutputAnalyzer;
+import jdk.test.lib.process.ProcessTools;
+
+public final class LogJvm {
+ private final static String LOGGING_ENABLED= "LOGGING_ENABLED";
+ private final static String LOGGING_DISABLED= "LOGGING_DISABLED";
+
+ private final static boolean debug = false;
+
+ private final List<String> expectedLogMessages = new ArrayList<>();
+ private final Class<?> clazz;
+ private final boolean loggingEnabled;
+
+ public LogJvm(Class<?> clazz, String[] args) {
+ this.clazz = clazz;
+ this.loggingEnabled = Arrays.asList(args).contains(LOGGING_ENABLED);
+ ensureLogging(args);
+ }
+
+ private void ensureLogging(String[] args) {
+ for(String s : args) {
+ if (s.equals(LOGGING_ENABLED) || s.equals(LOGGING_DISABLED)) {
+ return;
+ }
+ }
+ throw new RuntimeException(LogJvm.class.getName() +
+ " requires command line parameter " + LOGGING_ENABLED +
+ " or " + LOGGING_DISABLED);
+ }
+
+ public void addExpected(String logMsg) {
+ expectedLogMessages.add(logMsg);
+ }
+
+ public void testExpected() throws Exception {
+ OutputAnalyzer out = launchJVM();
+ if (debug) {
+ System.out.println("STDOUT DEBUG:\n " + out.getStdout());
+ System.out.println("\nSTDERR DEBUG:\n " + out.getStderr());
+ }
+ if (loggingEnabled) {
+ testLoggingEnabled(out);
+ } else {
+ testLoggingDisabled(out);
+ }
+ }
+
+ public OutputAnalyzer launchJVM() throws Exception {
+ List<String> args = new ArrayList<>();
+ if (loggingEnabled) {
+ args.add("-Djava.util.logging.config.file=" +
+ Paths.get(System.getProperty("test.src", "."), "logging.properties"));
+ }
+ args.add("--add-exports");
+ args.add("java.base/jdk.internal.event=ALL-UNNAMED");
+ args.add(clazz.getName());
+ System.out.println(args);
+ OutputAnalyzer out = ProcessTools.executeTestJava(args.toArray(new String[0]));
+ out.shouldHaveExitValue(0);
+ return out;
+ }
+
+ private void testLoggingDisabled(OutputAnalyzer out) {
+ for (String expected : expectedLogMessages) {
+ out.shouldNotContain(expected);
+ }
+ }
+
+ private void testLoggingEnabled(OutputAnalyzer out) {
+ for (String expected : expectedLogMessages) {
+ out.shouldContain(expected);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/security/logging/TestSecurityPropertyModificationLog.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2018, 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 jdk.security.logging;
+
+import java.security.Security;
+import java.util.List;
+
+import jdk.test.lib.security.JDKSecurityProperties;
+
+/*
+ * @test
+ * @bug 8148188
+ * @summary Enhance the security libraries to record events of interest
+ * @library /test/lib /test/jdk
+ * @run main/othervm jdk.security.logging.TestSecurityPropertyModificationLog LOGGING_ENABLED
+ * @run main/othervm jdk.security.logging.TestSecurityPropertyModificationLog LOGGING_DISABLED
+ */
+public class TestSecurityPropertyModificationLog {
+
+ static List<String> keys = JDKSecurityProperties.getKeys();
+ static String keyValue = "shouldBecomeAnEvent";
+
+ public static void main(String[] args) throws Exception {
+ LogJvm l = new LogJvm(SetSecurityProperty.class, args);
+ for (String s: keys) {
+ l.addExpected("FINE: SecurityPropertyModification: key:" +
+ s + ", value:" + keyValue);
+ }
+ l.testExpected();
+ }
+
+ public static class SetSecurityProperty {
+ public static void main(String[] args) {
+ for (String s: keys) {
+ Security.setProperty(s, keyValue);
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/security/logging/TestTLSHandshakeLog.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2018, 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 jdk.security.logging;
+
+import jdk.test.lib.security.TestTLSHandshake;
+
+/*
+ * @test
+ * @bug 8148188
+ * @summary Enhance the security libraries to record events of interest
+ * @library /test/lib /test/jdk
+ * @run main/othervm jdk.security.logging.TestTLSHandshakeLog LOGGING_ENABLED
+ * @run main/othervm jdk.security.logging.TestTLSHandshakeLog LOGGING_DISABLED
+ */
+public class TestTLSHandshakeLog {
+ public static void main(String[] args) throws Exception {
+ LogJvm l = new LogJvm(TLSHandshake.class, args);
+ l.addExpected("FINE: X509Certificate: Alg:SHA256withRSA, Serial:" + TestTLSHandshake.CERT_SERIAL);
+ l.addExpected("Subject:CN=Regression Test");
+ l.addExpected("Key type:EC, Length:256");
+ l.addExpected("FINE: ValidationChain: " +
+ TestTLSHandshake.ANCHOR_HASHCODE +
+ ", " + TestTLSHandshake.HASHCODE);
+ l.addExpected("SunJSSE Test Serivce");
+ l.addExpected("TLSHandshake:");
+ l.addExpected("TLSv1.2");
+ l.addExpected(TestTLSHandshake.CIPHER_SUITE +", " + TestTLSHandshake.HASHCODE);
+ l.testExpected();
+ }
+
+ public static class TLSHandshake {
+ public static void main(String[] args) throws Exception {
+ TestTLSHandshake handshake = new TestTLSHandshake();
+ handshake.run();
+ }
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/security/logging/TestX509CertificateLog.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2018, 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 jdk.security.logging;
+
+import java.security.cert.CertificateFactory;
+import jdk.test.lib.security.TestCertificate;
+
+/*
+ * @test
+ * @bug 8148188
+ * @summary Enhance the security libraries to record events of interest
+ * @library /test/lib /test/jdk
+ * @run main/othervm jdk.security.logging.TestX509CertificateLog LOGGING_ENABLED
+ * @run main/othervm jdk.security.logging.TestX509CertificateLog LOGGING_DISABLED
+ */
+public class TestX509CertificateLog {
+ public static void main(String[] args) throws Exception {
+ LogJvm l = new LogJvm(GenerateX509Certicate.class, args);
+ l.addExpected(
+ "FINE: X509Certificate: Alg:" + TestCertificate.ONE.algorithm +
+ ", Serial:" + TestCertificate.ONE.serialNumber +
+ ", Subject:" + TestCertificate.ONE.subject +
+ ", Issuer:" + TestCertificate.ONE.issuer +
+ ", Key type:" + TestCertificate.ONE.keyType +
+ ", Length:" + TestCertificate.ONE.keyLength +
+ ", Cert Id:" + TestCertificate.ONE.certId);
+ l.addExpected(
+ "FINE: X509Certificate: Alg:" + TestCertificate.TWO.algorithm +
+ ", Serial:" + TestCertificate.TWO.serialNumber +
+ ", Subject:" + TestCertificate.TWO.subject +
+ ", Issuer:" + TestCertificate.TWO.issuer +
+ ", Key type:" + TestCertificate.TWO.keyType +
+ ", Length:" + TestCertificate.TWO.keyLength +
+ ", Cert Id:" + TestCertificate.TWO.certId);
+ l.testExpected();
+ }
+
+ public static class GenerateX509Certicate {
+ public static void main(String[] args) throws Exception {
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+ TestCertificate.ONE.generate(cf);
+ TestCertificate.TWO.generate(cf);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/security/logging/TestX509ValidationLog.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2018, 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 jdk.security.logging;
+
+import jdk.test.lib.security.TestCertificate;
+
+/*
+ * @test
+ * @bug 8148188
+ * @summary Enhance the security libraries to record events of interest
+ * @library /test/lib /test/jdk
+ * @run main/othervm jdk.security.logging.TestX509ValidationLog LOGGING_ENABLED
+ * @run main/othervm jdk.security.logging.TestX509ValidationLog LOGGING_DISABLED
+ */
+public class TestX509ValidationLog {
+ public static void main(String[] args) throws Exception {
+ LogJvm l = new LogJvm(GenerateCertificateChain.class, args);
+ l.addExpected("FINE: ValidationChain: " +
+ TestCertificate.ROOT_CA.certId + ", " +
+ TestCertificate.TWO.certId + ", " +
+ TestCertificate.ONE.certId);
+ l.addExpected("FINE: ValidationChain: " +
+ TestCertificate.ROOT_CA.certId + ", " +
+ TestCertificate.ROOT_CA.certId);
+ l.testExpected();
+ }
+
+ public static class GenerateCertificateChain {
+ public static void main(String[] args) throws Exception {
+ TestCertificate.generateChain(false);
+ // self signed test
+ TestCertificate.generateChain(true);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/jdk/security/logging/logging.properties Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,13 @@
+############################################################
+# Configuration file for log testing
+#
+############################################################
+
+handlers= java.util.logging.ConsoleHandler
+
+.level= FINE
+
+java.util.logging.ConsoleHandler.level = FINE
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
+jdk.event.security.level = FINE
--- a/test/langtools/jdk/javadoc/doclet/testAbstractMethod/TestAbstractMethod.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testAbstractMethod/TestAbstractMethod.java Wed Nov 21 13:53:17 2018 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, 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
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8004891
+ * @bug 8004891 8184205
* @summary Make sure that the abstract method is identified correctly
* if the abstract modifier is present explicitly or implicitly.
* @author bpatel
@@ -49,51 +49,61 @@
checkOutput("pkg/A.html", true,
"<td class=\"colFirst\"><code>default void</code></td>",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>"
- + "All Methods</span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t2\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(2);\">Instance Methods</a></span>"
- + "<span class=\"tabEnd\"> </span></span><span id=\"t3\" "
- + "class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
- + "Abstract Methods</a></span><span class=\"tabEnd\"> </span>"
- + "</span><span id=\"t5\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(16);\">Default Methods</a></span>"
- + "<span class=\"tabEnd\"> </span></span></caption>");
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\" "
+ + "aria-selected=\"true\" aria-controls=\"memberSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Methods"
+ + "</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\" "
+ + "onkeydown=\"switchTab(event)\" id=\"t2\" class=\"tableTab\""
+ + " onclick=\"show(2);\">Instance Methods</button><button role=\"tab\""
+ + " aria-selected=\"false\" aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t3\" class=\"tableTab\" onclick=\"show(4);\">"
+ + "Abstract Methods</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t5\" class=\"tableTab\" onclick=\"show(16);\">"
+ + "Default Methods</button></div>");
checkOutput("pkg/B.html", true,
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>"
- + "All Methods</span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t2\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(2);\">Instance Methods</a></span>"
- + "<span class=\"tabEnd\"> </span></span><span id=\"t3\" "
- + "class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract "
- + "Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t4\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(8);\">Concrete Methods</a></span>"
- + "<span class=\"tabEnd\"> </span></span></caption>",
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"memberSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Methods"
+ + "</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">"
+ + "Instance Methods</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t3\" class=\"tableTab\" onclick=\"show(4);\">"
+ + "Abstract Methods</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t4\" class=\"tableTab\""
+ + " onclick=\"show(8);\">Concrete Methods</button></div>",
"<td class=\"colFirst\"><code>abstract void</code></td>");
checkOutput("pkg/C.html", true,
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>"
- + "All Methods</span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t2\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(2);\">Instance Methods</a></span>"
- + "<span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t5\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(16);\">Default Methods</a></span>"
- + "<span class=\"tabEnd\"> </span></span></caption>",
- "<td class=\"colFirst\"><code>default void</code></td>");
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"memberSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Methods"
+ + "</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">"
+ + "Instance Methods</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t5\" class=\"tableTab\" onclick=\"show(16);\">"
+ + "Default Methods</button></div>");
checkOutput("pkg/A.html", false,
"<td class=\"colFirst\"><code>abstract void</code></td>");
checkOutput("pkg/B.html", false,
- "<span><a href=\"javascript:show(16);\">Default Methods</a></span>"
- + "<span class=\"tabEnd\"> </span>",
+ "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"memberSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t5\" class=\"tableTab\""
+ + " onclick=\"show(16);\">Default Methods</button>",
"<td class=\"colFirst\"><code>default void</code></td>");
checkOutput("pkg/C.html", false,
- "<span><a href=\"javascript:show(4);\">Abstract Methods</a></span>"
+ "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"memberSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t3\" class=\"tableTab\""
+ + " onclick=\"show(4);\">Abstract Methods</button>"
+ "<span class=\"tabEnd\"> </span>");
}
}
--- a/test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/TestDeprecatedDocs.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/TestDeprecatedDocs.java Wed Nov 21 13:53:17 2018 -0500
@@ -24,7 +24,7 @@
/*
* @test
* @bug 4927552 8026567 8071982 8162674 8175200 8175218 8183511 8186332
- * 8169819 8074407 8191030 8182765
+ * 8169819 8074407 8191030 8182765 8184205
* @summary test generated docs for deprecated items
* @author jamieh
* @library ../lib
@@ -210,13 +210,15 @@
+ "<li><a href=\"#annotation.type.member\">Annotation Type Elements</a></li>\n"
+ "</ul>",
"<a id=\"forRemoval\">",
- "<table class=\"deprecatedSummary\">\n"
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table>\n"
+ "<caption><span>For Removal</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Element</th>\n"
+ "<th class=\"colLast\" scope=\"col\">Description</th>\n"
+ "</tr>",
- "<table class=\"deprecatedSummary\">\n"
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table>\n"
+ "<caption><span>Enums</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Enum</th>\n"
@@ -230,8 +232,10 @@
+ "</td>\n"
+ "</tr>\n"
+ "</tbody>\n"
- + "</table>",
- "<table class=\"deprecatedSummary\">\n"
+ + "</table>\n"
+ + "</div>",
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table>\n"
+ "<caption><span>Exceptions</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Exceptions</th>\n"
@@ -245,8 +249,10 @@
+ "</td>\n"
+ "</tr>\n"
+ "</tbody>\n"
- + "</table>",
- "<table class=\"deprecatedSummary\">\n"
+ + "</table>\n"
+ + "</div>",
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table>\n"
+ "<caption><span>Fields</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Field</th>\n"
@@ -288,7 +294,8 @@
+ "</td>\n"
+ "</tr>\n"
+ "</tbody>\n"
- + "</table>");
+ + "</table>\n"
+ + "</div>");
}
@Test
@@ -301,13 +308,15 @@
checkOutput("deprecated-list.html", true,
"<a name=\"forRemoval\">",
- "<table class=\"deprecatedSummary\" summary=\"For Removal table, listing for removal, and an explanation\">\n"
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"For Removal table, listing for removal, and an explanation\">\n"
+ "<caption><span>For Removal</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Element</th>\n"
+ "<th class=\"colLast\" scope=\"col\">Description</th>\n"
+ "</tr>",
- "<table class=\"deprecatedSummary\" summary=\"Enums table, listing enums, and an explanation\">\n"
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Enums table, listing enums, and an explanation\">\n"
+ "<caption><span>Enums</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Enum</th>\n"
@@ -321,8 +330,10 @@
+ "</td>\n"
+ "</tr>\n"
+ "</tbody>\n"
- + "</table>",
- "<table class=\"deprecatedSummary\" summary=\"Exceptions table, listing exceptions, and an explanation\">\n"
+ + "</table>\n"
+ + "</div>",
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Exceptions table, listing exceptions, and an explanation\">\n"
+ "<caption><span>Exceptions</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Exceptions</th>\n"
@@ -336,8 +347,10 @@
+ "</td>\n"
+ "</tr>\n"
+ "</tbody>\n"
- + "</table>",
- "<table class=\"deprecatedSummary\" summary=\"Fields table, listing fields, and an explanation\">\n"
+ + "</table>\n"
+ + "</div>",
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Fields table, listing fields, and an explanation\">\n"
+ "<caption><span>Fields</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Field</th>\n"
@@ -379,6 +392,7 @@
+ "</td>\n"
+ "</tr>\n"
+ "</tbody>\n"
- + "</table>");
+ + "</table>\n"
+ + "</div>");
}
}
--- a/test/langtools/jdk/javadoc/doclet/testFramesNoFrames/TestFramesNoFrames.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testFramesNoFrames/TestFramesNoFrames.java Wed Nov 21 13:53:17 2018 -0500
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8162353 8164747 8173707 8196202 8204303
+ * @bug 8162353 8164747 8173707 8196202 8204303 8184205
* @summary javadoc should provide a way to disable use of frames
* @library /tools/lib ../lib
* @modules
@@ -347,7 +347,7 @@
// the index.html file contains a summary table
// if an overview was generated and not in frames mode
checkOutput("index.html", !frames && overview,
- "<table class=\"overviewSummary\"");
+ "<div class=\"overviewSummary\">\n<table");
// the index.html file contains a redirect if
// no frames and no overview
--- a/test/langtools/jdk/javadoc/doclet/testGroupName/TestGroupName.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testGroupName/TestGroupName.java Wed Nov 21 13:53:17 2018 -0500
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8190003 8196201 8196202
+ * @bug 8190003 8196201 8196202 8184205
* @summary Special characters in group names should be escaped
* @library /tools/lib ../lib
* @modules jdk.javadoc/jdk.javadoc.internal.tool
@@ -65,7 +65,9 @@
checkExit(Exit.OK);
checkOutput("overview-summary.html", true,
- "<span><a href=\"javascript:show(1);\">abc < & > def</a></span>",
+ "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t1\" class=\"tableTab\""
+ + " onclick=\"show(1);\">abc < & > def</button>",
",\"abc < & > def\"],");
}
@@ -99,7 +101,9 @@
checkExit(Exit.OK);
checkOutput("overview-summary.html", true,
- "<span><a href=\"javascript:show(1);\">abc < & > def</a></span>",
+ "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t2\" class=\"tableTab\""
+ + " onclick=\"show(2);\">Other Modules</button>",
",\"abc < & > def\"],");
}
}
--- a/test/langtools/jdk/javadoc/doclet/testHtmlTableStyles/TestHtmlTableStyles.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testHtmlTableStyles/TestHtmlTableStyles.java Wed Nov 21 13:53:17 2018 -0500
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8008164 8169819 8183037 8182765 8196202
+ * @bug 8008164 8169819 8183037 8182765 8196202 8184205
* @summary Test styles on HTML tables generated by javadoc.
* @author Bhavesh Patel
* @library ../lib
@@ -56,24 +56,24 @@
checkOutput("pkg1/TestTable.html", true,
"<table summary=\"Summary\" border cellpadding=3 cellspacing=1>",
- "<table class=\"memberSummary\">",
- "<table class=\"memberSummary\">",
- "<table class=\"memberSummary\">");
+ "<div class=\"memberSummary\">\n<table>",
+ "<div class=\"memberSummary\">\n<table>",
+ "<div class=\"memberSummary\">\n<table>");
checkOutput("pkg1/package-summary.html", true,
- "<table class=\"typeSummary\">");
+ "<div class=\"typeSummary\">\n<table>");
checkOutput("pkg1/class-use/TestTable.html", true,
- "<table class=\"useSummary\">");
+ "<div class=\"useSummary\">\n<table>");
checkOutput("overview-summary.html", true,
- "<table class=\"overviewSummary\">");
+ "<div class=\"overviewSummary\">\n<table>");
checkOutput("deprecated-list.html", true,
- "<table class=\"deprecatedSummary\">");
+ "<div class=\"deprecatedSummary\">\n<table>");
checkOutput("constant-values.html", true,
- "<table class=\"constantsSummary\">");
+ "<div class=\"constantsSummary\">\n<table>");
}
@Test
@@ -88,30 +88,35 @@
checkOutput("pkg1/TestTable.html", true,
"<table summary=\"Summary\" border cellpadding=3 cellspacing=1>",
- "<table class=\"memberSummary\" summary=\"Field Summary table, listing fields, "
+ "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Field Summary table, listing fields, "
+ "and an explanation\">",
- "<table class=\"memberSummary\" summary=\"Constructor Summary table, listing "
+ "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Constructor Summary table, listing "
+ "constructors, and an explanation\">",
- "<table class=\"memberSummary\" summary=\"Method Summary table, listing methods, "
- + "and an explanation\">");
+ "<div class=\"memberSummary\">\n",
+ "<table summary=\"Method Summary table, listing methods, "
+ + "and an explanation\" aria-labelledby=\"t0\">");
checkOutput("pkg1/package-summary.html", true,
- "<table class=\"typeSummary\" summary=\"Class Summary table, listing classes, "
+ "<div class=\"typeSummary\">\n"
+ + "<table summary=\"Class Summary table, listing classes, "
+ "and an explanation\">");
checkOutput("pkg1/class-use/TestTable.html", true,
- "<table class=\"useSummary\" summary=\"Use table, listing fields, and an explanation\">");
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing fields, and an explanation\">");
checkOutput("overview-summary.html", true,
- "<table class=\"overviewSummary\" "
- + "summary=\"Package Summary table, listing packages, and an explanation\">");
+ "<div class=\"overviewSummary\">\n"
+ + "<table summary=\"Package Summary table, listing packages, and an explanation\">");
checkOutput("deprecated-list.html", true,
- "<table class=\"deprecatedSummary\" summary=\"Methods table, listing " +
- "methods, and an explanation\">");
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Methods table, listing methods, and an explanation\">");
checkOutput("constant-values.html", true,
- "<table class=\"constantsSummary\" summary=\"Constant Field Values table, listing " +
- "constant fields, and values\">");
+ "<div class=\"constantsSummary\">\n"
+ + "<table summary=\"Constant Field Values table, listing constant fields, and values\">");
}
}
--- a/test/langtools/jdk/javadoc/doclet/testHtmlTableTags/TestHtmlTableTags.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testHtmlTableTags/TestHtmlTableTags.java Wed Nov 21 13:53:17 2018 -0500
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 6786688 8008164 8162363 8169819 8183037 8182765
+ * @bug 6786688 8008164 8162363 8169819 8183037 8182765 8184205
* @summary HTML tables should have table summary, caption and table headers.
* @author Bhavesh Patel
* @library ../lib
@@ -78,70 +78,70 @@
void checkHtmlTableTag() {
//Package summary
checkOutput("pkg1/package-summary.html", true,
- "<table class=\"typeSummary\">",
- "<table class=\"typeSummary\">");
+ "<div class=\"typeSummary\">\n<table>",
+ "<div class=\"typeSummary\">\n<table>");
checkOutput("pkg2/package-summary.html", true,
- "<table class=\"typeSummary\">",
- "<table class=\"typeSummary\">");
+ "<div class=\"typeSummary\">\n<table>",
+ "<div class=\"typeSummary\">\n<table>");
// Class documentation
checkOutput("pkg1/C1.html", true,
- "<table class=\"memberSummary\">",
- "<table class=\"memberSummary\">");
+ "<div class=\"memberSummary\">\n<table>",
+ "<div class=\"memberSummary\">\n<table>");
checkOutput("pkg2/C2.html", true,
- "<table class=\"memberSummary\">",
- "<table class=\"memberSummary\">");
+ "<div class=\"memberSummary\">\n<table>",
+ "<div class=\"memberSummary\">\n<table>");
checkOutput("pkg2/C2.ModalExclusionType.html", true,
- "<table class=\"memberSummary\">");
+ "<div class=\"memberSummary\">\n<table>");
checkOutput("pkg2/C3.html", true,
- "<table class=\"memberSummary\">");
+ "<div class=\"memberSummary\">\n<table>");
checkOutput("pkg2/C4.html", true,
- "<table class=\"memberSummary\">");
+ "<div class=\"memberSummary\">\n<table>");
// Class use documentation
checkOutput("pkg1/class-use/I1.html", true,
- "<table class=\"useSummary\">");
+ "<div class=\"useSummary\">\n<table>");
checkOutput("pkg1/class-use/C1.html", true,
- "<table class=\"useSummary\">",
- "<table class=\"useSummary\">");
+ "<div class=\"useSummary\">\n<table>",
+ "<div class=\"useSummary\">\n<table>");
checkOutput("pkg2/class-use/C2.html", true,
- "<table class=\"useSummary\">",
- "<table class=\"useSummary\">");
+ "<div class=\"useSummary\">\n<table>",
+ "<div class=\"useSummary\">\n<table>");
checkOutput("pkg2/class-use/C2.ModalExclusionType.html", true,
- "<table class=\"useSummary\">");
+ "<div class=\"useSummary\">\n<table>");
checkOutput("pkg2/class-use/C2.ModalExclusionType.html", true,
- "<table class=\"useSummary\">");
+ "<div class=\"useSummary\">\n<table>");
// Package use documentation
checkOutput("pkg1/package-use.html", true,
- "<table class=\"useSummary\">",
- "<table class=\"useSummary\">");
+ "<div class=\"useSummary\">\n<table>",
+ "<div class=\"useSummary\">\n<table>");
checkOutput("pkg2/package-use.html", true,
- "<table class=\"useSummary\">",
- "<table class=\"useSummary\">");
+ "<div class=\"useSummary\">\n<table>",
+ "<div class=\"useSummary\">\n<table>");
// Deprecated
checkOutput("deprecated-list.html", true,
- "<table class=\"deprecatedSummary\">",
- "<table class=\"deprecatedSummary\">");
+ "<div class=\"deprecatedSummary\">\n<table>",
+ "<div class=\"deprecatedSummary\">\n<table>");
// Constant values
checkOutput("constant-values.html", true,
- "<table class=\"constantsSummary\">");
+ "<div class=\"constantsSummary\">\n<table>");
// Overview Summary
checkOutput("overview-summary.html", true,
- "<table class=\"overviewSummary\">");
+ "<div class=\"overviewSummary\">\n<table>");
}
/*
@@ -150,85 +150,110 @@
void checkHtmlTableSummaries() {
//Package summary
checkOutput("pkg1/package-summary.html", true,
- "<table class=\"typeSummary\" summary=\"Class Summary table, "
+ "<div class=\"typeSummary\">\n"
+ + "<table summary=\"Class Summary table, "
+ "listing classes, and an explanation\">",
- "<table class=\"typeSummary\" summary=\"Interface Summary table, "
+ "<div class=\"typeSummary\">\n"
+ + "<table summary=\"Interface Summary table, "
+ "listing interfaces, and an explanation\">");
checkOutput("pkg2/package-summary.html", true,
- "<table class=\"typeSummary\" summary=\"Enum Summary table, "
+ "<div class=\"typeSummary\">\n"
+ + "<table summary=\"Enum Summary table, "
+ "listing enums, and an explanation\">",
- "<table class=\"typeSummary\" summary=\"Annotation Types Summary table, "
+ "<div class=\"typeSummary\">\n"
+ + "<table summary=\"Annotation Types Summary table, "
+ "listing annotation types, and an explanation\">");
// Class documentation
checkOutput("pkg1/C1.html", true,
- "<table class=\"memberSummary\" summary=\"Field Summary table, listing fields, "
+ "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Field Summary table, listing fields, "
+ "and an explanation\">",
- "<table class=\"memberSummary\" summary=\"Method Summary table, listing methods, "
- + "and an explanation\">");
+ "<div class=\"memberSummary\">\n",
+ "<table summary=\"Method Summary table, listing methods, "
+ + "and an explanation\" aria-labelledby=\"t0\">");
checkOutput("pkg2/C2.html", true,
- "<table class=\"memberSummary\" summary=\"Nested Class Summary table, listing "
+ "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Nested Class Summary table, listing "
+ "nested classes, and an explanation\">",
- "<table class=\"memberSummary\" summary=\"Constructor Summary table, listing "
+ "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Constructor Summary table, listing "
+ "constructors, and an explanation\">");
checkOutput("pkg2/C2.ModalExclusionType.html", true,
- "<table class=\"memberSummary\" summary=\"Enum Constant Summary table, listing "
+ "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Enum Constant Summary table, listing "
+ "enum constants, and an explanation\">");
checkOutput("pkg2/C3.html", true,
- "<table class=\"memberSummary\" summary=\"Required Element Summary table, "
+ "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Required Element Summary table, "
+ "listing required elements, and an explanation\">");
checkOutput("pkg2/C4.html", true,
- "<table class=\"memberSummary\" summary=\"Optional Element Summary table, "
+ "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Optional Element Summary table, "
+ "listing optional elements, and an explanation\">");
// Class use documentation
checkOutput("pkg1/class-use/I1.html", true,
- "<table class=\"useSummary\" summary=\"Use table, listing packages, and an explanation\">");
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing packages, and an explanation\">");
checkOutput("pkg1/class-use/C1.html", true,
- "<table class=\"useSummary\" summary=\"Use table, listing fields, and an explanation\">",
- "<table class=\"useSummary\" summary=\"Use table, listing methods, and an explanation\">");
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing fields, and an explanation\">",
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing methods, and an explanation\">");
checkOutput("pkg2/class-use/C2.html", true,
- "<table class=\"useSummary\" summary=\"Use table, listing fields, and an explanation\">",
- "<table class=\"useSummary\" summary=\"Use table, listing methods, and an explanation\">");
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing fields, and an explanation\">",
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing methods, and an explanation\">");
checkOutput("pkg2/class-use/C2.ModalExclusionType.html", true,
- "<table class=\"useSummary\" summary=\"Use table, listing packages, and an explanation\">");
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing packages, and an explanation\">");
checkOutput("pkg2/class-use/C2.ModalExclusionType.html", true,
- "<table class=\"useSummary\" summary=\"Use table, listing methods, and an explanation\">");
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing methods, and an explanation\">");
// Package use documentation
checkOutput("pkg1/package-use.html", true,
- "<table class=\"useSummary\" summary=\"Use table, listing packages, and an explanation\">",
- "<table class=\"useSummary\" summary=\"Use table, listing classes, and an explanation\">");
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing packages, and an explanation\">",
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing classes, and an explanation\">");
checkOutput("pkg2/package-use.html", true,
- "<table class=\"useSummary\" summary=\"Use table, listing packages, and an explanation\">",
- "<table class=\"useSummary\" summary=\"Use table, listing classes, and an explanation\">");
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing packages, and an explanation\">",
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing classes, and an explanation\">");
// Deprecated
checkOutput("deprecated-list.html", true,
- "<table class=\"deprecatedSummary\" summary=\"Fields table, listing fields, "
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Fields table, listing fields, "
+ "and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Methods table, listing methods, "
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Methods table, listing methods, "
+ "and an explanation\">");
// Constant values
checkOutput("constant-values.html", true,
- "<table class=\"constantsSummary\" summary=\"Constant Field Values table, listing "
+ "<div class=\"constantsSummary\">\n"
+ + "<table summary=\"Constant Field Values table, listing "
+ "constant fields, and values\">");
// Overview Summary
checkOutput("overview-summary.html", true,
- "<table class=\"overviewSummary\" "
- + "summary=\"Package Summary table, listing packages, and an explanation\">");
+ "<div class=\"overviewSummary\">\n"
+ + "<table summary=\"Package Summary table, listing packages, and an explanation\">");
}
/*
@@ -251,15 +276,18 @@
// Class documentation
checkOutput("pkg1/C1.html", true,
"<caption><span>Fields</span><span class=\"tabEnd\"> </span></caption>",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All "
- + "Methods</span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
- + "Instance Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">"
- + "Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">"
- + "Deprecated Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "</caption>");
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"memberSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Methods"
+ + "</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">"
+ + "Instance Methods</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t4\" class=\"tableTab\" onclick=\"show(8);\">"
+ + "Concrete Methods</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t6\" class=\"tableTab\" onclick=\"show(32);\">Deprecated Methods</button></div>\n");
checkOutput("pkg2/C2.html", true,
"<caption><span>Nested Classes</span><span class=\"tabEnd\"> </span></caption>",
--- a/test/langtools/jdk/javadoc/doclet/testHtmlVersion/TestHtmlVersion.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testHtmlVersion/TestHtmlVersion.java Wed Nov 21 13:53:17 2018 -0500
@@ -24,7 +24,7 @@
/*
* @test
* @bug 8072945 8081854 8141492 8148985 8150188 4649116 8173707 8151743 8169819 8183037 8182765 8196202
- * 8202624 8210047
+ * 8202624 8210047 8184205
* @summary Test the version of HTML generated by the javadoc tool.
* @author bpatel
* @library ../lib
@@ -127,7 +127,8 @@
"<a id=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"overviewSummary\">\n"
+ "<div class=\"overviewSummary\">\n"
+ + "<table>\n"
+ "<caption>",
"<header role=\"banner\">\n"
+ "<nav role=\"navigation\">\n"
@@ -163,7 +164,7 @@
"<a id=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"typeSummary\">",
+ "<div class=\"typeSummary\">\n<table>",
"<header role=\"banner\">\n"
+ "<nav role=\"navigation\">\n"
+ "<div class=\"fixedNav\">\n"
@@ -182,7 +183,7 @@
"<div class=\"contentContainer\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\">\n"
- + "<table class=\"typeSummary\">\n"
+ + "<div class=\"typeSummary\">\n<table>\n"
+ "<caption><span>Class Summary</span><span class=\"tabEnd\"> </span></caption>");
// Test for package-tree page
@@ -218,7 +219,7 @@
"<a id=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"useSummary\">",
+ "<div class=\"useSummary\">\n<table>",
"<header role=\"banner\">\n"
+ "<nav role=\"navigation\">\n"
+ "<div class=\"fixedNav\">\n"
@@ -236,7 +237,7 @@
"<a id=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"constantsSummary\">",
+ "<div class=\"constantsSummary\">\n<table>",
"<header role=\"banner\">\n"
+ "<nav role=\"navigation\">\n"
+ "<div class=\"fixedNav\">\n"
@@ -258,7 +259,7 @@
"<a id=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"deprecatedSummary\">",
+ "<div class=\"deprecatedSummary\">\n<table>",
"<header role=\"banner\">\n"
+ "<nav role=\"navigation\">\n"
+ "<div class=\"fixedNav\">\n"
@@ -379,21 +380,21 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Nested Class Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">\n<table>",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"field.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Field Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">\n<table>",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"constructor.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Constructor Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">\n<table>",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"method.summary\">\n"
@@ -441,14 +442,16 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Enum Constant Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">\n",
+ "<table aria-labelledby=\"t0\">\n",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"method.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Method Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">\n",
+ "<table aria-labelledby=\"t0\">",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"enum.constant.detail\">\n"
@@ -484,7 +487,8 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Method Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">\n",
+ "<table aria-labelledby=\"t0\">\n",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"method.detail\">\n"
@@ -572,14 +576,14 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Required Element Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">\n<table>",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"annotation.type.optional.element.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Optional Element Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">\n<table>",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"annotation.type.element.detail\">\n"
@@ -603,12 +607,12 @@
+ "<!-- ========= START OF TOP NAVBAR ======= -->",
"<main role=\"main\">\n"
+ "<div class=\"header\">",
- "<table class=\"useSummary\">",
+ "<div class=\"useSummary\">\n<table>",
"<section role=\"region\"><a id=\"pkg\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Uses of <a href=\"../RegClass.html\" title=\"class in pkg1\">RegClass</a> in <a href=\"../../pkg/package-summary.html\">pkg</a></h3>\n"
- + "<table class=\"useSummary\">",
+ + "<div class=\"useSummary\">\n<table>",
"<footer role=\"contentinfo\">\n"
+ "<nav role=\"navigation\">\n"
+ "<!-- ======= START OF BOTTOM NAVBAR ====== -->");
@@ -657,7 +661,7 @@
"<a name=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"overviewSummary\" summary=\"Package Summary table, listing packages, and an explanation\">\n"
+ "<table summary=\"Package Summary table, listing packages, and an explanation\">\n"
+ "<caption>",
"</noscript>\n"
+ "<div class=\"fixedNav\">\n"
@@ -679,12 +683,12 @@
+ "</a>",
"<section role=\"region\">\n"
+ "<h2 title=\"Package pkg Description\">Package pkg Description</h2>\n",
- "<table class=\"typeSummary\" summary=\"Interface Summary table, listing interfaces, and an explanation\">",
- "<table class=\"typeSummary\" summary=\"Class Summary table, listing classes, and an explanation\">",
- "<table class=\"typeSummary\" summary=\"Enum Summary table, listing enums, and an explanation\">",
- "<table class=\"typeSummary\" summary=\"Exception Summary table, listing exceptions, and an explanation\">",
- "<table class=\"typeSummary\" summary=\"Error Summary table, listing errors, and an explanation\">",
- "<table class=\"typeSummary\" summary=\"Annotation Types Summary table, listing annotation types, and an explanation\">");
+ "<div class=\"typeSummary\">\n<table summary=\"Interface Summary table, listing interfaces, and an explanation\">",
+ "<div class=\"typeSummary\">\n<table summary=\"Class Summary table, listing classes, and an explanation\">",
+ "<div class=\"typeSummary\">\n<table summary=\"Enum Summary table, listing enums, and an explanation\">",
+ "<div class=\"typeSummary\">\n<table summary=\"Exception Summary table, listing exceptions, and an explanation\">",
+ "<div class=\"typeSummary\">\n<table summary=\"Error Summary table, listing errors, and an explanation\">",
+ "<div class=\"typeSummary\">\n<table summary=\"Annotation Types Summary table, listing annotation types, and an explanation\">");
// Negated test for package-tree page
checkOutput("pkg/package-tree.html", false,
@@ -701,7 +705,8 @@
"<a name=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"useSummary\" summary=\"Use table, listing packages, and an explanation\">");
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing packages, and an explanation\">");
// Negated test for constant-values page
checkOutput("constant-values.html", false,
@@ -718,7 +723,8 @@
+ "//-->\n"
+ "</script>\n"
+ "<div class=\"header\">",
- "<table class=\"constantsSummary\" summary=\"Constant Field Values table, listing constant fields, and values\">");
+ "<div class=\"constantsSummary\">\n"
+ + "<table summary=\"Constant Field Values table, listing constant fields, and values\">");
// Negated test for deprecated-list page
checkOutput("deprecated-list.html", false,
@@ -737,16 +743,16 @@
+ "<div class=\"header\">\n"
+ "<h1 title=\"Deprecated API\" class=\"title\">Deprecated API</h1>\n"
+ "<h2 title=\"Contents\">Contents</h2>",
- "<table class=\"deprecatedSummary\" summary=\"Classes table, listing classes, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Enums table, listing enums, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Exceptions table, listing exceptions, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Errors table, listing errors, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Annotation Types table, listing annotation types, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Fields table, listing fields, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Methods table, listing methods, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Constructors table, listing constructors, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Enum Constants table, listing enum constants, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Annotation Type Elements table, listing annotation type elements, and an explanation\">");
+ "<div class=\"deprecatedSummary\">\n<table summary=\"Classes table, listing classes, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n<table summary=\"Enums table, listing enums, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n<table summary=\"Exceptions table, listing exceptions, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n<table summary=\"Errors table, listing errors, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n<table summary=\"Annotation Types table, listing annotation types, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n<table summary=\"Fields table, listing fields, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n<table summary=\"Methods table, listing methods, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n<table summary=\"Constructors table, listing constructors, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n<table summary=\"Enum Constants table, listing enum constants, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n<table summary=\"Annotation Type Elements table, listing annotation type elements, and an explanation\">");
// Negated test for serialized-form page
checkOutput("serialized-form.html", false,
@@ -848,28 +854,32 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Nested Class Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Nested Class Summary table, listing nested classes, and an explanation\">",
+ + "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Nested Class Summary table, listing nested classes, and an explanation\">",
"<!-- =========== FIELD SUMMARY =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"field.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Field Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Field Summary table, listing fields, and an explanation\">",
+ + "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Field Summary table, listing fields, and an explanation\">",
"<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"constructor.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Constructor Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Constructor Summary table, listing constructors, and an explanation\">",
+ + "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Constructor Summary table, listing constructors, and an explanation\">",
"<!-- ========== METHOD SUMMARY =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"method.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Method Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Method Summary table, listing methods, and an explanation\">",
+ + "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Method Summary table, listing methods, and an explanation\">",
"<!-- ============ FIELD DETAIL =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"field.detail\">\n"
@@ -904,14 +914,16 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Enum Constant Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Enum Constant Summary table, listing enum constants, and an explanation\">",
+ + "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Enum Constant Summary table, listing enum constants, and an explanation\">",
"<!-- ========== METHOD SUMMARY =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"method.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Method Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Method Summary table, listing methods, and an explanation\">",
+ + "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Method Summary table, listing methods, and an explanation\">",
"<!-- ============ ENUM CONSTANT DETAIL =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"enum.constant.detail\">\n"
@@ -940,7 +952,8 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Method Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Method Summary table, listing methods, and an explanation\">",
+ + "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Method Summary table, listing methods, and an explanation\">",
"<!-- ============ METHOD DETAIL ========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"method.detail\">\n"
@@ -1007,14 +1020,16 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Required Element Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Required Element Summary table, listing required elements, and an explanation\">",
+ + "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Required Element Summary table, listing required elements, and an explanation\">",
"<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"annotation.type.optional.element.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Optional Element Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Optional Element Summary table, listing optional elements, and an explanation\">",
+ + "<div class=\"memberSummary\">\n"
+ + "<table summary=\"Optional Element Summary table, listing optional elements, and an explanation\">",
"<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"annotation.type.element.detail\">\n"
@@ -1037,12 +1052,13 @@
+ "//-->\n"
+ "</script>\n"
+ "<div class=\"header\">",
- "<table class=\"useSummary\" summary=\"Use table, listing packages, and an explanation\">",
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing packages, and an explanation\">",
"<li class=\"blockList\"><a name=\"pkg\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Uses of <a href=\"../RegClass.html\" title=\"class in pkg1\">RegClass</a> in <a href=\"../../pkg/package-summary.html\">pkg</a></h3>\n"
- + "<table class=\"useSummary\" summary=\"Use table, listing fields, and an explanation\">");
+ + "<div class=\"useSummary\">\n<table summary=\"Use table, listing fields, and an explanation\">");
// Negated test for main index page
checkOutput("index.html", false,
@@ -1082,7 +1098,8 @@
"<a name=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"overviewSummary\" summary=\"Package Summary table, listing packages, and an explanation\">\n"
+ "<div class=\"overviewSummary\">\n"
+ + "<table summary=\"Package Summary table, listing packages, and an explanation\">\n"
+ "<caption>",
"</noscript>\n"
+ "<div class=\"fixedNav\">\n"
@@ -1106,18 +1123,19 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<div class=\"block\">Test package.</div>",
- "<table class=\"typeSummary\" summary=\"Interface Summary table, listing interfaces, and an explanation\">",
- "<table class=\"typeSummary\" summary=\"Class Summary table, listing classes, and an explanation\">",
- "<table class=\"typeSummary\" summary=\"Enum Summary table, listing enums, and an explanation\">",
- "<table class=\"typeSummary\" summary=\"Exception Summary table, listing exceptions, and an explanation\">",
- "<table class=\"typeSummary\" summary=\"Error Summary table, listing errors, and an explanation\">",
- "<table class=\"typeSummary\" summary=\"Annotation Types Summary table, listing annotation types, and an explanation\">");
+ "<div class=\"typeSummary\">\n<table summary=\"Interface Summary table, listing interfaces, and an explanation\">",
+ "<div class=\"typeSummary\">\n<table summary=\"Class Summary table, listing classes, and an explanation\">",
+ "<div class=\"typeSummary\">\n<table summary=\"Enum Summary table, listing enums, and an explanation\">",
+ "<div class=\"typeSummary\">\n<table summary=\"Exception Summary table, listing exceptions, and an explanation\">",
+ "<div class=\"typeSummary\">\n<table summary=\"Error Summary table, listing errors, and an explanation\">",
+ "<div class=\"typeSummary\">\n<table summary=\"Annotation Types Summary table, listing annotation types, and an explanation\">");
// No Package description
checkOutput("pkg1/package-summary.html", true,
"<div class=\"contentContainer\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\">\n"
- + "<table class=\"typeSummary\" summary=\"Class Summary table, listing classes, and an explanation\">\n"
+ + "<div class=\"typeSummary\">\n"
+ + "<table summary=\"Class Summary table, listing classes, and an explanation\">\n"
+ "<caption><span>Class Summary</span><span class=\"tabEnd\"> </span></caption>");
// Test for package-tree page
@@ -1136,7 +1154,8 @@
"<a name=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"useSummary\" summary=\"Use table, listing packages, and an explanation\">");
+ "<div class=\"useSummary\">\n"
+ + "<table summary=\"Use table, listing packages, and an explanation\">");
// Test for constant-values page
checkOutput("constant-values.html", true,
@@ -1153,7 +1172,8 @@
+ "//-->\n"
+ "</script>\n"
+ "<div class=\"header\">",
- "<table class=\"constantsSummary\" summary=\"Constant Field Values table, listing constant fields, and values\">");
+ "<div class=\"constantsSummary\">\n"
+ + "<table summary=\"Constant Field Values table, listing constant fields, and values\">");
// Test for deprecated-list page
checkOutput("deprecated-list.html", true,
@@ -1172,16 +1192,26 @@
+ "<div class=\"header\">\n"
+ "<h1 title=\"Deprecated API\" class=\"title\">Deprecated API</h1>\n"
+ "<h2 title=\"Contents\">Contents</h2>",
- "<table class=\"deprecatedSummary\" summary=\"Classes table, listing classes, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Enums table, listing enums, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Exceptions table, listing exceptions, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Errors table, listing errors, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Annotation Types table, listing annotation types, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Fields table, listing fields, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Methods table, listing methods, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Constructors table, listing constructors, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Enum Constants table, listing enum constants, and an explanation\">",
- "<table class=\"deprecatedSummary\" summary=\"Annotation Type Elements table, listing annotation type elements, and an explanation\">");
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Classes table, listing classes, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Enums table, listing enums, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Exceptions table, listing exceptions, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Errors table, listing errors, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Annotation Types table, listing annotation types, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Fields table, listing fields, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Methods table, listing methods, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Constructors table, listing constructors, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Enum Constants table, listing enum constants, and an explanation\">",
+ "<div class=\"deprecatedSummary\">\n"
+ + "<table summary=\"Annotation Type Elements table, listing annotation type elements, and an explanation\">");
// Test for serialized-form page
checkOutput("serialized-form.html", true,
@@ -1286,28 +1316,30 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Nested Class Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Nested Class Summary table, listing nested classes, and an explanation\">",
+ + "<div class=\"memberSummary\">",
+ "<table summary=\"Nested Class Summary table, listing nested classes, and an explanation\">",
"<!-- =========== FIELD SUMMARY =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"field.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Field Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Field Summary table, listing fields, and an explanation\">",
+ + "<div class=\"memberSummary\">\n<table summary=\"Field Summary table, listing fields, and an explanation\">",
"<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"constructor.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Constructor Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Constructor Summary table, listing constructors, and an explanation\">",
+ + "<div class=\"memberSummary\">\n<table summary=\"Constructor Summary table, listing constructors, and an explanation\">",
"<!-- ========== METHOD SUMMARY =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"method.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Method Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Method Summary table, listing methods, and an explanation\">",
+ + "<div class=\"memberSummary\">\n",
+ "<table summary=\"Method Summary table, listing methods, and an explanation\" aria-labelledby=\"t0\">",
"<!-- ============ FIELD DETAIL =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"field.detail\">\n"
@@ -1342,14 +1374,16 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Enum Constant Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Enum Constant Summary table, listing enum constants, and an explanation\">",
+ + "<div class=\"memberSummary\">",
+ "<table summary=\"Enum Constant Summary table, listing enum constants, and an explanation\"",
"<!-- ========== METHOD SUMMARY =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"method.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Method Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Method Summary table, listing methods, and an explanation\">",
+ + "<div class=\"memberSummary\">\n",
+ "<table summary=\"Method Summary table, listing methods, and an explanation\" aria-labelledby=\"t0\">",
"<!-- ============ ENUM CONSTANT DETAIL =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"enum.constant.detail\">\n"
@@ -1378,7 +1412,9 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Method Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Method Summary table, listing methods, and an explanation\">",
+ + "<div class=\"memberSummary\">\n",
+ "<table summary=\"Method Summary table, listing methods, and an explanation\""
+ + " aria-labelledby=\"t0\">",
"<!-- ============ METHOD DETAIL ========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"method.detail\">\n"
@@ -1445,14 +1481,14 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Required Element Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Required Element Summary table, listing required elements, and an explanation\">",
+ + "<div class=\"memberSummary\">\n<table summary=\"Required Element Summary table, listing required elements, and an explanation\">",
"<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"annotation.type.optional.element.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Optional Element Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Optional Element Summary table, listing optional elements, and an explanation\">",
+ + "<div class=\"memberSummary\">\n<table summary=\"Optional Element Summary table, listing optional elements, and an explanation\">",
"<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a name=\"annotation.type.element.detail\">\n"
@@ -1475,12 +1511,12 @@
+ "//-->\n"
+ "</script>\n"
+ "<div class=\"header\">",
- "<table class=\"useSummary\" summary=\"Use table, listing packages, and an explanation\">",
+ "<div class=\"useSummary\">\n<table summary=\"Use table, listing packages, and an explanation\">",
"<li class=\"blockList\"><a name=\"pkg\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Uses of <a href=\"../RegClass.html\" title=\"class in pkg1\">RegClass</a> in <a href=\"../../pkg/package-summary.html\">pkg</a></h3>\n"
- + "<table class=\"useSummary\" summary=\"Use table, listing fields, and an explanation\">");
+ + "<div class=\"useSummary\">\n<table summary=\"Use table, listing fields, and an explanation\">");
// Test for main index page
checkOutput("index.html", true,
@@ -1525,7 +1561,7 @@
"<a id=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"overviewSummary\">\n"
+ "<div class=\"overviewSummary\">\n"
+ "<caption>",
"<header role=\"banner\">\n"
+ "<nav role=\"navigation\">\n"
@@ -1557,7 +1593,7 @@
"<a id=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"typeSummary\">",
+ "<div class=\"typeSummary\">\n<table\">",
"<header role=\"banner\">\n"
+ "<nav role=\"navigation\">\n"
+ "<!-- ========= START OF TOP NAVBAR ======= -->",
@@ -1599,7 +1635,7 @@
"<a id=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"useSummary\">",
+ "<div class=\"useSummary\">\n<table>",
"<header role=\"banner\">\n"
+ "<nav role=\"navigation\">\n"
+ "<!-- ========= START OF TOP NAVBAR ======= -->",
@@ -1616,7 +1652,7 @@
"<a id=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"constantsSummary\">",
+ "<div class=\"constantsSummary\">\n<table>",
"<header role=\"banner\">\n"
+ "<nav role=\"navigation\">\n"
+ "<!-- ========= START OF TOP NAVBAR ======= -->",
@@ -1637,7 +1673,7 @@
"<a id=\"navbar.top.firstrow\">\n"
+ "<!-- -->\n"
+ "</a>",
- "<table class=\"deprecatedSummary\">",
+ "<div class=\"deprecatedSummary\">\n<table>",
"<header role=\"banner\">\n"
+ "<nav role=\"navigation\">\n"
+ "<!-- ========= START OF TOP NAVBAR ======= -->",
@@ -1751,21 +1787,21 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Nested Class Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"field.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Field Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"constructor.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Constructor Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"method.summary\">\n"
@@ -1812,14 +1848,14 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Enum Constant Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"method.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Method Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"enum.constant.detail\">\n"
@@ -1854,7 +1890,7 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Method Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"method.detail\">\n"
@@ -1939,14 +1975,14 @@
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Required Element Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"annotation.type.optional.element.summary\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Optional Element Summary</h3>\n"
- + "<table class=\"memberSummary\">",
+ + "<div class=\"memberSummary\">",
"<section role=\"region\">\n"
+ "<ul class=\"blockList\">\n"
+ "<li class=\"blockList\"><a id=\"annotation.type.element.detail\">\n"
@@ -1969,13 +2005,13 @@
+ "<!-- ========= START OF TOP NAVBAR ======= -->",
"<main role=\"main\">\n"
+ "<div class=\"header\">",
- "<table class=\"useSummary\">",
+ "<div class=\"useSummary\">\n<table>\n",
"<section role=\"region\"><a id=\"pkg\">\n"
+ "<!-- -->\n"
+ "</a>\n"
+ "<h3>Uses of <a href=\"../RegClass.html\" title=\"class in pkg1\">RegClass</a> in <a href=\"../../pkg/package-summary.html\">pkg</a></h3>\n"
+ "\n"
- + "<table class=\"useSummary\">",
+ + "<div class=\"useSummary\">",
"<footer role=\"contentinfo\">\n"
+ "<nav role=\"navigation\">\n"
+ "<!-- ======= START OF BOTTOM NAVBAR ====== -->");
--- a/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java Wed Nov 21 13:53:17 2018 -0500
@@ -25,7 +25,7 @@
* @test
* @bug 7112427 8012295 8025633 8026567 8061305 8081854 8150130 8162363
* 8167967 8172528 8175200 8178830 8182257 8186332 8182765 8025091
- * 8203791
+ * 8203791 8184205
* @summary Test of the JavaFX doclet features.
* @author jvalenta
* @library ../lib
@@ -136,7 +136,7 @@
+ "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n"
+ "<dd>JavaFX 8.0</dd>",
"<h3>Property Summary</h3>\n"
- + "<table class=\"memberSummary\">\n"
+ + "<div class=\"memberSummary\">\n<table>\n"
+ "<caption><span>Properties</span><span class=\"tabEnd\"> </span></caption>",
"<tr class=\"altColor\">\n"
+ "<td class=\"colFirst\"><code><a href=\"C.BooleanProperty.html\" title=\"class in pkg1\">C.BooleanProperty</a></code></td>\n",
@@ -146,12 +146,16 @@
checkOutput("pkg1/C.html", false,
"A()",
"<h3>Property Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Property Summary table, listing properties, and an explanation\">\n"
- + "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\"> </span>"
- + "</span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a>"
- + "</span><span class=\"tabEnd\"> </span></span><span id=\"t4\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "</caption>",
+ + "<div class=\"memberSummary\">\n"
+ + "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"memberSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Methods"
+ + "</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">Instance Methods</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"memberSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t4\" class=\"tableTab\""
+ + " onclick=\"show(8);\">Concrete Methods</button></div>",
"<tr id=\"i0\" class=\"altColor\">\n"
+ "<td class=\"colFirst\"><code><a href=\"C.BooleanProperty.html\" title=\"class in pkg1\">C.BooleanProperty</a></code></td>\n",
"<tr id=\"i1\" class=\"rowColor\">\n"
@@ -190,7 +194,7 @@
+ "<a href=\"#setTestMethodProperty--\">"
+ "setTestMethodProperty</a></span>()</code></th>",
"<h3>Property Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Property Summary table, listing properties, and an explanation\">\n"
+ + "<div class=\"memberSummary\">\n<table summary=\"Property Summary table, listing properties, and an explanation\">\n"
+ "<caption><span>Properties</span><span class=\"tabEnd\"> </span></caption>");
}
@@ -240,17 +244,21 @@
+ "</li>\n"
+ "</ul>",
"<h3>Property Summary</h3>\n"
- + "<table class=\"memberSummary\">\n"
+ + "<div class=\"memberSummary\">\n<table>\n"
+ "<caption><span>Properties</span><span class=\"tabEnd\"> </span></caption>");
checkOutput("pkg2/Test.html", false,
"<h3>Property Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Property Summary table, listing properties, and an explanation\">\n"
- + "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\"> </span>"
- + "</span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a>"
- + "</span><span class=\"tabEnd\"> </span></span><span id=\"t4\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "</caption>");
+ + "<div class=\"memberSummary\">\n"
+ + "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"memberSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Methods"
+ + "</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">Instance Methods</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"memberSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t4\" class=\"tableTab\""
+ + " onclick=\"show(8);\">Concrete Methods</button></div>");
}
@Test
@@ -296,7 +304,7 @@
+ "</li>\n"
+ "</ul>",
"<h3>Property Summary</h3>\n"
- + "<table class=\"memberSummary\" summary=\"Property Summary table, listing properties, and an explanation\">\n"
+ + "<div class=\"memberSummary\">\n<table summary=\"Property Summary table, listing properties, and an explanation\">\n"
+ "<caption><span>Properties</span><span class=\"tabEnd\"> </span></caption>");
}
--- a/test/langtools/jdk/javadoc/doclet/testLambdaFeature/TestLambdaFeature.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testLambdaFeature/TestLambdaFeature.java Wed Nov 21 13:53:17 2018 -0500
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8004893 8022738 8029143 8175200 8186332
+ * @bug 8004893 8022738 8029143 8175200 8186332 8184205
* @summary Make sure that the lambda feature changes work fine in
* javadoc.
* @author bpatel
@@ -56,16 +56,17 @@
checkOutput("pkg/A.html", true,
"<td class=\"colFirst\"><code>default void</code></td>",
"<pre class=\"methodSignature\">default void defaultMethod()</pre>",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>"
- + "All Methods</span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t2\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(2);\">Instance Methods</a></span>"
- + "<span class=\"tabEnd\"> </span></span><span id=\"t3\" "
- + "class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
- + "Abstract Methods</a></span><span class=\"tabEnd\"> </span>"
- + "</span><span id=\"t5\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(16);\">Default Methods</a></span>"
- + "<span class=\"tabEnd\"> </span></span></caption>",
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"memberSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Methods"
+ + "</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">Instance Methods</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"memberSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t3\" class=\"tableTab\""
+ + " onclick=\"show(4);\">Abstract Methods</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t5\" class=\"tableTab\" onclick=\"show(16);\">Default Methods</button></div>",
"<dl>\n"
+ "<dt>Functional Interface:</dt>\n"
+ "<dd>This is a functional interface and can therefore be used as "
--- a/test/langtools/jdk/javadoc/doclet/testMethodTypes/TestMethodTypes.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testMethodTypes/TestMethodTypes.java Wed Nov 21 13:53:17 2018 -0500
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8002304 8024096 8193671 8196201 8203791
+ * @bug 8002304 8024096 8193671 8196201 8203791 8184205
* @summary Test for various method type tabs in the method summary table
* @author Bhavesh Patel
* @library ../lib
@@ -48,46 +48,56 @@
checkOutput("pkg1/A.html", true,
"var data = {",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All "
- + "Methods</span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">"
- + "Static Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
- + "Instance Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">"
- + "Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">"
- + "Deprecated Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "</caption>",
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"memberSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Methods</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"memberSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t1\" class=\"tableTab\""
+ + " onclick=\"show(1);\">Static Methods</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">Instance Methods</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"memberSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t4\" class=\"tableTab\""
+ + " onclick=\"show(8);\">Concrete Methods</button><button role=\"tab\""
+ + " aria-selected=\"false\" aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t6\" class=\"tableTab\" onclick=\"show(32);\">"
+ + "Deprecated Methods</button></div>",
"<tr class=\"altColor\" id=\"i0\">");
checkOutput("pkg1/B.html", true,
"var data = {\"i0\":6,\"i1\":18,\"i2\":18,\"i3\":1,\"i4\":1,"
+ "\"i5\":6,\"i6\":6,\"i7\":6,\"i8\":6};\n",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span>"
- + "<span class=\"tabEnd\"> </span></span><span id=\"t1\" class=\"tableTab\">"
- + "<span><a href=\"javascript:show(1);\">Static Methods</a></span>"
- + "<span class=\"tabEnd\"> </span></span><span id=\"t2\" class=\"tableTab\">"
- + "<span><a href=\"javascript:show(2);\">Instance Methods</a></span>"
- + "<span class=\"tabEnd\"> </span></span><span id=\"t3\" class=\"tableTab\">"
- + "<span><a href=\"javascript:show(4);\">Abstract Methods</a></span>"
- + "<span class=\"tabEnd\"> </span></span><span id=\"t5\" class=\"tableTab\">"
- + "<span><a href=\"javascript:show(16);\">Default Methods</a></span>"
- + "<span class=\"tabEnd\"> </span></span></caption>\n");
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"memberSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Methods"
+ + "</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t1\" class=\"tableTab\" onclick=\"show(1);\">"
+ + "Static Methods</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">Instance Methods</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"memberSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t3\" class=\"tableTab\""
+ + " onclick=\"show(4);\">Abstract Methods</button><button role=\"tab\""
+ + " aria-selected=\"false\" aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t5\" class=\"tableTab\" onclick=\"show(16);\">"
+ + "Default Methods</button></div>");
checkOutput("pkg1/D.html", true,
"var data = {",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All "
- + "Methods</span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
- + "Instance Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
- + "Abstract Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">"
- + "Concrete Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">"
- + "Deprecated Methods</a></span><span class=\"tabEnd\"> </span></span>"
- + "</caption>",
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"memberSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Methods</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"memberSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t2\" class=\"tableTab\""
+ + " onclick=\"show(2);\">Instance Methods</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t3\" class=\"tableTab\" onclick=\"show(4);\">Abstract Methods</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"memberSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t4\" class=\"tableTab\""
+ + " onclick=\"show(8);\">Concrete Methods</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"memberSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t6\" class=\"tableTab\" onclick=\"show(32);\">Deprecated Methods</button></div>",
"<tr class=\"altColor\" id=\"i0\">");
checkOutput("pkg1/A.html", false,
--- a/test/langtools/jdk/javadoc/doclet/testModules/TestIndirectExportsOpens.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testModules/TestIndirectExportsOpens.java Wed Nov 21 13:53:17 2018 -0500
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8178339 8182765
+ * @bug 8178339 8182765 8184205
* @summary Tests indirect exports and opens in the module summary page
* @modules jdk.javadoc/jdk.javadoc.internal.api
* jdk.javadoc/jdk.javadoc.internal.tool
@@ -219,7 +219,8 @@
}
checkOutput("a/module-summary.html", present,
- "<table class=\"packagesSummary\">\n"
+ "<div class=\"packagesSummary\">\n"
+ + "<table>\n"
+ "<caption><span>" + typeString + "</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">From</th>\n"
@@ -231,7 +232,8 @@
+ "<td class=\"colLast\"><a href=\"../m/pm/package-summary.html\">pm</a></td>\n"
+ "</tr>\n"
+ "</tbody>\n"
- + "</table>\n");
+ + "</table>\n"
+ + "</div>");
}
void verifyIndirectExports_html4(boolean present) {
@@ -253,7 +255,8 @@
}
checkOutput("a/module-summary.html", present,
- "<table class=\"packagesSummary\" summary=\"" + typeString + " table, listing modules, and packages\">\n"
+ "<div class=\"packagesSummary\">\n"
+ + "<table summary=\"" + typeString + " table, listing modules, and packages\">\n"
+ "<caption><span>" + typeString + "</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">From</th>\n"
@@ -265,6 +268,7 @@
+ "<td class=\"colLast\"><a href=\"../m/pm/package-summary.html\">pm</a></td>\n"
+ "</tr>\n"
+ "</tbody>\n"
- + "</table>\n");
+ + "</table>\n"
+ + "</div>");
}
}
--- a/test/langtools/jdk/javadoc/doclet/testModules/TestModulePackages.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testModules/TestModulePackages.java Wed Nov 21 13:53:17 2018 -0500
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8178070 8196201
+ * @bug 8178070 8196201 8184205
* @summary Test packages table in module summary pages
* @library /tools/lib ../lib
* @modules jdk.compiler/com.sun.tools.javac.api
@@ -413,26 +413,30 @@
if (kinds.length > 1) {
Set<TabKind> kindSet = Set.of(kinds);
StringBuilder sb = new StringBuilder();
- sb.append("<caption>"
- + "<span id=\"t0\" class=\"activeTableTab\">"
- + "<span>All Packages</span>"
- + "<span class=\"tabEnd\"> </span></span>");
+ sb.append("<div role=\"tablist\" aria-orientation=\"horizontal\">"
+ + "<button role=\"tab\" aria-selected=\"true\""
+ + " aria-controls=\"packagesSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\""
+ + " id=\"t0\" class=\"activeTableTab\">All Packages</button>");
if (kindSet.contains(TabKind.EXPORTS)) {
- sb.append("<span id=\"t1\" class=\"tableTab\">"
- + "<span><a href=\"javascript:show(1);\">Exports</a></span>"
- + "<span class=\"tabEnd\"> </span></span>");
+ sb.append("<button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"packagesSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t1\" class=\"tableTab\""
+ + " onclick=\"show(1);\">Exports</button>");
}
if (kindSet.contains(TabKind.OPENS)) {
- sb.append("<span id=\"t2\" class=\"tableTab\">"
- + "<span><a href=\"javascript:show(2);\">Opens</a></span>"
- + "<span class=\"tabEnd\"> </span></span>");
+ sb.append("<button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"packagesSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t2\" class=\"tableTab\""
+ + " onclick=\"show(2);\">Opens</button>");
}
if (kindSet.contains(TabKind.CONCEALED)) {
- sb.append("<span id=\"t3\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(4);\">Concealed</a></span>"
- + "<span class=\"tabEnd\"> </span></span>");
+ sb.append("<button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"packagesSummary_tabpanel\" tabindex=\"-1\" "
+ + "onkeydown=\"switchTab(event)\" id=\"t3\" class=\"tableTab\" "
+ + "onclick=\"show(4);\">Concealed</button>");
}
- sb.append("</caption>");
+ sb.append("</div>");
expect = sb.toString();
} else {
TabKind k = kinds[0];
--- a/test/langtools/jdk/javadoc/doclet/testModules/TestModuleServices.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testModules/TestModuleServices.java Wed Nov 21 13:53:17 2018 -0500
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8178067 8192007 8182765
+ * @bug 8178067 8192007 8182765 8184205
* @summary tests the module's services, such as provides and uses
* @modules jdk.javadoc/jdk.javadoc.internal.api
* jdk.javadoc/jdk.javadoc.internal.tool
@@ -195,7 +195,7 @@
"<h3>Services</h3>");
checkOutput("m/module-summary.html", true,
- "<table class=\"usesSummary\">\n" +
+ "<div class=\"usesSummary\">\n<table>\n" +
"<caption><span>Uses</span><span class=\"tabEnd\"> </span></caption>\n" +
"<tr>\n" +
"<th class=\"colFirst\" scope=\"col\">Type</th>\n" +
@@ -222,7 +222,8 @@
checkExit(Exit.OK);
checkOutput("m/module-summary.html", true,
- "<table class=\"usesSummary\" summary=\"Uses table, listing types, and an explanation\">\n" +
+ "<div class=\"usesSummary\">\n" +
+ "<table summary=\"Uses table, listing types, and an explanation\">\n" +
"<caption><span>Uses</span><span class=\"tabEnd\"> </span></caption>\n" +
"<tr>\n" +
"<th class=\"colFirst\" scope=\"col\">Type</th>\n" +
@@ -262,7 +263,7 @@
"<h3>Services</h3>");
checkOutput("m/module-summary.html", true,
- "<table class=\"usesSummary\">\n" +
+ "<div class=\"usesSummary\">\n<table>\n" +
"<caption><span>Uses</span><span class=\"tabEnd\"> </span></caption>\n" +
"<tr>\n" +
"<th class=\"colFirst\" scope=\"col\">Type</th>\n" +
@@ -284,7 +285,8 @@
checkExit(Exit.OK);
checkOutput("m/module-summary.html", true,
- "<table class=\"usesSummary\" summary=\"Uses table, listing types, and an explanation\">\n" +
+ "<div class=\"usesSummary\">\n" +
+ "<table summary=\"Uses table, listing types, and an explanation\">\n" +
"<caption><span>Uses</span><span class=\"tabEnd\"> </span></caption>\n" +
"<tr>\n" +
"<th class=\"colFirst\" scope=\"col\">Type</th>\n" +
@@ -350,7 +352,7 @@
"<h3>Services</h3>");
checkOutput("m/module-summary.html", true,
- "<table class=\"providesSummary\">\n" +
+ "<div class=\"providesSummary\">\n<table>\n" +
"<caption><span>Provides</span><span class=\"tabEnd\"> </span></caption>\n" +
"<tr>\n" +
"<th class=\"colFirst\" scope=\"col\">Type</th>\n" +
@@ -377,7 +379,8 @@
checkExit(Exit.OK);
checkOutput("m/module-summary.html", true,
- "<table class=\"providesSummary\" summary=\"Provides table, listing types, and an explanation\">\n" +
+ "<div class=\"providesSummary\">\n" +
+ "<table summary=\"Provides table, listing types, and an explanation\">\n" +
"<caption><span>Provides</span><span class=\"tabEnd\"> </span></caption>\n" +
"<tr>\n" +
"<th class=\"colFirst\" scope=\"col\">Type</th>\n" +
@@ -420,7 +423,7 @@
"<h3>Services</h3>");
checkOutput("m/module-summary.html", true,
- "<table class=\"providesSummary\">\n" +
+ "<div class=\"providesSummary\">\n<table>\n" +
"<caption><span>Provides</span><span class=\"tabEnd\"> </span></caption>\n" +
"<tr>\n" +
"<th class=\"colFirst\" scope=\"col\">Type</th>\n" +
@@ -444,7 +447,8 @@
checkExit(Exit.OK);
checkOutput("m/module-summary.html", true,
- "<table class=\"providesSummary\" summary=\"Provides table, listing types, and an explanation\">\n" +
+ "<div class=\"providesSummary\">\n" +
+ "<table summary=\"Provides table, listing types, and an explanation\">\n" +
"<caption><span>Provides</span><span class=\"tabEnd\"> </span></caption>\n" +
"<tr>\n" +
"<th class=\"colFirst\" scope=\"col\">Type</th>\n" +
@@ -486,7 +490,7 @@
"<h3>Services</h3>");
checkOutput("m/module-summary.html", true,
- "<table class=\"providesSummary\">\n" +
+ "<div class=\"providesSummary\">\n<table>\n" +
"<caption><span>Provides</span><span class=\"tabEnd\"> </span></caption>\n" +
"<tr>\n" +
"<th class=\"colFirst\" scope=\"col\">Type</th>\n" +
@@ -500,7 +504,7 @@
"</tr>\n" +
"</tbody>\n" +
"</table>",
- "<table class=\"usesSummary\">\n" +
+ "<div class=\"usesSummary\">\n<table>\n" +
"<caption><span>Uses</span><span class=\"tabEnd\"> </span></caption>\n" +
"<tr>\n" +
"<th class=\"colFirst\" scope=\"col\">Type</th>\n" +
@@ -524,7 +528,8 @@
checkExit(Exit.OK);
checkOutput("m/module-summary.html", true,
- "<table class=\"providesSummary\" summary=\"Provides table, listing types, and an explanation\">\n" +
+ "<div class=\"providesSummary\">\n" +
+ "<table summary=\"Provides table, listing types, and an explanation\">\n" +
"<caption><span>Provides</span><span class=\"tabEnd\"> </span></caption>\n" +
"<tr>\n" +
"<th class=\"colFirst\" scope=\"col\">Type</th>\n" +
@@ -538,7 +543,8 @@
"</tr>\n" +
"</tbody>\n" +
"</table>",
- "<table class=\"usesSummary\" summary=\"Uses table, listing types, and an explanation\">\n" +
+ "<div class=\"usesSummary\">\n" +
+ "<table summary=\"Uses table, listing types, and an explanation\">\n" +
"<caption><span>Uses</span><span class=\"tabEnd\"> </span></caption>\n" +
"<tr>\n" +
"<th class=\"colFirst\" scope=\"col\">Type</th>\n" +
--- a/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java Wed Nov 21 13:53:17 2018 -0500
@@ -27,6 +27,7 @@
* 8168766 8168688 8162674 8160196 8175799 8174974 8176778 8177562 8175218
* 8175823 8166306 8178043 8181622 8183511 8169819 8074407 8183037 8191464
8164407 8192007 8182765 8196200 8196201 8196202 8196202 8205593 8202462
+ 8184205
* @summary Test modules support in javadoc.
* @author bpatel
* @library ../lib
@@ -702,7 +703,8 @@
+ "<div class=\"block\">The overview summary page header.</div>\n"
+ "</div>\n"
+ "<div class=\"contentContainer\">\n"
- + "<table class=\"overviewSummary\" summary=\"Module Summary table, listing modules, and an explanation\">\n"
+ + "<div class=\"overviewSummary\">\n"
+ + "<table summary=\"Module Summary table, listing modules, and an explanation\">\n"
+ "<caption><span>Modules</span><span class=\"tabEnd\"> </span></caption>");
checkOutput("overview-summary.html", false,
"</table>\n"
@@ -711,7 +713,8 @@
+ "<div class=\"block\">The overview summary page header.</div>\n"
+ "</div>\n"
+ "<div class=\"contentContainer\">\n"
- + "<table class=\"overviewSummary\" summary=\"Module Summary table, listing modules, and an explanation\">\n"
+ + "<div class=\"overviewSummary\">\n"
+ + "<table summary=\"Module Summary table, listing modules, and an explanation\">\n"
+ "<caption><span>Modules</span><span class=\"tabEnd\"> </span></caption>");
}
@@ -761,7 +764,7 @@
+ "<div class=\"block\">The overview summary page header.</div>\n"
+ "</div>\n"
+ "<div class=\"contentContainer\">\n"
- + "<table class=\"overviewSummary\">\n"
+ + "<div class=\"overviewSummary\">\n<table>\n"
+ "<caption><span>Modules</span><span class=\"tabEnd\"> </span></caption>");
checkOutput("overview-summary.html", false,
"</table>\n"
@@ -772,7 +775,7 @@
+ "<div class=\"block\">The overview summary page header.</div>\n"
+ "</div>\n"
+ "<div class=\"contentContainer\">\n"
- + "<table class=\"overviewSummary\">\n"
+ + "<div class=\"overviewSummary\">\n<table>\n"
+ "<caption><span>Modules</span><span class=\"tabEnd\"> </span></caption>");
}
@@ -856,14 +859,16 @@
void checkOverviewSummaryModules() {
checkOutput("overview-summary.html", true,
- "<table class=\"overviewSummary\" summary=\"Module Summary table, listing modules, and an explanation\">\n"
+ "<div class=\"overviewSummary\">\n"
+ + "<table summary=\"Module Summary table, listing modules, and an explanation\">\n"
+ "<caption><span>Modules</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Module</th>\n"
+ "<th class=\"colLast\" scope=\"col\">Description</th>\n"
+ "</tr>");
checkOutput("overview-summary.html", false,
- "<table class=\"overviewSummary\" summary=\"Package Summary table, listing packages, and an explanation\">\n"
+ "<div class=\"overviewSummary\">\n"
+ + "<table summary=\"Package Summary table, listing packages, and an explanation\">\n"
+ "<caption><span>Packages</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
@@ -873,7 +878,8 @@
void checkOverviewSummaryPackages() {
checkOutput("overview-summary.html", false,
- "<table class=\"overviewSummary\" summary=\"Module Summary table, listing modules, and an explanation\">\n"
+ "<div class=\"overviewSummary\">\n"
+ + "<table summary=\"Module Summary table, listing modules, and an explanation\">\n"
+ "<caption><span>Modules</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Module</th>\n"
@@ -885,10 +891,12 @@
+ "<div class=\"block\">The overview summary page header.</div>\n"
+ "</div>\n"
+ "<div class=\"contentContainer\">\n"
- + "<table class=\"overviewSummary\" summary=\"Package Summary table, listing packages, and an explanation\">\n"
+ + "<div class=\"overviewSummary\">\n"
+ + "<table summary=\"Package Summary table, listing packages, and an explanation\">\n"
+ "<caption><span>Packages</span><span class=\"tabEnd\"> </span></caption>");
checkOutput("overview-summary.html", true,
- "<table class=\"overviewSummary\" summary=\"Package Summary table, listing packages, and an explanation\">\n"
+ "<div class=\"overviewSummary\">\n"
+ + "<table summary=\"Package Summary table, listing packages, and an explanation\">\n"
+ "<caption><span>Packages</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
@@ -899,20 +907,23 @@
+ "<div class=\"block\">The overview summary page header.</div>\n"
+ "</div>\n"
+ "<div class=\"contentContainer\">\n"
- + "<table class=\"overviewSummary\" summary=\"Package Summary table, listing packages, and an explanation\">\n"
+ + "<div class=\"overviewSummary\">\n"
+ + "<table summary=\"Package Summary table, listing packages, and an explanation\">\n"
+ "<caption><span>Packages</span><span class=\"tabEnd\"> </span></caption>");
}
void checkHtml5OverviewSummaryModules() {
checkOutput("overview-summary.html", true,
- "<table class=\"overviewSummary\">\n"
+ "<div class=\"overviewSummary\">\n"
+ + "<table>\n"
+ "<caption><span>Modules</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Module</th>\n"
+ "<th class=\"colLast\" scope=\"col\">Description</th>\n"
+ "</tr>");
checkOutput("overview-summary.html", false,
- "<table class=\"overviewSummary\">\n"
+ "<div class=\"overviewSummary\">\n"
+ + "<table>\n"
+ "<caption><span>Packages</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
@@ -922,7 +933,8 @@
void checkHtml5OverviewSummaryPackages() {
checkOutput("overview-summary.html", false,
- "<table class=\"overviewSummary\">\n"
+ "<div class=\"overviewSummary\">\n"
+ + "<table>\n"
+ "<caption><span>Modules</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Module</th>\n"
@@ -938,10 +950,11 @@
+ "<div class=\"contentContainer\"><a id=\"Packages\">\n"
+ "<!-- -->\n"
+ "</a>\n"
- + "<table class=\"overviewSummary\">\n"
+ + "<div class=\"overviewSummary\">\n"
+ + "<table>\n"
+ "<caption><span>Packages</span><span class=\"tabEnd\"> </span></caption>");
checkOutput("overview-summary.html", true,
- "<table class=\"overviewSummary\">\n"
+ "<div class=\"overviewSummary\">\n<table>\n"
+ "<caption><span>Packages</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
@@ -955,7 +968,7 @@
+ "<div class=\"block\">The overview summary page header.</div>\n"
+ "</div>\n"
+ "<div class=\"contentContainer\">\n"
- + "<table class=\"overviewSummary\">\n"
+ + "<div class=\"overviewSummary\">\n<table>\n"
+ "<caption><span>Packages</span><span class=\"tabEnd\"> </span></caption>");
}
@@ -1220,14 +1233,14 @@
+ "<li><a href=\"#modules.summary\">Modules</a> | </li>\n"
+ "<li><a href=\"#packages.summary\">Packages</a> | </li>\n"
+ "<li>Services</li>",
- "<table class=\"requiresSummary\">\n"
+ "<div class=\"requiresSummary\">\n<table>\n"
+ "<caption><span>Indirect Requires</span><span class=\"tabEnd\"> </span></caption>",
"<td class=\"colFirst\">transitive</td>\n"
+ "<th class=\"colSecond\" scope=\"row\"><a href=\"../moduleB/module-summary.html\">moduleB</a></th>\n"
+ "<td class=\"colLast\">\n"
+ "<div class=\"block\">This is a test description for the moduleB module.</div>\n"
+ "</td>",
- "<table class=\"packagesSummary\">\n"
+ "<div class=\"packagesSummary\">\n<table>\n"
+ "<caption><span>Indirect Exports</span><span class=\"tabEnd\"> </span></caption>",
"<td class=\"colFirst\">transitive static</td>\n"
+ "<th class=\"colSecond\" scope=\"row\"><a href=\"../moduleA/module-summary.html\">moduleA</a></th>\n"
@@ -1235,19 +1248,19 @@
+ "<div class=\"block\">This is a test description for the moduleA module with a Search "
+ "phrase search phrase.</div>\n"
+ "</td>",
- "<table class=\"requiresSummary\">\n"
+ "<div class=\"requiresSummary\">\n<table>\n"
+ "<caption><span>Requires</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Modifier</th>\n"
+ "<th class=\"colSecond\" scope=\"col\">Module</th>\n"
+ "<th class=\"colLast\" scope=\"col\">Description</th>",
- "<table class=\"requiresSummary\">\n"
+ "<div class=\"requiresSummary\">\n<table>\n"
+ "<caption><span>Indirect Requires</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Modifier</th>\n"
+ "<th class=\"colSecond\" scope=\"col\">Module</th>\n"
+ "<th class=\"colLast\" scope=\"col\">Description</th>",
- "<table class=\"packagesSummary\">\n"
+ "<div class=\"packagesSummary\">\n<table>\n"
+ "<caption><span>Indirect Opens</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">From</th>\n"
@@ -1267,23 +1280,28 @@
+ " Package Link: <a href=\"moduletags/testpkgmdltags/package-summary.html\"><code>testpkgmdltags</code></a>.<br></div>\n"
+ "</td>");
checkOutput("moduletags/module-summary.html", true,
- "<table class=\"requiresSummary\" summary=\"Indirect Requires table, listing modules, and an explanation\">\n"
+ "<div class=\"requiresSummary\">\n"
+ + "<table summary=\"Indirect Requires table, listing modules, and an explanation\">\n"
+ "<caption><span>Indirect Requires</span><span class=\"tabEnd\"> </span></caption>",
- "<table class=\"packagesSummary\" summary=\"Indirect Exports table, listing modules, and packages\">\n"
+ "<div class=\"packagesSummary\">\n"
+ + "<table summary=\"Indirect Exports table, listing modules, and packages\">\n"
+ "<caption><span>Indirect Exports</span><span class=\"tabEnd\"> </span></caption>",
- "<table class=\"requiresSummary\" summary=\"Requires table, listing modules, and an explanation\">\n"
+ "<div class=\"requiresSummary\">\n"
+ + "<table summary=\"Requires table, listing modules, and an explanation\">\n"
+ "<caption><span>Requires</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Modifier</th>\n"
+ "<th class=\"colSecond\" scope=\"col\">Module</th>\n"
+ "<th class=\"colLast\" scope=\"col\">Description</th>",
- "<table class=\"requiresSummary\" summary=\"Indirect Requires table, listing modules, and an explanation\">\n"
+ "<div class=\"requiresSummary\">\n"
+ + "<table summary=\"Indirect Requires table, listing modules, and an explanation\">\n"
+ "<caption><span>Indirect Requires</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Modifier</th>\n"
+ "<th class=\"colSecond\" scope=\"col\">Module</th>\n"
+ "<th class=\"colLast\" scope=\"col\">Description</th>",
- "<table class=\"packagesSummary\" summary=\"Indirect Opens table, listing modules, and packages\">\n"
+ "<div class=\"packagesSummary\">\n"
+ + "<table summary=\"Indirect Opens table, listing modules, and packages\">\n"
+ "<caption><span>Indirect Opens</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">From</th>\n"
@@ -1302,7 +1320,7 @@
+ "<li><a href=\"#services.summary\">Services</a></li>",
"<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdlB/package-summary.html\">testpkgmdlB</a></th>\n"
+ "<td class=\"colLast\"> </td>",
- "<table class=\"packagesSummary\">\n"
+ "<div class=\"packagesSummary\">\n<table>\n"
+ "<caption><span>Opens</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
@@ -1322,7 +1340,8 @@
void checkModuleModeApi_html4(boolean found) {
checkOutput("moduleB/module-summary.html", found,
- "<table class=\"packagesSummary\" summary=\"Packages table, listing packages, and an explanation\">\n"
+ "<div class=\"packagesSummary\">\n"
+ + "<table summary=\"Packages table, listing packages, and an explanation\">\n"
+ "<caption><span>Opens</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
@@ -1352,10 +1371,13 @@
"<th class=\"colFirst\" scope=\"row\"><a href=\"testpkgmdlA/package-summary.html\">testpkgmdlA</a></th>\n"
+ "<td class=\"colSecond\">All Modules</td>\n"
+ "<td class=\"colLast\"> </td>",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Packages</span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Exports</a></span>"
- + "<span class=\"tabEnd\"> </span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
- + "Concealed</a></span><span class=\"tabEnd\"> </span></span></caption>",
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\" aria-selected=\"true\""
+ + " aria-controls=\"packagesSummary_tabpanel\" tabindex=\"0\" onkeydown=\"switchTab(event)\" id=\"t0\""
+ + " class=\"activeTableTab\">All Packages</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"packagesSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t1\""
+ + " class=\"tableTab\" onclick=\"show(1);\">Exports</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"packagesSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t3\""
+ + " class=\"tableTab\" onclick=\"show(4);\">Concealed</button></div>",
"<th class=\"colFirst\" scope=\"row\"><a href=\"concealedpkgmdlA/package-summary.html\">concealedpkgmdlA</a></th>\n"
+ "<td class=\"colSecond\">None</td>\n"
+ "<td class=\"colLast\"> </td>");
@@ -1379,9 +1401,13 @@
"<th class=\"colFirst\" scope=\"row\"><a href=\"testpkg2mdlB/TestInterfaceInModuleB.html\" title=\"interface in testpkg2mdlB\">TestInterfaceInModuleB</a></th>\n"
+ "<td class=\"colLast\"> <br>(<span class=\"implementationLabel\">Implementation(s):</span> <a href=\"testpkgmdlB/TestClassInModuleB.html\" "
+ "title=\"class in testpkgmdlB\">TestClassInModuleB</a>)</td>",
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Packages</span><span class=\"tabEnd\"> </span></span><span id=\"t1\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(1);\">Exports</a></span><span class=\"tabEnd\"> </span></span><span id=\"t2\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(2);\">Opens</a></span><span class=\"tabEnd\"> </span></span></caption>");
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\" aria-selected=\"true\""
+ + " aria-controls=\"packagesSummary_tabpanel\" tabindex=\"0\" onkeydown=\"switchTab(event)\" id=\"t0\""
+ + " class=\"activeTableTab\">All Packages</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"packagesSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t1\""
+ + " class=\"tableTab\" onclick=\"show(1);\">Exports</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"packagesSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t2\""
+ + " class=\"tableTab\" onclick=\"show(2);\">Opens</button></div>");
checkOutput("moduleC/module-summary.html", found,
"<caption><span>Exports</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
@@ -1463,13 +1489,20 @@
void checkGroupOption() {
checkOutput("overview-summary.html", true,
"<div class=\"contentContainer\">\n"
- + "<table class=\"overviewSummary\">\n"
- + "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Modules</span><span class=\"tabEnd\"> "
- + "</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">"
- + "Module Group A</a></span><span class=\"tabEnd\"> </span></span><span id=\"t2\" class=\"tableTab\">"
- + "<span><a href=\"javascript:show(2);\">Module Group B & C</a></span><span class=\"tabEnd\">"
- + " </span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
- + "Other Modules</a></span><span class=\"tabEnd\"> </span></span></caption>",
+ + "<div class=\"overviewSummary\">\n"
+ + "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"overviewSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Modules</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t1\" class=\"tableTab\""
+ + " onclick=\"show(1);\">Module Group A</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"overviewSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">Module Group B & C</button><button"
+ + " role=\"tab\" aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t4\" class=\"tableTab\" onclick=\"show(4);\">"
+ + "Other Modules</button></div>\n"
+ + "<div id=\"overviewSummary_tabpanel\" role=\"tabpanel\">\n"
+ + "<table aria-labelledby=\"t0\">",
"var data = {\"i0\":1,\"i1\":2,\"i2\":2,\"i3\":4};\n"
+ "var tabs = {65535:[\"t0\",\"All Modules\"],1:[\"t1\",\"Module Group A\"],2:[\"t2\",\"Module Group B & C\"],4:[\"t4\",\"Other Modules\"]};\n"
+ "var altColor = \"altColor\";\n"
@@ -1477,7 +1510,7 @@
+ "var tableTab = \"tableTab\";\n"
+ "var activeTableTab = \"activeTableTab\";");
checkOutput("overview-summary.html", false,
- "<table class=\"overviewSummary\">\n"
+ "<div class=\"overviewSummary\">\n<table>\n"
+ "<caption><span>Modules</span><span class=\"tabEnd\"> </span></caption>",
"Java SE Modules");
}
@@ -1485,13 +1518,20 @@
void checkGroupOption_html4() {
checkOutput("overview-summary.html", true,
"<div class=\"contentContainer\">\n"
- + "<table class=\"overviewSummary\" summary=\"Module Summary table, listing modules, and an explanation\">\n"
- + "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Modules</span><span class=\"tabEnd\"> "
- + "</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">"
- + "Module Group A</a></span><span class=\"tabEnd\"> </span></span><span id=\"t2\" class=\"tableTab\">"
- + "<span><a href=\"javascript:show(2);\">Module Group B & C</a></span><span class=\"tabEnd\">"
- + " </span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">"
- + "Other Modules</a></span><span class=\"tabEnd\"> </span></span></caption>",
+ + "<div class=\"overviewSummary\">\n"
+ + "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"overviewSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Modules</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t1\" class=\"tableTab\""
+ + " onclick=\"show(1);\">Module Group A</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"overviewSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">Module Group B & C</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t4\" class=\"tableTab\""
+ + " onclick=\"show(4);\">Other Modules</button></div>\n"
+ + "<div id=\"overviewSummary_tabpanel\" role=\"tabpanel\">\n"
+ + "<table summary=\"Module Summary table, listing modules, and an explanation\" aria-labe",
"var data = {\"i0\":1,\"i1\":2,\"i2\":2,\"i3\":4};\n"
+ "var tabs = {65535:[\"t0\",\"All Modules\"],1:[\"t1\",\"Module Group A\"],2:[\"t2\",\"Module Group B & C\"],4:[\"t4\",\"Other Modules\"]};\n"
+ "var altColor = \"altColor\";\n"
@@ -1499,32 +1539,42 @@
+ "var tableTab = \"tableTab\";\n"
+ "var activeTableTab = \"activeTableTab\";");
checkOutput("overview-summary.html", false,
- "<table class=\"overviewSummary\" summary=\"Module Summary table, listing modules, and an explanation\">\n"
+ "<div class=\"overviewSummary\">\n<table summary=\"Module Summary table, listing modules, and an explanation\">\n"
+ "<caption><span>Modules</span><span class=\"tabEnd\"> </span></caption>",
"Java SE Modules");
}
void checkGroupOptionOrdering() {
checkOutput("overview-summary.html", true,
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Modules</span><span "
- + "class=\"tabEnd\"> </span></span><span id=\"t1\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(1);\">B Group</a></span><span class=\"tabEnd\">"
- + " </span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
- + "C Group</a></span><span class=\"tabEnd\"> </span></span><span id=\"t4\" class=\"tableTab\">"
- + "<span><a href=\"javascript:show(4);\">A Group</a></span><span class=\"tabEnd\"> </span>"
- + "</span><span id=\"t8\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Other Modules"
- + "</a></span><span class=\"tabEnd\"> </span></span></caption>",
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"overviewSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Modules</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t1\" class=\"tableTab\""
+ + " onclick=\"show(1);\">B Group</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"overviewSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">C Group</button><button role=\"tab\""
+ + " aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t4\" class=\"tableTab\" onclick=\"show(4);\">A Group"
+ + "</button><button role=\"tab\" aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t8\" class=\"tableTab\" onclick=\"show(8);\">"
+ + "Other Modules</button></div>",
"var tabs = {65535:[\"t0\",\"All Modules\"],1:[\"t1\",\"B Group\"],2:[\"t2\",\"C Group\"],"
+ "4:[\"t4\",\"A Group\"],8:[\"t8\",\"Other Modules\"]};");
checkOutput("overview-summary.html", false,
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Modules</span><span "
- + "class=\"tabEnd\"> </span></span><span id=\"t1\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(1);\">A Group</a></span><span class=\"tabEnd\">"
- + " </span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
- + "B Group</a></span><span class=\"tabEnd\"> </span></span><span id=\"t4\" class=\"tableTab\">"
- + "<span><a href=\"javascript:show(4);\">C Group</a></span><span class=\"tabEnd\"> </span>"
- + "</span><span id=\"t8\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Other Modules"
- + "</a></span><span class=\"tabEnd\"> </span></span></caption>",
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"overviewSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Modules</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t1\" class=\"tableTab\""
+ + " onclick=\"show(1);\">A Group</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"overviewSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">B Group</button><button role=\"tab\""
+ + " aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t4\" class=\"tableTab\" onclick=\"show(4);\">C Group"
+ + "</button><button role=\"tab\" aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t8\" class=\"tableTab\""
+ + " onclick=\"show(8);\">Other Modules</button></div>",
"Java SE Modules");
}
@@ -1534,12 +1584,17 @@
+ "<div class=\"block\">The overview summary page header.</div>\n"
+ "</div>\n"
+ "<div class=\"contentContainer\">\n"
- + "<table class=\"overviewSummary\">\n"
- + "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Packages</span><span class=\"tabEnd\"> "
- + "</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">"
- + "Package Group 0</a></span><span class=\"tabEnd\"> </span></span><span id=\"t2\" "
- + "class=\"tableTab\"><span><a href=\"javascript:show(2);\">Package Group 1</a></span>"
- + "<span class=\"tabEnd\"> </span></span></caption>",
+ + "<div class=\"overviewSummary\">\n"
+ + "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"overviewSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Packages</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t1\" class=\"tableTab\""
+ + " onclick=\"show(1);\">Package Group 0</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"overviewSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">Package Group 1</button></div>\n"
+ + "<div id=\"overviewSummary_tabpanel\" role=\"tabpanel\">\n"
+ + "<table aria-labelledby=\"t0\">",
"var data = {\"i0\":1,\"i1\":2};\n"
+ "var tabs = {65535:[\"t0\",\"All Packages\"],1:[\"t1\",\"Package Group 0\"],2:[\"t2\",\"Package Group 1\"]};\n"
+ "var altColor = \"altColor\";\n"
@@ -1554,21 +1609,29 @@
+ "<div class=\"block\">The overview summary page header.</div>\n"
+ "</div>\n"
+ "<div class=\"contentContainer\">\n"
- + "<table class=\"overviewSummary\" summary=\"Package Summary table, listing packages, and an explanation\">\n"
- + "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Packages</span><span class=\"tabEnd\"> "
- + "</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">"
- + "Package Group 0</a></span><span class=\"tabEnd\"> </span></span><span id=\"t2\" "
- + "class=\"tableTab\"><span><a href=\"javascript:show(2);\">Package Group 1</a></span>"
- + "<span class=\"tabEnd\"> </span></span></caption>");
+ + "<div class=\"overviewSummary\">\n"
+ + "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"overviewSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Packages"
+ + "</button><button role=\"tab\" aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t1\" class=\"tableTab\" onclick=\"show(1);\">"
+ + "Package Group 0</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"overviewSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t2\""
+ + " class=\"tableTab\" onclick=\"show(2);\">Package Group 1</button></div>\n"
+ + "<div id=\"overviewSummary_tabpanel\" role=\"tabpanel\">\n"
+ + "<table summary=\"Package Summary table, listing packages, and an explanation\" aria-labelledby=\"t0\">");
}
void checkGroupOptionPackageOrdering() {
checkOutput("overview-summary.html", true,
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Packages</span><span "
- + "class=\"tabEnd\"> </span></span><span id=\"t1\" class=\"tableTab\"><span>"
- + "<a href=\"javascript:show(1);\">Z Group</a></span><span class=\"tabEnd\">"
- + " </span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
- + "A Group</a></span><span class=\"tabEnd\"> </span></span></caption>",
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"overviewSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Packages</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"overviewSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t1\" class=\"tableTab\""
+ + " onclick=\"show(1);\">Z Group</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"overviewSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">A Group</button></div>",
"var tabs = {65535:[\"t0\",\"All Packages\"],1:[\"t1\",\"Z Group\"],2:[\"t2\",\"A Group\"]};");
}
@@ -1627,12 +1690,15 @@
void checkAllPkgsAllClasses(boolean found) {
checkOutput("allclasses-index.html", true,
- "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Classes</span>"
- + "<span class=\"tabEnd\"> </span></span><span id=\"t2\" class=\"tableTab\">"
- + "<span><a href=\"javascript:show(2);\">Class Summary</a></span><span class=\"tabEnd\">"
- + " </span></span><span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">"
- + "Annotation Types Summary</a></span><span class=\"tabEnd\"> </span></span></caption>\n"
- + "<tr>\n"
+ "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"typeSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Classes</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"typeSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t2\" class=\"tableTab\""
+ + " onclick=\"show(2);\">Class Summary</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"typeSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t6\" class=\"tableTab\" onclick=\"show(32);\">Annotation Types Summary</button></div>\n",
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Class</th>\n"
+ "<th class=\"colLast\" scope=\"col\">Description</th>\n"
+ "</tr>");
@@ -1643,13 +1709,14 @@
+ "<th class=\"colLast\" scope=\"col\">Description</th>\n"
+ "</tr>\n");
checkOutput("allclasses-index.html", found,
- "<table class=\"typeSummary\">\n");
+ "<table aria-labelledby=\"t0\">\n");
checkOutput("allpackages-index.html", found,
- "<table class=\"packagesSummary\">\n");
+ "<div class=\"packagesSummary\">\n<table>\n");
checkOutput("allclasses-index.html", !found,
- "<table class=\"typeSummary\" summary=\"Class Summary table, listing classes, and an explanation\">");
+ "<table summary=\"Class Summary table, listing classes, and an explanation\" aria-labelledby=\"t0\">");
checkOutput("allpackages-index.html", !found,
- "<table class=\"packagesSummary\" summary=\"Package Summary table, listing packages, and an explanation\">");
+ "<div class=\"packagesSummary\">\n"
+ + "<table summary=\"Package Summary table, listing packages, and an explanation\">");
checkOutput("type-search-index.js", true,
"{\"l\":\"All Classes\",\"url\":\"allclasses-index.html\"}");
checkOutput("package-search-index.js", true,
--- a/test/langtools/jdk/javadoc/doclet/testPackagePage/TestPackagePage.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testPackagePage/TestPackagePage.java Wed Nov 21 13:53:17 2018 -0500
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 4492643 4689286 8196201
+ * @bug 4492643 4689286 8196201 8184205
* @summary Test that a package page is properly generated when a .java file
* passed to Javadoc. Also test that the proper package links are generated
* when single or multiple packages are documented.
@@ -83,14 +83,14 @@
checkOutput("help-doc.html", true,
"<li>Package</li>");
checkOutput("allclasses-index.html", true,
- "<table class=\"typeSummary\">\n"
+ "<div class=\"typeSummary\">\n<table>\n"
+ "<caption><span>Class Summary</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Class</th>\n"
+ "<th class=\"colLast\" scope=\"col\">Description</th>\n"
+ "</tr>\n");
checkOutput("allpackages-index.html", true,
- "<table class=\"packagesSummary\">\n"
+ "<div class=\"packagesSummary\">\n<table>\n"
+ "<caption><span>Package Summary</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
--- a/test/langtools/jdk/javadoc/doclet/testSearch/TestSearch.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testSearch/TestSearch.java Wed Nov 21 13:53:17 2018 -0500
@@ -25,6 +25,7 @@
* @test
* @bug 8141492 8071982 8141636 8147890 8166175 8168965 8176794 8175218 8147881
* 8181622 8182263 8074407 8187521 8198522 8182765 8199278 8196201 8196202
+ * 8184205
* @summary Test the search feature of javadoc.
* @author bpatel
* @library ../lib
@@ -695,19 +696,27 @@
void checkAllPkgsAllClasses() {
checkOutput("allclasses-index.html", true,
- "<table class=\"typeSummary\">\n"
- + "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Classes</span>"
- + "<span class=\"tabEnd\"> </span></span><span id=\"t1\" class=\"tableTab\">"
- + "<span><a href=\"javascript:show(1);\">Interface Summary</a></span><span class=\"tabEnd\">"
- + " </span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">"
- + "Class Summary</a></span><span class=\"tabEnd\"> </span></span><span id=\"t3\" class=\"tableTab\">"
- + "<span><a href=\"javascript:show(4);\">Enum Summary</a></span><span class=\"tabEnd\"> "
- + "</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">"
- + "Exception Summary</a></span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t5\" class=\"tableTab\"><span><a href=\"javascript:show(16);\">"
- + "Error Summary</a></span><span class=\"tabEnd\"> </span></span>"
- + "<span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">Annotation Types Summary"
- + "</a></span><span class=\"tabEnd\"> </span></span></caption>\n"
+ "<div class=\"typeSummary\">\n"
+ + "<div role=\"tablist\" aria-orientation=\"horizontal\"><button role=\"tab\""
+ + " aria-selected=\"true\" aria-controls=\"typeSummary_tabpanel\" tabindex=\"0\""
+ + " onkeydown=\"switchTab(event)\" id=\"t0\" class=\"activeTableTab\">All Classes</button>"
+ + "<button role=\"tab\" aria-selected=\"false\" aria-controls=\"typeSummary_tabpanel\""
+ + " tabindex=\"-1\" onkeydown=\"switchTab(event)\" id=\"t1\" class=\"tableTab\""
+ + " onclick=\"show(1);\">Interface Summary</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"typeSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t2\" class=\"tableTab\" onclick=\"show(2);\">Class Summary</button><button role=\"tab\""
+ + " aria-selected=\"false\" aria-controls=\"typeSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t3\" class=\"tableTab\" onclick=\"show(4);\">"
+ + "Enum Summary</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"typeSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t4\" class=\"tableTab\" onclick=\"show(8);\">Exception Summary</button><button role=\"tab\""
+ + " aria-selected=\"false\" aria-controls=\"typeSummary_tabpanel\" tabindex=\"-1\""
+ + " onkeydown=\"switchTab(event)\" id=\"t5\" class=\"tableTab\" onclick=\"show(16);\">"
+ + "Error Summary</button><button role=\"tab\" aria-selected=\"false\""
+ + " aria-controls=\"typeSummary_tabpanel\" tabindex=\"-1\" onkeydown=\"switchTab(event)\""
+ + " id=\"t6\" class=\"tableTab\" onclick=\"show(32);\">Annotation Types Summary</button></div>\n"
+ + "<div id=\"typeSummary_tabpanel\" role=\"tabpanel\">\n"
+ + "<table aria-labelledby=\"t0\">\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Class</th>\n"
+ "<th class=\"colLast\" scope=\"col\">Description</th>\n"
@@ -715,7 +724,7 @@
"var data = {\"i0\":32,\"i1\":2,\"i2\":4,\"i3\":2,\"i4\":2,\"i5\":1,\"i6\":2,\"i7\":32,"
+ "\"i8\":2,\"i9\":4,\"i10\":16,\"i11\":16,\"i12\":8,\"i13\":8,\"i14\":1,\"i15\":2};");
checkOutput("allpackages-index.html", true,
- "<table class=\"packagesSummary\">\n"
+ "<div class=\"packagesSummary\">\n<table>\n"
+ "<caption><span>Package Summary</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
--- a/test/langtools/jdk/javadoc/doclet/testStylesheet/TestStylesheet.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testStylesheet/TestStylesheet.java Wed Nov 21 13:53:17 2018 -0500
@@ -24,7 +24,7 @@
/*
* @test
* @bug 4494033 7028815 7052425 8007338 8023608 8008164 8016549 8072461 8154261 8162363 8160196 8151743 8177417
- * 8175218 8176452 8181215 8182263 8183511 8169819 8183037 8185369 8182765 8196201
+ * 8175218 8176452 8181215 8182263 8183511 8169819 8183037 8185369 8182765 8196201 8184205
* @summary Run tests on doclet stylesheet.
* @author jamieh
* @library ../lib
@@ -105,29 +105,23 @@
+ " border: none;\n"
+ " height:16px;\n"
+ "}",
- ".memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span,\n"
- + ".overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span {\n"
- + " white-space:nowrap;\n"
- + " padding-top:5px;\n"
- + " padding-left:12px;\n"
- + " padding-right:12px;\n"
- + " margin-right:3px;\n"
- + " display:inline-block;\n"
- + " float:left;\n"
- + " background-color:#F8981D;\n"
- + " height:16px;\n"
+ ".overviewSummary [role=tablist] button, .memberSummary [role=tablist] button,\n"
+ + ".typeSummary [role=tablist] button, .packagesSummary [role=tablist] button {\n"
+ + " border: none;\n"
+ + " cursor: pointer;\n"
+ + " padding: 5px 12px 7px 12px;\n"
+ + " font-weight: bold;\n"
+ + " margin-right: 3px;\n"
+ "}",
- ".memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span,\n"
- + ".overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span {\n"
- + " white-space:nowrap;\n"
- + " padding-top:5px;\n"
- + " padding-left:12px;\n"
- + " padding-right:12px;\n"
- + " margin-right:3px;\n"
- + " display:inline-block;\n"
- + " float:left;\n"
- + " background-color:#4D7A97;\n"
- + " height:16px;\n"
+ ".overviewSummary [role=tablist] .activeTableTab, .memberSummary [role=tablist] .activeTableTab,\n"
+ + ".typeSummary [role=tablist] .activeTableTab, .packagesSummary [role=tablist] .activeTableTab {\n"
+ + " background: #F8981D;\n"
+ + " color: #253441;\n"
+ + "}",
+ ".overviewSummary [role=tablist] .tableTab, .memberSummary [role=tablist] .tableTab,\n"
+ + ".typeSummary [role=tablist] .tableTab, .packagesSummary [role=tablist] .tableTab {\n"
+ + " background: #4D7A97;\n"
+ + " color: #FFFFFF;\n"
+ "}",
// Test the formatting styles for proper content display in use and constant values pages.
".overviewSummary td.colFirst, .overviewSummary th.colFirst,\n"
@@ -146,17 +140,6 @@
+ " text-align:left;\n"
+ " padding:0px 0px 12px 10px;\n"
+ "}",
- ".memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab,\n"
- + ".packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab,\n"
- + ".overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab,\n"
- + ".typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab {\n"
- + " padding-top:0px;\n"
- + " padding-left:0px;\n"
- + " padding-right:0px;\n"
- + " background-image:none;\n"
- + " float:none;\n"
- + " display:inline;\n"
- + "}",
"@import url('resources/fonts/dejavu.css');",
".navPadding {\n"
+ " padding-top: 107px;\n"
--- a/test/langtools/jdk/javadoc/doclet/testUnnamedPackage/TestUnnamedPackage.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/jdk/javadoc/doclet/testUnnamedPackage/TestUnnamedPackage.java Wed Nov 21 13:53:17 2018 -0500
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 4904075 4774450 5015144 8043698 8196201 8203791
+ * @bug 4904075 4774450 5015144 8043698 8196201 8203791 8184205
* @summary Reference unnamed package as "Unnamed", not empty string.
* Generate a package summary for the unnamed package.
* @author jamieh
@@ -65,7 +65,7 @@
"<a href=\"package-summary.html\">");
checkOutput("allclasses-index.html", true,
- "<table class=\"typeSummary\">\n"
+ "<div class=\"typeSummary\">\n<table>\n"
+ "<caption><span>Class Summary</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Class</th>\n"
@@ -82,7 +82,7 @@
+ "</table>");
checkOutput("allpackages-index.html", true,
- "<table class=\"packagesSummary\">\n"
+ "<div class=\"packagesSummary\">\n<table>\n"
+ "<caption><span>Package Summary</span><span class=\"tabEnd\"> </span></caption>\n"
+ "<tr>\n"
+ "<th class=\"colFirst\" scope=\"col\">Package</th>\n"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/api/CrashReport.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2018, Google LLC. 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 8214071
+ * @summary Broken msg.bug diagnostics when using the compiler API
+ * @library lib
+ * @modules jdk.compiler/com.sun.tools.javac.api
+ * @build ToolTester
+ * @run main CrashReport
+ */
+
+import com.sun.source.util.JavacTask;
+import com.sun.source.util.TaskEvent;
+import com.sun.source.util.TaskListener;
+import com.sun.tools.javac.api.ClientCodeWrapper.Trusted;
+import java.io.File;
+import java.io.StringWriter;
+import java.util.List;
+
+public class CrashReport extends ToolTester {
+
+ public static void main(String[] args) {
+ new CrashReport().test();
+ }
+
+ void test() {
+ StringWriter pw = new StringWriter();
+ JavacTask task =
+ (JavacTask)
+ tool.getTask(
+ pw,
+ fm,
+ null,
+ List.of(),
+ null,
+ fm.getJavaFileObjects(new File(test_src, "CrashReport.java")));
+ task.addTaskListener(new Listener());
+ boolean ok = task.call();
+ if (ok) {
+ throw new AssertionError("expected compilation to fail");
+ }
+ String output = pw.toString();
+ if (!output.contains("An exception has occurred in the compiler")) {
+ throw new AssertionError("expected msg.bug diagnostic, got:\n" + output);
+ }
+ }
+
+ @Trusted
+ static class Listener implements TaskListener {
+ @Override
+ public void started(TaskEvent e) {
+ throw new AssertionError();
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/diags/examples/RuleCompletesNormally.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+// key: compiler.err.rule.completes.normally
+// key: compiler.note.preview.filename
+// key: compiler.note.preview.recompile
+// options: --enable-preview -source 12
+
+class RuleCompletesNormally {
+ public String convert(int i) {
+ return switch (i) {
+ default -> {}
+ };
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/diags/examples/SwitchExpressionCompletesNormally.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+// key: compiler.err.switch.expression.completes.normally
+// key: compiler.note.preview.filename
+// key: compiler.note.preview.recompile
+// options: --enable-preview -source 12
+
+class SwitchExpressionCompletesNormally {
+ public String convert(int i) {
+ return switch (i) {
+ default:
+ };
+ }
+}
--- a/test/langtools/tools/javac/expswitch/ExpSwitchNestingTest.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/tools/javac/expswitch/ExpSwitchNestingTest.java Wed Nov 21 13:53:17 2018 -0500
@@ -46,7 +46,7 @@
private static final String ESWITCH_S = "String res_string = switch (x) { case 0 -> { # } default -> \"default\"; };";
private static final String INT_FN_ESWITCH = "java.util.function.IntSupplier r = switch (x) { case 0 -> { # } default -> null; };";
private static final String INT_ESWITCH_DEFAULT = "int res = switch (x) { default -> { # } };";
- private static final String IF = "if (cond) { # }";
+ private static final String IF = "if (cond) { # } else throw new RuntimeException();";
private static final String BLOCK = "{ # }";
private static final String BREAK_Z = "break 0;";
private static final String BREAK_S = "break \"hello world\";";
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/lambda/methodReference/MethodRefStuck2.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2018, Google LLC. 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 8213908
+ * @summary AssertionError in DeferredAttr at setOverloadKind
+ * @compile MethodRefStuck2.java
+ */
+
+import java.util.Optional;
+import java.util.stream.Stream;
+
+public abstract class MethodRefStuck2 {
+
+ abstract void f(long c);
+
+ interface I {
+ I g(String o);
+ }
+
+ private void test(Stream<I> is, Optional<String> o) {
+ f(
+ is.map(
+ i -> {
+ o.ifPresent(i::g);
+ return null;
+ })
+ .count());
+ }
+}
--- a/test/langtools/tools/javac/parser/JavacParserTest.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/langtools/tools/javac/parser/JavacParserTest.java Wed Nov 21 13:53:17 2018 -0500
@@ -1041,6 +1041,28 @@
assertEquals("the error message is not correct, actual: " + actualErrors, expectedErrors, actualErrors);
}
+ @Test //JDK-821742
+ void testCompDeclVarType() throws IOException {
+ String code = "package test; public class Test {"
+ + "private void test() {"
+ + "var v1 = 10,v2 = 12;"
+ + "} private Test() {}}";
+
+ JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, fm, null,
+ null, null, Arrays.asList(new MyFileObject(code)));
+ CompilationUnitTree cut = ct.parse().iterator().next();
+ ct.enter();
+ ct.analyze();
+ ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
+ MethodTree method = (MethodTree) clazz.getMembers().get(0);
+ VariableTree stmt1 = (VariableTree) method.getBody().getStatements().get(0);
+ VariableTree stmt2 = (VariableTree) method.getBody().getStatements().get(1);
+ Tree v1Type = stmt1.getType();
+ Tree v2Type = stmt2.getType();
+ assertEquals("Implicit type for v1 is not correct: ", Kind.PRIMITIVE_TYPE, v1Type.getKind());
+ assertEquals("Implicit type for v2 is not correct: ", Kind.PRIMITIVE_TYPE, v2Type.getKind());
+ }
+
@Test
void testCaseBodyStatements() throws IOException {
String code = "class C {" +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchFlow.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,66 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8212982
+ * @summary Verify a compile-time error is produced if switch expression does not provide a value
+ * @compile/fail/ref=ExpressionSwitchFlow.out --enable-preview -source 12 -XDrawDiagnostics ExpressionSwitchFlow.java
+ */
+
+public class ExpressionSwitchFlow {
+ private String test1(int i) {
+ return switch (i) {
+ case 0 -> {}
+ default -> { break "other"; }
+ };
+ }
+ private String test2(int i) {
+ return switch (i) {
+ case 0 -> {
+ }
+ default -> "other";
+ };
+ }
+ private String test3(int i) {
+ return switch (i) {
+ case 0 -> {}
+ default -> throw new IllegalStateException();
+ };
+ }
+ private String test4(int i) {
+ return switch (i) {
+ case 0 -> { break "other"; }
+ default -> {}
+ };
+ }
+ private String test5(int i) {
+ return switch (i) {
+ case 0 -> "other";
+ default -> {}
+ };
+ }
+ private String test6(int i) {
+ return switch (i) {
+ case 0 -> throw new IllegalStateException();
+ default -> {}
+ };
+ }
+ private String test7(int i) {
+ return switch (i) {
+ case 0: throw new IllegalStateException();
+ default:
+ };
+ }
+ private String test8(int i) {
+ return switch (i) {
+ case 0: i++;
+ default: {
+ }
+ };
+ }
+ private String test9(int i) {
+ return switch (i) {
+ case 0:
+ default:
+ System.err.println();
+ };
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/tools/javac/switchexpr/ExpressionSwitchFlow.out Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,12 @@
+ExpressionSwitchFlow.java:11:24: compiler.err.rule.completes.normally
+ExpressionSwitchFlow.java:18:13: compiler.err.rule.completes.normally
+ExpressionSwitchFlow.java:24:24: compiler.err.rule.completes.normally
+ExpressionSwitchFlow.java:31:25: compiler.err.rule.completes.normally
+ExpressionSwitchFlow.java:37:25: compiler.err.rule.completes.normally
+ExpressionSwitchFlow.java:43:25: compiler.err.rule.completes.normally
+ExpressionSwitchFlow.java:50:9: compiler.err.switch.expression.completes.normally
+ExpressionSwitchFlow.java:57:9: compiler.err.switch.expression.completes.normally
+ExpressionSwitchFlow.java:64:9: compiler.err.switch.expression.completes.normally
+- compiler.note.preview.filename: ExpressionSwitchFlow.java
+- compiler.note.preview.recompile
+9 errors
--- a/test/lib/jdk/test/lib/cds/CDSOptions.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/lib/jdk/test/lib/cds/CDSOptions.java Wed Nov 21 13:53:17 2018 -0500
@@ -33,6 +33,9 @@
public ArrayList<String> suffix = new ArrayList<String>();
public boolean useSystemArchive = false;
+ // classes to be archived
+ public String[] classList;
+
// Indicate whether to append "-version" when using CDS Archive.
// Most of tests will use '-version'
public boolean useVersion = true;
@@ -74,4 +77,16 @@
this.useSystemArchive = use;
return this;
}
+
+ public CDSOptions setClassList(String[] list) {
+ this.classList = list;
+ return this;
+ }
+ public CDSOptions setClassList(ArrayList<String> list) {
+ String array[] = new String[list.size()];
+ list.toArray(array);
+ this.classList = array;
+ return this;
+ }
+
}
--- a/test/lib/jdk/test/lib/cds/CDSTestUtils.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/lib/jdk/test/lib/cds/CDSTestUtils.java Wed Nov 21 13:53:17 2018 -0500
@@ -248,6 +248,11 @@
opts.archiveName = getDefaultArchiveName();
cmd.add("-XX:SharedArchiveFile=./" + opts.archiveName);
+ if (opts.classList != null) {
+ File classListFile = makeClassList(opts.classList);
+ cmd.add("-XX:ExtraSharedClassListFile=" + classListFile.getPath());
+ }
+
for (String s : opts.suffix) cmd.add(s);
String[] cmdLine = cmd.toArray(new String[cmd.size()]);
--- a/test/lib/jdk/test/lib/jfr/EventNames.java Wed Nov 21 13:20:52 2018 -0500
+++ b/test/lib/jdk/test/lib/jfr/EventNames.java Wed Nov 21 13:53:17 2018 -0500
@@ -169,6 +169,10 @@
public final static String JavaErrorThrow = PREFIX + "JavaErrorThrow";
public final static String ModuleRequire = PREFIX + "ModuleRequire";
public final static String ModuleExport = PREFIX + "ModuleExport";
+ public final static String TLSHandshake = PREFIX + "TLSHandshake";
+ public final static String X509Certificate = PREFIX + "X509Certificate";
+ public final static String X509Validation = PREFIX + "X509Validation";
+ public final static String SecurityProperty = PREFIX + "SecurityPropertyModification";
// Flight Recorder
public final static String DumpReason = PREFIX + "DumpReason";
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/lib/jdk/test/lib/security/JDKSecurityProperties.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2018, 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 jdk.test.lib.security;
+
+import java.util.List;
+import java.security.Security;
+
+public final class JDKSecurityProperties {
+
+ public static final List<String> jdkProps = List.of(
+ "com.sun.CORBA.ORBIorTypeCheckRegistryFilter",
+ "crypto.policy",
+ "jceks.key.serialFilter",
+ "jdk.certpath.disabledAlgorithms",
+ "keystore.type",
+ "krb5.kdc.bad.policy",
+ "login.config",
+ "networkaddress.cache.ttl",
+ "ocsp.responderURL",
+ "package.access",
+ "policy.allowSystemProperty",
+ "securerandom.drbg.config",
+ "security.provider.1",
+ "ssl.KeyManagerFactory.algorithm",
+ "sun.rmi.registry.registryFilter"
+ );
+
+ public static List getKeys() {
+ return jdkProps;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/lib/jdk/test/lib/security/SSLSocketTest.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,891 @@
+/*
+ * Copyright (c) 2016, 2018, 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 jdk.test.lib.security;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManagerFactory;
+import java.net.InetSocketAddress;
+import java.net.SocketTimeoutException;
+import java.security.KeyStore;
+import java.security.PrivateKey;
+import java.security.KeyFactory;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateFactory;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.util.Base64;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Template to help speed up your client/server tests.
+ *
+ * Two examples that use this template:
+ * test/sun/security/ssl/ServerHandshaker/AnonCipherWithWantClientAuth.java
+ * test/sun/net/www/protocol/https/HttpsClient/ServerIdentityTest.java
+ */
+public abstract class SSLSocketTest {
+
+ /*
+ * Run the test case.
+ */
+ public void run() throws Exception {
+ bootup();
+ }
+
+ /*
+ * Define the server side application of the test for the specified socket.
+ */
+ protected abstract void runServerApplication(SSLSocket socket) throws Exception;
+
+ /*
+ * Define the client side application of the test for the specified socket.
+ * This method is used if the returned value of
+ * isCustomizedClientConnection() is false.
+ *
+ * @param socket may be null is no client socket is generated.
+ *
+ * @see #isCustomizedClientConnection()
+ */
+ protected abstract void runClientApplication(SSLSocket socket) throws Exception;
+
+ /*
+ * Define the client side application of the test for the specified
+ * server port. This method is used if the returned value of
+ * isCustomizedClientConnection() is true.
+ *
+ * Note that the client need to connect to the server port by itself
+ * for the actual message exchange.
+ *
+ * @see #isCustomizedClientConnection()
+ */
+ protected void runClientApplication(int serverPort) throws Exception {
+ // blank
+ }
+
+ /*
+ * Create an instance of SSLContext for client use.
+ */
+ protected SSLContext createClientSSLContext() throws Exception {
+ return createSSLContext(trustedCertStrs,
+ endEntityCertStrs, endEntityPrivateKeys,
+ endEntityPrivateKeyAlgs,
+ endEntityPrivateKeyNames,
+ getClientContextParameters());
+ }
+
+ /*
+ * Create an instance of SSLContext for server use.
+ */
+ protected SSLContext createServerSSLContext() throws Exception {
+ return createSSLContext(trustedCertStrs,
+ endEntityCertStrs, endEntityPrivateKeys,
+ endEntityPrivateKeyAlgs,
+ endEntityPrivateKeyNames,
+ getServerContextParameters());
+ }
+
+ /*
+ * The parameters used to configure SSLContext.
+ */
+ protected static final class ContextParameters {
+ final String contextProtocol;
+ final String tmAlgorithm;
+ final String kmAlgorithm;
+
+ ContextParameters(String contextProtocol,
+ String tmAlgorithm, String kmAlgorithm) {
+
+ this.contextProtocol = contextProtocol;
+ this.tmAlgorithm = tmAlgorithm;
+ this.kmAlgorithm = kmAlgorithm;
+ }
+ }
+
+ /*
+ * Get the client side parameters of SSLContext.
+ */
+ protected ContextParameters getClientContextParameters() {
+ return new ContextParameters("TLS", "PKIX", "NewSunX509");
+ }
+
+ /*
+ * Get the server side parameters of SSLContext.
+ */
+ protected ContextParameters getServerContextParameters() {
+ return new ContextParameters("TLS", "PKIX", "NewSunX509");
+ }
+
+ /*
+ * Does the client side use customized connection other than
+ * explicit Socket.connect(), for example, URL.openConnection()?
+ */
+ protected boolean isCustomizedClientConnection() {
+ return false;
+ }
+
+ /*
+ * Configure the server side socket.
+ */
+ protected void configureServerSocket(SSLServerSocket socket) {
+
+ }
+
+ /*
+ * =============================================
+ * Define the client and server side operations.
+ *
+ * If the client or server is doing some kind of object creation
+ * that the other side depends on, and that thread prematurely
+ * exits, you may experience a hang. The test harness will
+ * terminate all hung threads after its timeout has expired,
+ * currently 3 minutes by default, but you might try to be
+ * smart about it....
+ */
+
+ /*
+ * Is the server ready to serve?
+ */
+ private final CountDownLatch serverCondition = new CountDownLatch(1);
+
+ /*
+ * Is the client ready to handshake?
+ */
+ private final CountDownLatch clientCondition = new CountDownLatch(1);
+
+ /*
+ * What's the server port? Use any free port by default
+ */
+ private volatile int serverPort = 0;
+
+ /*
+ * Define the server side of the test.
+ */
+ private void doServerSide() throws Exception {
+ // kick start the server side service
+ SSLContext context = createServerSSLContext();
+ SSLServerSocketFactory sslssf = context.getServerSocketFactory();
+ SSLServerSocket sslServerSocket =
+ (SSLServerSocket)sslssf.createServerSocket(serverPort);
+ configureServerSocket(sslServerSocket);
+ serverPort = sslServerSocket.getLocalPort();
+
+ // Signal the client, the server is ready to accept connection.
+ serverCondition.countDown();
+
+ // Try to accept a connection in 30 seconds.
+ SSLSocket sslSocket;
+ try {
+ sslServerSocket.setSoTimeout(30000);
+ sslSocket = (SSLSocket)sslServerSocket.accept();
+ } catch (SocketTimeoutException ste) {
+ // Ignore the test case if no connection within 30 seconds.
+ System.out.println(
+ "No incoming client connection in 30 seconds. " +
+ "Ignore in server side.");
+ return;
+ } finally {
+ sslServerSocket.close();
+ }
+
+ // handle the connection
+ try {
+ // Is it the expected client connection?
+ //
+ // Naughty test cases or third party routines may try to
+ // connection to this server port unintentionally. In
+ // order to mitigate the impact of unexpected client
+ // connections and avoid intermittent failure, it should
+ // be checked that the accepted connection is really linked
+ // to the expected client.
+ boolean clientIsReady =
+ clientCondition.await(30L, TimeUnit.SECONDS);
+
+ if (clientIsReady) {
+ // Run the application in server side.
+ runServerApplication(sslSocket);
+ } else { // Otherwise, ignore
+ // We don't actually care about plain socket connections
+ // for TLS communication testing generally. Just ignore
+ // the test if the accepted connection is not linked to
+ // the expected client or the client connection timeout
+ // in 30 seconds.
+ System.out.println(
+ "The client is not the expected one or timeout. " +
+ "Ignore in server side.");
+ }
+ } finally {
+ sslSocket.close();
+ }
+ }
+
+ /*
+ * Define the client side of the test.
+ */
+ private void doClientSide() throws Exception {
+
+ // Wait for server to get started.
+ //
+ // The server side takes care of the issue if the server cannot
+ // get started in 90 seconds. The client side would just ignore
+ // the test case if the serer is not ready.
+ boolean serverIsReady =
+ serverCondition.await(90L, TimeUnit.SECONDS);
+ if (!serverIsReady) {
+ System.out.println(
+ "The server is not ready yet in 90 seconds. " +
+ "Ignore in client side.");
+ return;
+ }
+
+ if (isCustomizedClientConnection()) {
+ // Signal the server, the client is ready to communicate.
+ clientCondition.countDown();
+
+ // Run the application in client side.
+ runClientApplication(serverPort);
+
+ return;
+ }
+
+ SSLContext context = createClientSSLContext();
+ SSLSocketFactory sslsf = context.getSocketFactory();
+
+ try (SSLSocket sslSocket = (SSLSocket)sslsf.createSocket()) {
+ try {
+ sslSocket.connect(
+ new InetSocketAddress("localhost", serverPort), 15000);
+ } catch (IOException ioe) {
+ // The server side may be impacted by naughty test cases or
+ // third party routines, and cannot accept connections.
+ //
+ // Just ignore the test if the connection cannot be
+ // established.
+ System.out.println(
+ "Cannot make a connection in 15 seconds. " +
+ "Ignore in client side.");
+ return;
+ }
+
+ // OK, here the client and server get connected.
+
+ // Signal the server, the client is ready to communicate.
+ clientCondition.countDown();
+
+ // There is still a chance in theory that the server thread may
+ // wait client-ready timeout and then quit. The chance should
+ // be really rare so we don't consider it until it becomes a
+ // real problem.
+
+ // Run the application in client side.
+ runClientApplication(sslSocket);
+ }
+ }
+
+ /*
+ * =============================================
+ * Stuffs to customize the SSLContext instances.
+ */
+
+ /*
+ * =======================================
+ * Certificates and keys used in the test.
+ */
+ // Trusted certificates.
+ private final static String[] trustedCertStrs = {
+ // SHA256withECDSA, curve prime256v1
+ // Validity
+ // Not Before: May 22 07:18:16 2018 GMT
+ // Not After : May 17 07:18:16 2038 GMT
+ // Subject Key Identifier:
+ // 60:CF:BD:73:FF:FA:1A:30:D2:A4:EC:D3:49:71:46:EF:1A:35:A0:86
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIBvjCCAWOgAwIBAgIJAIvFG6GbTroCMAoGCCqGSM49BAMCMDsxCzAJBgNVBAYT\n" +
+ "AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
+ "ZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMDsxCzAJBgNVBAYTAlVT\n" +
+ "MQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZjZTBZ\n" +
+ "MBMGByqGSM49AgEGCCqGSM49AwEHA0IABBz1WeVb6gM2mh85z3QlvaB/l11b5h0v\n" +
+ "LIzmkC3DKlVukZT+ltH2Eq1oEkpXuf7QmbM0ibrUgtjsWH3mULfmcWmjUDBOMB0G\n" +
+ "A1UdDgQWBBRgz71z//oaMNKk7NNJcUbvGjWghjAfBgNVHSMEGDAWgBRgz71z//oa\n" +
+ "MNKk7NNJcUbvGjWghjAMBgNVHRMEBTADAQH/MAoGCCqGSM49BAMCA0kAMEYCIQCG\n" +
+ "6wluh1r2/T6L31mZXRKf9JxeSf9pIzoLj+8xQeUChQIhAJ09wAi1kV8yePLh2FD9\n" +
+ "2YEHlSQUAbwwqCDEVB5KxaqP\n" +
+ "-----END CERTIFICATE-----",
+ // -----BEGIN PRIVATE KEY-----
+ // MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg/HcHdoLJCdq3haVd
+ // XZTSKP00YzM3xX97l98vGL/RI1KhRANCAAQc9VnlW+oDNpofOc90Jb2gf5ddW+Yd
+ // LyyM5pAtwypVbpGU/pbR9hKtaBJKV7n+0JmzNIm61ILY7Fh95lC35nFp
+ // -----END PRIVATE KEY-----
+
+ // SHA256withRSA, 2048 bits
+ // Validity
+ // Not Before: May 22 07:18:16 2018 GMT
+ // Not After : May 17 07:18:16 2038 GMT
+ // Subject Key Identifier:
+ // 0D:DD:93:C9:FE:4B:BD:35:B7:E8:99:78:90:FB:DB:5A:3D:DB:15:4C
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIDSTCCAjGgAwIBAgIJAI4ZF3iy8zG+MA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNV\n" +
+ "BAYTAlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2Vy\n" +
+ "aXZjZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMDsxCzAJBgNVBAYT\n" +
+ "AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
+ "ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALpMcY7aWieXDEM1/YJf\n" +
+ "JW27b4nRIFZyEYhEloyGsKTuQiiQjc8cqRZFNXe2vwziDB4IyTEl0Hjl5QF6ZaQE\n" +
+ "huPzzwvQm1pv64KrRXrmj3FisQK8B5OWLty9xp6xDqsaMRoyObLK+oIb20T5fSlE\n" +
+ "evmo1vYjnh8CX0Yzx5Gr5ye6YSEHQvYOWEws8ad17OlyToR2KMeC8w4qo6rs59pW\n" +
+ "g7Mxn9vo22ImDzrtAbTbXbCias3xlE0Bp0h5luyf+5U4UgksoL9B9r2oP4GrLNEV\n" +
+ "oJk57t8lwaR0upiv3CnS8LcJELpegZub5ggqLY8ZPYFQPjlK6IzLOm6rXPgZiZ3m\n" +
+ "RL0CAwEAAaNQME4wHQYDVR0OBBYEFA3dk8n+S701t+iZeJD721o92xVMMB8GA1Ud\n" +
+ "IwQYMBaAFA3dk8n+S701t+iZeJD721o92xVMMAwGA1UdEwQFMAMBAf8wDQYJKoZI\n" +
+ "hvcNAQELBQADggEBAJTRC3rKUUhVH07/1+stUungSYgpM08dY4utJq0BDk36BbmO\n" +
+ "0AnLDMbkwFdHEoqF6hQIfpm7SQTmXk0Fss6Eejm8ynYr6+EXiRAsaXOGOBCzF918\n" +
+ "/RuKOzqABfgSU4UBKECLM5bMfQTL60qx+HdbdVIpnikHZOFfmjCDVxoHsGyXc1LW\n" +
+ "Jhkht8IGOgc4PMGvyzTtRFjz01kvrVQZ75aN2E0GQv6dCxaEY0i3ypSzjUWAKqDh\n" +
+ "3e2OLwUSvumcdaxyCdZAOUsN6pDBQ+8VRG7KxnlRlY1SMEk46QgQYLbPDe/+W/yH\n" +
+ "ca4PejicPeh+9xRAwoTpiE2gulfT7Lm+fVM7Ruc=\n" +
+ "-----END CERTIFICATE-----",
+ // -----BEGIN PRIVATE KEY-----
+ // MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC6THGO2lonlwxD
+ // Nf2CXyVtu2+J0SBWchGIRJaMhrCk7kIokI3PHKkWRTV3tr8M4gweCMkxJdB45eUB
+ // emWkBIbj888L0Jtab+uCq0V65o9xYrECvAeTli7cvcaesQ6rGjEaMjmyyvqCG9tE
+ // +X0pRHr5qNb2I54fAl9GM8eRq+cnumEhB0L2DlhMLPGndezpck6EdijHgvMOKqOq
+ // 7OfaVoOzMZ/b6NtiJg867QG0212womrN8ZRNAadIeZbsn/uVOFIJLKC/Qfa9qD+B
+ // qyzRFaCZOe7fJcGkdLqYr9wp0vC3CRC6XoGbm+YIKi2PGT2BUD45SuiMyzpuq1z4
+ // GYmd5kS9AgMBAAECggEAFHSoU2MuWwJ+2jJnb5U66t2V1bAcuOE1g5zkWvG/G5z9
+ // rq6Qo5kmB8f5ovdx6tw3MGUOklLwnRXBG3RxDJ1iokz3AvkY1clMNsDPlDsUrQKF
+ // JSO4QUBQTPSZhnsyfR8XHSU+qJ8Y+ohMfzpVv95BEoCzebtXdVgxVegBlcEmVHo2
+ // kMmkRN+bYNsr8eb2r+b0EpyumS39ZgKYh09+cFb78y3T6IFMGcVJTP6nlGBFkmA/
+ // 25pYeCF2tSki08qtMJZQAvKfw0Kviibk7ZxRbJqmc7B1yfnOEHP6ftjuvKl2+RP/
+ // +5P5f8CfIP6gtA0LwSzAqQX/hfIKrGV5j0pCqrD0kQKBgQDeNR6Xi4sXVq79lihO
+ // a1bSeV7r8yoQrS8x951uO+ox+UIZ1MsAULadl7zB/P0er92p198I9M/0Jth3KBuS
+ // zj45mucvpiiGvmQlMKMEfNq4nN7WHOu55kufPswQB2mR4J3xmwI+4fM/nl1zc82h
+ // De8JSazRldJXNhfx0RGFPmgzbwKBgQDWoVXrXLbCAn41oVnWB8vwY9wjt92ztDqJ
+ // HMFA/SUohjePep9UDq6ooHyAf/Lz6oE5NgeVpPfTDkgvrCFVKnaWdwALbYoKXT2W
+ // 9FlyJox6eQzrtHAacj3HJooXWuXlphKSizntfxj3LtMR9BmrmRJOfK+SxNOVJzW2
+ // +MowT20EkwKBgHmpB8jdZBgxI7o//m2BI5Y1UZ1KE5vx1kc7VXzHXSBjYqeV9FeF
+ // 2ZZLP9POWh/1Fh4pzTmwIDODGT2UPhSQy0zq3O0fwkyT7WzXRknsuiwd53u/dejg
+ // iEL2NPAJvulZ2+AuiHo5Z99LK8tMeidV46xoJDDUIMgTG+UQHNGhK5gNAoGAZn/S
+ // Cn7SgMC0CWSvBHnguULXZO9wH1wZAFYNLL44OqwuaIUFBh2k578M9kkke7woTmwx
+ // HxQTjmWpr6qimIuY6q6WBN8hJ2Xz/d1fwhYKzIp20zHuv5KDUlJjbFfqpsuy3u1C
+ // kts5zwI7pr1ObRbDGVyOdKcu7HI3QtR5qqyjwaUCgYABo7Wq6oHva/9V34+G3Goh
+ // 63bYGUnRw2l5BD11yhQv8XzGGZFqZVincD8gltNThB0Dc/BI+qu3ky4YdgdZJZ7K
+ // z51GQGtaHEbrHS5caV79yQ8QGY5mUVH3E+VXSxuIqb6pZq2DH4sTAEFHyncddmOH
+ // zoXBInYwRG9KE/Bw5elhUw==
+ // -----END PRIVATE KEY-----
+
+ // SHA256withDSA, 2048 bits
+ // Validity
+ // Not Before: May 22 07:18:18 2018 GMT
+ // Not After : May 17 07:18:18 2038 GMT
+ // Subject Key Identifier:
+ // 76:66:9E:F7:3B:DD:45:E5:3B:D9:72:3C:3F:F0:54:39:86:31:26:53
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIErjCCBFSgAwIBAgIJAOktYLNCbr02MAsGCWCGSAFlAwQDAjA7MQswCQYDVQQG\n" +
+ "EwJVUzENMAsGA1UECgwESmF2YTEdMBsGA1UECwwUU3VuSlNTRSBUZXN0IFNlcml2\n" +
+ "Y2UwHhcNMTgwNTIyMDcxODE4WhcNMzgwNTE3MDcxODE4WjA7MQswCQYDVQQGEwJV\n" +
+ "UzENMAsGA1UECgwESmF2YTEdMBsGA1UECwwUU3VuSlNTRSBUZXN0IFNlcml2Y2Uw\n" +
+ "ggNHMIICOQYHKoZIzjgEATCCAiwCggEBAO5GyPhSm0ze3LSu+gicdULLj05iOfTL\n" +
+ "UvZQ29sYz41zmqrLBQbdKiHqgJu2Re9sgTb5suLNjF047TOLPnU3jhPtWm2X8Xzi\n" +
+ "VGIcHym/Q/MeZxStt/88seqroI3WOKzIML2GcrishT+lcGrtH36Tf1+ue2Snn3PS\n" +
+ "WyxygNqPjllP5uUjYmFLvAf4QLMldkd/D2VxcwsHjB8y5iUZsXezc/LEhRZS/02m\n" +
+ "ivqlRw3AMkq/OVe/ZtxFWsP0nsfxEGdZuaUFpppGfixxFvymrB3+J51cTt+pZBDq\n" +
+ "D2y0DYfc+88iCs4jwHTfcDIpLb538HBjBj2rEgtQESQmB0ooD/+wsPsCIQC1bYch\n" +
+ "gElNtDYL3FgpLgNSUYp7gIWv9ehaC7LO2z7biQKCAQBitvFOnDkUja8NAF7lDpOV\n" +
+ "b5ipQ8SicBLW3kQamxhyuyxgZyy/PojZ/oPorkqW/T/A0rhnG6MssEpAtdiwVB+c\n" +
+ "rBYGo3bcwmExJhdOJ6dYuKFppPWhCwKMHs9npK+lqBMl8l5j58xlcFeC7ZfGf8GY\n" +
+ "GkhFW0c44vEQhMMbac6ZTTP4mw+1t7xJfmDMlLEyIpTXaAAk8uoVLWzQWnR40sHi\n" +
+ "ybvS0u3JxQkb7/y8tOOZu8qlz/YOS7lQ6UxUGX27Ce1E0+agfPphetoRAlS1cezq\n" +
+ "Wa7r64Ga0nkj1kwkcRqjgTiJx0NwnUXr78VAXFhVF95+O3lfqhvdtEGtkhDGPg7N\n" +
+ "A4IBBgACggEBAMmSHQK0w2i+iqUjOPzn0yNEZrzepLlLeQ1tqtn0xnlv5vBAeefD\n" +
+ "Pm9dd3tZOjufVWP7hhEz8xPobb1CS4e3vuQiv5UBfhdPL3f3l9T7JMAKPH6C9Vve\n" +
+ "OQXE5eGqbjsySbcmseHoYUt1WCSnSda1opX8zchX04e7DhGfE2/L9flpYEoSt8lI\n" +
+ "vMNjgOwvKdW3yvPt1/eBBHYNFG5gWPv/Q5KoyCtHS03uqGm4rNc/wZTIEEfd66C+\n" +
+ "QRaUltjOaHmtwOdDHaNqwhYZSVOip+Mo+TfyzHFREcdHLapo7ZXqbdYkRGxRR3d+\n" +
+ "3DfHaraJO0OKoYlPkr3JMvM/MSGR9AnZOcejUDBOMB0GA1UdDgQWBBR2Zp73O91F\n" +
+ "5TvZcjw/8FQ5hjEmUzAfBgNVHSMEGDAWgBR2Zp73O91F5TvZcjw/8FQ5hjEmUzAM\n" +
+ "BgNVHRMEBTADAQH/MAsGCWCGSAFlAwQDAgNHADBEAiBzriYE41M2y9Hy5ppkL0Qn\n" +
+ "dIlNc8JhXT/PHW7GDtViagIgMko8Qoj9gDGPK3+O9E8DC3wGiiF9CObM4LN387ok\n" +
+ "J+g=\n" +
+ "-----END CERTIFICATE-----"
+ // -----BEGIN PRIVATE KEY-----
+ // MIICZQIBADCCAjkGByqGSM44BAEwggIsAoIBAQDuRsj4UptM3ty0rvoInHVCy49O
+ // Yjn0y1L2UNvbGM+Nc5qqywUG3Soh6oCbtkXvbIE2+bLizYxdOO0ziz51N44T7Vpt
+ // l/F84lRiHB8pv0PzHmcUrbf/PLHqq6CN1jisyDC9hnK4rIU/pXBq7R9+k39frntk
+ // p59z0lsscoDaj45ZT+blI2JhS7wH+ECzJXZHfw9lcXMLB4wfMuYlGbF3s3PyxIUW
+ // Uv9Npor6pUcNwDJKvzlXv2bcRVrD9J7H8RBnWbmlBaaaRn4scRb8pqwd/iedXE7f
+ // qWQQ6g9stA2H3PvPIgrOI8B033AyKS2+d/BwYwY9qxILUBEkJgdKKA//sLD7AiEA
+ // tW2HIYBJTbQ2C9xYKS4DUlGKe4CFr/XoWguyzts+24kCggEAYrbxTpw5FI2vDQBe
+ // 5Q6TlW+YqUPEonAS1t5EGpsYcrssYGcsvz6I2f6D6K5Klv0/wNK4ZxujLLBKQLXY
+ // sFQfnKwWBqN23MJhMSYXTienWLihaaT1oQsCjB7PZ6SvpagTJfJeY+fMZXBXgu2X
+ // xn/BmBpIRVtHOOLxEITDG2nOmU0z+JsPtbe8SX5gzJSxMiKU12gAJPLqFS1s0Fp0
+ // eNLB4sm70tLtycUJG+/8vLTjmbvKpc/2Dku5UOlMVBl9uwntRNPmoHz6YXraEQJU
+ // tXHs6lmu6+uBmtJ5I9ZMJHEao4E4icdDcJ1F6+/FQFxYVRfefjt5X6ob3bRBrZIQ
+ // xj4OzQQjAiEAsceWOM8do4etxp2zgnoNXV8PUUyqWhz1+0srcKV7FR4=
+ // -----END PRIVATE KEY-----
+ };
+
+ // End entity certificate.
+ private final static String[] endEntityCertStrs = {
+ // SHA256withECDSA, curve prime256v1
+ // Validity
+ // Not Before: May 22 07:18:16 2018 GMT
+ // Not After : May 17 07:18:16 2038 GMT
+ // Authority Key Identifier:
+ // 60:CF:BD:73:FF:FA:1A:30:D2:A4:EC:D3:49:71:46:EF:1A:35:A0:86
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIBqjCCAVCgAwIBAgIJAPLY8qZjgNRAMAoGCCqGSM49BAMCMDsxCzAJBgNVBAYT\n" +
+ "AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
+ "ZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMFUxCzAJBgNVBAYTAlVT\n" +
+ "MQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZjZTEY\n" +
+ "MBYGA1UEAwwPUmVncmVzc2lvbiBUZXN0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD\n" +
+ "QgAEb+9n05qfXnfHUb0xtQJNS4JeSi6IjOfW5NqchvKnfJey9VkJzR7QHLuOESdf\n" +
+ "xlR7q8YIWgih3iWLGfB+wxHiOqMjMCEwHwYDVR0jBBgwFoAUYM+9c//6GjDSpOzT\n" +
+ "SXFG7xo1oIYwCgYIKoZIzj0EAwIDSAAwRQIgWpRegWXMheiD3qFdd8kMdrkLxRbq\n" +
+ "1zj8nQMEwFTUjjQCIQDRIrAjZX+YXHN9b0SoWWLPUq0HmiFIi8RwMnO//wJIGQ==\n" +
+ "-----END CERTIFICATE-----",
+
+ // SHA256withRSA, 2048 bits
+ // Validity
+ // Not Before: May 22 07:18:16 2018 GMT
+ // Not After : May 17 07:18:16 2038 GMT
+ // Authority Key Identifier:
+ // 0D:DD:93:C9:FE:4B:BD:35:B7:E8:99:78:90:FB:DB:5A:3D:DB:15:4C
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIDNjCCAh6gAwIBAgIJAO2+yPcFryUTMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNV\n" +
+ "BAYTAlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2Vy\n" +
+ "aXZjZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMFUxCzAJBgNVBAYT\n" +
+ "AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
+ "ZTEYMBYGA1UEAwwPUmVncmVzc2lvbiBUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOC\n" +
+ "AQ8AMIIBCgKCAQEAszfBobWfZIp8AgC6PiWDDavP65mSvgCXUGxACbxVNAfkLhNR\n" +
+ "QOsHriRB3X1Q3nvO9PetC6wKlvE9jlnDDj7D+1j1r1CHO7ms1fq8rfcQYdkanDtu\n" +
+ "4AlHo8v+SSWX16MIXFRYDj2VVHmyPtgbltcg4zGAuwT746FdLI94uXjJjq1IOr/v\n" +
+ "0VIlwE5ORWH5Xc+5Tj+oFWK0E4a4GHDgtKKhn2m72hN56/GkPKGkguP5NRS1qYYV\n" +
+ "/EFkdyQMOV8J1M7HaicSft4OL6eKjTrgo93+kHk+tv0Dc6cpVBnalX3TorG8QI6B\n" +
+ "cHj1XQd78oAlAC+/jF4pc0mwi0un49kdK9gRfQIDAQABoyMwITAfBgNVHSMEGDAW\n" +
+ "gBQN3ZPJ/ku9NbfomXiQ+9taPdsVTDANBgkqhkiG9w0BAQsFAAOCAQEApXS0nKwm\n" +
+ "Kp8gpmO2yG1rpd1+2wBABiMU4JZaTqmma24DQ3RzyS+V2TeRb29dl5oTUEm98uc0\n" +
+ "GPZvhK8z5RFr4YE17dc04nI/VaNDCw4y1NALXGs+AHkjoPjLyGbWpi1S+gfq2sNB\n" +
+ "Ekkjp6COb/cb9yiFXOGVls7UOIjnVZVd0r7KaPFjZhYh82/f4PA/A1SnIKd1+nfH\n" +
+ "2yk7mSJNC7Z3qIVDL8MM/jBVwiC3uNe5GPB2uwhd7k5LGAVN3j4HQQGB0Sz+VC1h\n" +
+ "92oi6xDa+YBva2fvHuCd8P50DDjxmp9CemC7rnZ5j8egj88w14X44Xjb/Fd/ApG9\n" +
+ "e57NnbT7KM+Grw==\n" +
+ "-----END CERTIFICATE-----",
+
+ // SHA256withRSA, curv prime256v1
+ // Validity
+ // Not Before: May 22 07:18:16 2018 GMT
+ // Not After : May 21 07:18:16 2028 GMT
+ // Authority Key Identifier:
+ // 0D:DD:93:C9:FE:4B:BD:35:B7:E8:99:78:90:FB:DB:5A:3D:DB:15:4C
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIICazCCAVOgAwIBAgIJAO2+yPcFryUUMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNV\n" +
+ "BAYTAlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2Vy\n" +
+ "aXZjZTAeFw0xODA1MjIwNzE4MTZaFw0yODA1MjEwNzE4MTZaMFUxCzAJBgNVBAYT\n" +
+ "AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
+ "ZTEYMBYGA1UEAwwPUmVncmVzc2lvbiBUZXN0MFkwEwYHKoZIzj0CAQYIKoZIzj0D\n" +
+ "AQcDQgAE59MERNTlVZ1eeps8Z3Oue5ZkgQdPtD+WIE6tj3PbIKpxGPDxvfNP959A\n" +
+ "yQjEK/ehWQVrCMmNoEkIzY+IIBgB06MjMCEwHwYDVR0jBBgwFoAUDd2Tyf5LvTW3\n" +
+ "6Jl4kPvbWj3bFUwwDQYJKoZIhvcNAQELBQADggEBAFOTVEqs70ykhZiIdrEsF1Ra\n" +
+ "I3B2rLvwXZk52uSltk2/bzVvewA577ZCoxQ1pL7ynkisPfBN1uVYtHjM1VA3RC+4\n" +
+ "+TAK78dnI7otYjWoHp5rvs4l6c/IbOspS290IlNuDUxMErEm5wxIwj+Aukx/1y68\n" +
+ "hOyCvHBLMY2c1LskH1MMBbDuS1aI+lnGpToi+MoYObxGcV458vxuT8+wwV8Fkpvd\n" +
+ "ll8IIFmeNPRv+1E+lXbES6CSNCVaZ/lFhPgdgYKleN7sfspiz50DG4dqafuEAaX5\n" +
+ "xaK1NWXJxTRz0ROH/IUziyuDW6jphrlgit4+3NCzp6vP9hAJQ8Vhcj0n15BKHIQ=\n" +
+ "-----END CERTIFICATE-----",
+
+ // SHA256withDSA, 2048 bits
+ // Validity
+ // Not Before: May 22 07:18:20 2018 GMT
+ // Not After : May 17 07:18:20 2038 GMT
+ // Authority Key Identifier:
+ // 76:66:9E:F7:3B:DD:45:E5:3B:D9:72:3C:3F:F0:54:39:86:31:26:53
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIEnDCCBEGgAwIBAgIJAP/jh1qVhNVjMAsGCWCGSAFlAwQDAjA7MQswCQYDVQQG\n" +
+ "EwJVUzENMAsGA1UECgwESmF2YTEdMBsGA1UECwwUU3VuSlNTRSBUZXN0IFNlcml2\n" +
+ "Y2UwHhcNMTgwNTIyMDcxODIwWhcNMzgwNTE3MDcxODIwWjBVMQswCQYDVQQGEwJV\n" +
+ "UzENMAsGA1UECgwESmF2YTEdMBsGA1UECwwUU3VuSlNTRSBUZXN0IFNlcml2Y2Ux\n" +
+ "GDAWBgNVBAMMD1JlZ3Jlc3Npb24gVGVzdDCCA0cwggI6BgcqhkjOOAQBMIICLQKC\n" +
+ "AQEAmlavgoJrMcjqWRVcDE2dmWAPREgnzQvneEDef68cprDzjSwvOs5QeFyx75ib\n" +
+ "ado1e6jO/rW1prCGWHDD1oA/Tn4Pk3vu0nUxzvl1qATc+aJbpUU5Op0bvp6LbCsQ\n" +
+ "QslV9FeRh7Eb7bP6gpc/kHCBzEgC1VCK7prccXWy+t6SMOHbND3h+UbckfSaUuaV\n" +
+ "sVJNTD1D6GElfRj4Nmz1BGPfSYvKorwNZEU3gXwFgtDoAcGx7tcyClLpDHfqRfw/\n" +
+ "7yiqLyeiP7D4hl5lMNouJWDlAdMFp0FMgS3s9VDFinIcr6VtBWMTG7+4+czHAB+3\n" +
+ "fvrwlqNzhBn3uFHrekN/w8fNxwIhAJo7Sae1za7IMW0Q6hE5B4b+s2B/FaKPoA4E\n" +
+ "jtZu13B9AoIBAQCOZqLMKfvqZWUgT0PQ3QjR7dAFdd06I9Y3+TOQzZk1+j+vw/6E\n" +
+ "X4vFItX4gihb/u5Q9CdmpwhVGi7bvo+7+/IKeTgoQ6f5+PSug7SrWWUQ5sPwaZui\n" +
+ "zXZJ5nTeZDucFc2yFx0wgnjbPwiUxZklOT7xGiOMtzOTa2koCz5KuIBL+/wPKKxm\n" +
+ "ypo9VoY9xfbdU6LMXZv/lpD5XTM9rYHr/vUTNkukvV6Hpm0YMEWhVZKUJiqCqTqG\n" +
+ "XHaleOxSw6uQWB/+TznifcC7gB48UOQjCqOKf5VuwQneJLhlhU/jhRV3xtr+hLZa\n" +
+ "hW1wYhVi8cjLDrZFKlgEQqhB4crnJU0mJY+tA4IBBQACggEAID0ezl00/X8mv7eb\n" +
+ "bzovum1+DEEP7FM57k6HZEG2N3ve4CW+0m9Cd+cWPz8wkZ+M0j/Eqa6F0IdbkXEc\n" +
+ "Q7CuzvUyJ57xQ3L/WCgXsiS+Bh8O4Mz7GwW22CGmHqafbVv+hKBfr8MkskO6GJUt\n" +
+ "SUF/CVLzB4gMIvZMH26tBP2xK+i7FeEK9kT+nGdzQSZBAhFYpEVCBplHZO24/OYq\n" +
+ "1DNoU327nUuXIhmsfA8N0PjiWbIZIjTPwBGr9H0LpATI7DIDNcvRRvtROP+pBU9y\n" +
+ "fuykPkptg9C0rCM9t06bukpOSaEz/2VIQdLE8fHYFA6pHZ6CIc2+5cfvMgTPhcjz\n" +
+ "W2jCt6MjMCEwHwYDVR0jBBgwFoAUdmae9zvdReU72XI8P/BUOYYxJlMwCwYJYIZI\n" +
+ "AWUDBAMCA0gAMEUCIQCeI5fN08b9BpOaHdc3zQNGjp24FOL/RxlBLeBAorswJgIg\n" +
+ "JEZ8DhYxQy1O7mmZ2UIT7op6epWMB4dENjs0qWPmcKo=\n" +
+ "-----END CERTIFICATE-----"
+ };
+
+ // Private key in the format of PKCS#8.
+ private final static String[] endEntityPrivateKeys = {
+ //
+ // EC private key related to cert endEntityCertStrs[0].
+ //
+ "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgn5K03bpTLjEtFQRa\n" +
+ "JUtx22gtmGEvvSUSQdimhGthdtihRANCAARv72fTmp9ed8dRvTG1Ak1Lgl5KLoiM\n" +
+ "59bk2pyG8qd8l7L1WQnNHtAcu44RJ1/GVHurxghaCKHeJYsZ8H7DEeI6",
+
+ //
+ // RSA private key related to cert endEntityCertStrs[1].
+ //
+ "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCzN8GhtZ9kinwC\n" +
+ "ALo+JYMNq8/rmZK+AJdQbEAJvFU0B+QuE1FA6weuJEHdfVDee870960LrAqW8T2O\n" +
+ "WcMOPsP7WPWvUIc7uazV+ryt9xBh2RqcO27gCUejy/5JJZfXowhcVFgOPZVUebI+\n" +
+ "2BuW1yDjMYC7BPvjoV0sj3i5eMmOrUg6v+/RUiXATk5FYfldz7lOP6gVYrQThrgY\n" +
+ "cOC0oqGfabvaE3nr8aQ8oaSC4/k1FLWphhX8QWR3JAw5XwnUzsdqJxJ+3g4vp4qN\n" +
+ "OuCj3f6QeT62/QNzpylUGdqVfdOisbxAjoFwePVdB3vygCUAL7+MXilzSbCLS6fj\n" +
+ "2R0r2BF9AgMBAAECggEASIkPkMCuw4WdTT44IwERus3IOIYOs2IP3BgEDyyvm4B6\n" +
+ "JP/iihDWKfA4zEl1Gqcni1RXMHswSglXra682J4kui02Ov+vzEeJIY37Ibn2YnP5\n" +
+ "ZjRT2s9GtI/S2o4hl8A/mQb2IMViFC+xKehTukhV4j5d6NPKk0XzLR7gcMjnYxwn\n" +
+ "l21fS6D2oM1xRG/di7sL+uLF8EXLRzfiWDNi12uQv4nwtxPKvuKhH6yzHt7YqMH0\n" +
+ "46pmDKDaxV4w1JdycjCb6NrCJOYZygoQobuZqOQ30UZoZsPJrtovkncFr1e+lNcO\n" +
+ "+aWDfOLCtTH046dEQh5oCShyXMybNlry/QHsOtHOwQKBgQDh2iIjs+FPpQy7Z3EX\n" +
+ "DGEvHYqPjrYO9an2KSRr1m9gzRlWYxKY46WmPKwjMerYtra0GP+TBHrgxsfO8tD2\n" +
+ "wUAII6sd1qup0a/Sutgf2JxVilLykd0+Ge4/Cs51tCdJ8EqDV2B6WhTewOY2EGvg\n" +
+ "JiKYkeNwgRX/9M9CFSAMAk0hUQKBgQDLJAartL3DoGUPjYtpJnfgGM23yAGl6G5r\n" +
+ "NSXDn80BiYIC1p0bG3N0xm3yAjqOtJAUj9jZbvDNbCe3GJfLARMr23legX4tRrgZ\n" +
+ "nEdKnAFKAKL01oM+A5/lHdkwaZI9yyv+hgSVdYzUjB8rDmzeVQzo1BT7vXypt2yV\n" +
+ "6O1OnUpCbQKBgA/0rzDChopv6KRcvHqaX0tK1P0rYeVQqb9ATNhpf9jg5Idb3HZ8\n" +
+ "rrk91BNwdVz2G5ZBpdynFl9G69rNAMJOCM4KZw5mmh4XOEq09Ivba8AHU7DbaTv3\n" +
+ "7QL7KnbaUWRB26HHzIMYVh0el6T+KADf8NXCiMTr+bfpfbL3dxoiF3zhAoGAbCJD\n" +
+ "Qse1dBs/cKYCHfkSOsI5T6kx52Tw0jS6Y4X/FOBjyqr/elyEexbdk8PH9Ar931Qr\n" +
+ "NKMvn8oA4iA/PRrXX7M2yi3YQrWwbkGYWYjtzrzEAdzmg+5eARKAeJrZ8/bg9l3U\n" +
+ "ttKaItJsDPlizn8rngy3FsJpR9aSAMK6/+wOiYkCgYEA1tZkI1rD1W9NYZtbI9BE\n" +
+ "qlJVFi2PBOJMKNuWdouPX3HLQ72GJSQff2BFzLTELjweVVJ0SvY4IipzpQOHQOBy\n" +
+ "5qh/p6izXJZh3IHtvwVBjHoEVplg1b2+I5e3jDCfqnwcQw82dW5SxOJMg1h/BD0I\n" +
+ "qAL3go42DYeYhu/WnECMeis=",
+
+ //
+ // EC private key related to cert endEntityCertStrs[2].
+ //
+ "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgGVc7hICpmp91jbYe\n" +
+ "nrr8nYHD37RZP3VENY+szuA7WjuhRANCAATn0wRE1OVVnV56mzxnc657lmSBB0+0\n" +
+ "P5YgTq2Pc9sgqnEY8PG980/3n0DJCMQr96FZBWsIyY2gSQjNj4ggGAHT",
+
+ //
+ // DSA private key related to cert endEntityCertStrs[3].
+ //
+ "MIICZQIBADCCAjoGByqGSM44BAEwggItAoIBAQCaVq+CgmsxyOpZFVwMTZ2ZYA9E\n" +
+ "SCfNC+d4QN5/rxymsPONLC86zlB4XLHvmJtp2jV7qM7+tbWmsIZYcMPWgD9Ofg+T\n" +
+ "e+7SdTHO+XWoBNz5olulRTk6nRu+notsKxBCyVX0V5GHsRvts/qClz+QcIHMSALV\n" +
+ "UIrumtxxdbL63pIw4ds0PeH5RtyR9JpS5pWxUk1MPUPoYSV9GPg2bPUEY99Ji8qi\n" +
+ "vA1kRTeBfAWC0OgBwbHu1zIKUukMd+pF/D/vKKovJ6I/sPiGXmUw2i4lYOUB0wWn\n" +
+ "QUyBLez1UMWKchyvpW0FYxMbv7j5zMcAH7d++vCWo3OEGfe4Uet6Q3/Dx83HAiEA\n" +
+ "mjtJp7XNrsgxbRDqETkHhv6zYH8Voo+gDgSO1m7XcH0CggEBAI5moswp++plZSBP\n" +
+ "Q9DdCNHt0AV13Toj1jf5M5DNmTX6P6/D/oRfi8Ui1fiCKFv+7lD0J2anCFUaLtu+\n" +
+ "j7v78gp5OChDp/n49K6DtKtZZRDmw/Bpm6LNdknmdN5kO5wVzbIXHTCCeNs/CJTF\n" +
+ "mSU5PvEaI4y3M5NraSgLPkq4gEv7/A8orGbKmj1Whj3F9t1Tosxdm/+WkPldMz2t\n" +
+ "gev+9RM2S6S9XoembRgwRaFVkpQmKoKpOoZcdqV47FLDq5BYH/5POeJ9wLuAHjxQ\n" +
+ "5CMKo4p/lW7BCd4kuGWFT+OFFXfG2v6EtlqFbXBiFWLxyMsOtkUqWARCqEHhyucl\n" +
+ "TSYlj60EIgIgLfA75+8KcKxdN8mr6gzGjQe7jPFGG42Ejhd7Q2F4wuw="
+ };
+
+ // Private key algorithm of endEntityPrivateKeys.
+ private final static String[] endEntityPrivateKeyAlgs = {
+ "EC",
+ "RSA",
+ "EC",
+ "DSA",
+ };
+
+ // Private key names of endEntityPrivateKeys.
+ private final static String[] endEntityPrivateKeyNames = {
+ "ecdsa",
+ "rsa",
+ "ec-rsa",
+ "dsa",
+ };
+
+ /*
+ * Create an instance of SSLContext with the specified trust/key materials.
+ */
+ private SSLContext createSSLContext(
+ String[] trustedMaterials,
+ String[] keyMaterialCerts,
+ String[] keyMaterialKeys,
+ String[] keyMaterialKeyAlgs,
+ String[] keyMaterialKeyNames,
+ ContextParameters params) throws Exception {
+
+ KeyStore ts = null; // trust store
+ KeyStore ks = null; // key store
+ char passphrase[] = "passphrase".toCharArray();
+
+ // Generate certificate from cert string.
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+
+ // Import the trused certs.
+ ByteArrayInputStream is;
+ if (trustedMaterials != null && trustedMaterials.length != 0) {
+ ts = KeyStore.getInstance("JKS");
+ ts.load(null, null);
+
+ Certificate[] trustedCert =
+ new Certificate[trustedMaterials.length];
+ for (int i = 0; i < trustedMaterials.length; i++) {
+ String trustedCertStr = trustedMaterials[i];
+
+ is = new ByteArrayInputStream(trustedCertStr.getBytes());
+ try {
+ trustedCert[i] = cf.generateCertificate(is);
+ } finally {
+ is.close();
+ }
+
+ ts.setCertificateEntry("trusted-cert-" + i, trustedCert[i]);
+ }
+ }
+
+ // Import the key materials.
+ //
+ // Note that certification pathes bigger than one are not supported yet.
+ boolean hasKeyMaterials =
+ (keyMaterialCerts != null) && (keyMaterialCerts.length != 0) &&
+ (keyMaterialKeys != null) && (keyMaterialKeys.length != 0) &&
+ (keyMaterialKeyAlgs != null) && (keyMaterialKeyAlgs.length != 0) &&
+ (keyMaterialCerts.length == keyMaterialKeys.length) &&
+ (keyMaterialCerts.length == keyMaterialKeyAlgs.length);
+ if (hasKeyMaterials) {
+ ks = KeyStore.getInstance("JKS");
+ ks.load(null, null);
+
+ for (int i = 0; i < keyMaterialCerts.length; i++) {
+ String keyCertStr = keyMaterialCerts[i];
+
+ // generate the private key.
+ PKCS8EncodedKeySpec priKeySpec = new PKCS8EncodedKeySpec(
+ Base64.getMimeDecoder().decode(keyMaterialKeys[i]));
+ KeyFactory kf =
+ KeyFactory.getInstance(keyMaterialKeyAlgs[i]);
+ PrivateKey priKey = kf.generatePrivate(priKeySpec);
+
+ // generate certificate chain
+ is = new ByteArrayInputStream(keyCertStr.getBytes());
+ Certificate keyCert = null;
+ try {
+ keyCert = cf.generateCertificate(is);
+ } finally {
+ is.close();
+ }
+
+ Certificate[] chain = new Certificate[] { keyCert };
+
+ // import the key entry.
+ ks.setKeyEntry("cert-" + keyMaterialKeyNames[i],
+ priKey, passphrase, chain);
+ }
+ }
+
+ // Create an SSLContext object.
+ TrustManagerFactory tmf =
+ TrustManagerFactory.getInstance(params.tmAlgorithm);
+ tmf.init(ts);
+
+ SSLContext context = SSLContext.getInstance(params.contextProtocol);
+ if (hasKeyMaterials && ks != null) {
+ KeyManagerFactory kmf =
+ KeyManagerFactory.getInstance(params.kmAlgorithm);
+ kmf.init(ks, passphrase);
+
+ context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
+ } else {
+ context.init(null, tmf.getTrustManagers(), null);
+ }
+
+ return context;
+ }
+
+ /*
+ * =================================================
+ * Stuffs to boot up the client-server mode testing.
+ */
+ private Thread clientThread = null;
+ private Thread serverThread = null;
+ private volatile Exception serverException = null;
+ private volatile Exception clientException = null;
+
+ /*
+ * Should we run the client or server in a separate thread?
+ * Both sides can throw exceptions, but do you have a preference
+ * as to which side should be the main thread.
+ */
+ private static final boolean separateServerThread = false;
+
+ /*
+ * Boot up the testing, used to drive remainder of the test.
+ */
+ private void bootup() throws Exception {
+ Exception startException = null;
+ try {
+ if (separateServerThread) {
+ startServer(true);
+ startClient(false);
+ } else {
+ startClient(true);
+ startServer(false);
+ }
+ } catch (Exception e) {
+ startException = e;
+ }
+
+ /*
+ * Wait for other side to close down.
+ */
+ if (separateServerThread) {
+ if (serverThread != null) {
+ serverThread.join();
+ }
+ } else {
+ if (clientThread != null) {
+ clientThread.join();
+ }
+ }
+
+ /*
+ * When we get here, the test is pretty much over.
+ * Which side threw the error?
+ */
+ Exception local;
+ Exception remote;
+
+ if (separateServerThread) {
+ remote = serverException;
+ local = clientException;
+ } else {
+ remote = clientException;
+ local = serverException;
+ }
+
+ Exception exception = null;
+
+ /*
+ * Check various exception conditions.
+ */
+ if ((local != null) && (remote != null)) {
+ // If both failed, return the curthread's exception.
+ local.initCause(remote);
+ exception = local;
+ } else if (local != null) {
+ exception = local;
+ } else if (remote != null) {
+ exception = remote;
+ } else if (startException != null) {
+ exception = startException;
+ }
+
+ /*
+ * If there was an exception *AND* a startException,
+ * output it.
+ */
+ if (exception != null) {
+ if (exception != startException && startException != null) {
+ exception.addSuppressed(startException);
+ }
+ throw exception;
+ }
+
+ // Fall-through: no exception to throw!
+ }
+
+ private void startServer(boolean newThread) throws Exception {
+ if (newThread) {
+ serverThread = new Thread() {
+ @Override
+ public void run() {
+ try {
+ doServerSide();
+ } catch (Exception e) {
+ /*
+ * Our server thread just died.
+ *
+ * Release the client, if not active already...
+ */
+ logException("Server died", e);
+ serverException = e;
+ }
+ }
+ };
+ serverThread.start();
+ } else {
+ try {
+ doServerSide();
+ } catch (Exception e) {
+ logException("Server failed", e);
+ serverException = e;
+ }
+ }
+ }
+
+ private void startClient(boolean newThread) throws Exception {
+ if (newThread) {
+ clientThread = new Thread() {
+ @Override
+ public void run() {
+ try {
+ doClientSide();
+ } catch (Exception e) {
+ /*
+ * Our client thread just died.
+ */
+ logException("Client died", e);
+ clientException = e;
+ }
+ }
+ };
+ clientThread.start();
+ } else {
+ try {
+ doClientSide();
+ } catch (Exception e) {
+ logException("Client failed", e);
+ clientException = e;
+ }
+ }
+ }
+
+ private synchronized void logException(String prefix, Throwable cause) {
+ System.out.println(prefix + ": " + cause);
+ cause.printStackTrace(System.out);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/lib/jdk/test/lib/security/TestCertificate.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2018, 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 jdk.test.lib.security;
+
+import java.io.ByteArrayInputStream;
+import java.security.cert.CertPath;
+import java.security.cert.CertPathValidator;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.PKIXParameters;
+import java.security.cert.TrustAnchor;
+import java.security.cert.X509Certificate;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+// Certificates taken from old ValWithAnchorByName testcase ***
+public enum TestCertificate {
+ // Subject: CN=SSLCertificate, O=SomeCompany
+ // Issuer: CN=Intermediate CA Cert, O=SomeCompany
+ // Validity: Tue Aug 30 14:37:19 PDT 2016 to Wed Aug 30 14:37:19 PDT 2017
+ ONE("1000",
+ "CN=SSLCertificate, O=SomeCompany",
+ "CN=Intermediate CA Cert, O=SomeCompany",
+ -1063259762,
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIDnTCCAoWgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwNTEUMBIGA1UEChMLU29t\n" +
+ "ZUNvbXBhbnkxHTAbBgNVBAMTFEludGVybWVkaWF0ZSBDQSBDZXJ0MB4XDTE2MDgz\n" +
+ "MDIxMzcxOVoXDTE3MDgzMDIxMzcxOVowLzEUMBIGA1UEChMLU29tZUNvbXBhbnkx\n" +
+ "FzAVBgNVBAMTDlNTTENlcnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\n" +
+ "MIIBCgKCAQEAjgv8KKE4CO0rbCjRLA1hXjRiSq30jeusCJ8frbRG+QOBgQ3j6jgc\n" +
+ "vk5wG1aTu7R4AFn0/HRDMzP9ZbRlZVIbJUTd8YiaNyZeyWapPnxHWrPCd5e1xopk\n" +
+ "ElieDdEH5FiLGtIrWy56CGA1hfQb1vUVYegyeY+TTtMFVHt0PrmMk4ZRgj/GtVNp\n" +
+ "BQQYIzaYAcrcWMeCn30ZrhaGAL1hsdgmEVV1wsTD4JeNMSwLwMYem7fg8ondGZIR\n" +
+ "kZuGtuSdOHu4Xz+mgDNXTeX/Bp/dQFucxCG+FOOM9Hoz72RY2W8YqgL38RlnwYWp\n" +
+ "nUNxhXWFH6vyINRQVEu3IgahR6HXjxM7LwIDAQABo4G8MIG5MBQGA1UdEQQNMAuC\n" +
+ "CWxvY2FsaG9zdDAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9s\n" +
+ "b2NhbGhvc3Q6NDIzMzMwHwYDVR0jBBgwFoAUYT525lwHCI4CmuWs8a7poaeKRJ4w\n" +
+ "HQYDVR0OBBYEFCaQnOX4L1ovqyfeKuoay+kI+lXgMA4GA1UdDwEB/wQEAwIFoDAd\n" +
+ "BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEB\n" +
+ "AD8dqQIqFasJcL8lm4mPTsBl0JgNiN8tQcXM7VCvcH+yDvEyh9vudDjuhpSORqPq\n" +
+ "f1o/EvJ+gfs269mBnYQujYRvmSd6EAcBntv5zn6amOh03o6PqTY9KaUC/mL9hB84\n" +
+ "Y5/LYioP16sME7egKnlrGUgKh0ZvGzm7c3SYx3Z5YoeFBOkZajc7Jm+cBw/uBQkF\n" +
+ "a9mLEczIvOgkq1wto8vr2ptH1gEuvFRcorN3muvq34bk40G08+AHlP3fCLFpI3FA\n" +
+ "IStJLJZRcO+Ib4sOcKuaBGnuMo/QVOCEMDUs6RgiWtSd93OZKFIUOASVp6YIkcSs\n" +
+ "5/rmc06sICqBjLfPEB68Jjw=\n" +
+ "-----END CERTIFICATE-----"),
+ // Subject: CN=Intermediate CA Cert, O=SomeCompany
+ // Issuer: CN=Root CA Cert, O=SomeCompany
+ // Validity: Sun Aug 07 14:37:19 PDT 2016 to Tue Aug 07 14:37:19 PDT 2018
+ TWO("64",
+ "CN=Intermediate CA Cert, O=SomeCompany",
+ "CN=Root CA Cert, O=SomeCompany",
+ -927189373,
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIDdjCCAl6gAwIBAgIBZDANBgkqhkiG9w0BAQsFADAtMRQwEgYDVQQKEwtTb21l\n" +
+ "Q29tcGFueTEVMBMGA1UEAxMMUm9vdCBDQSBDZXJ0MB4XDTE2MDgwNzIxMzcxOVoX\n" +
+ "DTE4MDgwNzIxMzcxOVowNTEUMBIGA1UEChMLU29tZUNvbXBhbnkxHTAbBgNVBAMT\n" +
+ "FEludGVybWVkaWF0ZSBDQSBDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\n" +
+ "CgKCAQEAnJR5CnE7GKlQjigExSJ6hHu302mc0PcA6TDgsIitPYD/r8RBbBuE51OQ\n" +
+ "7IP7AXmfPUV3/+pO/uxx6mgY5O6XeUl7KadhVPtPcL0BVVevCSOdTMVa3iV4zRpa\n" +
+ "C6Uy2ouUFnafKnDtlbieggyETUoNgVNJYA9L0XNhtSnENoLHC4Pq0v8OsNtsOWFR\n" +
+ "NiMTOA49NNDBw85WgPyFAxjqO4z0J0zxdWq3W4rSMB8xrkulv2Rvj3GcfYJK/ab8\n" +
+ "V1IJ6PMWCpujASY3BzvYPnN7BKuBjbWJPgZdPYfX1cxeG80u0tOuMfWWiNONSMSA\n" +
+ "7m9y304QA0gKqlrFFn9U4hU89kv1IwIDAQABo4GYMIGVMA8GA1UdEwEB/wQFMAMB\n" +
+ "Af8wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzABhhZodHRwOi8vbG9jYWxob3N0\n" +
+ "OjM5MTM0MB8GA1UdIwQYMBaAFJNMsejEyJUB9tiWycVczvpiMVQZMB0GA1UdDgQW\n" +
+ "BBRhPnbmXAcIjgKa5azxrumhp4pEnjAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcN\n" +
+ "AQELBQADggEBAE4nOFdW9OirPnRvxihQXYL9CXLuGQz5tr0XgN8wSY6Un9b6CRiK\n" +
+ "7obgIGimVdhvUC1qdRcwJqgOfJ2/jR5/5Qo0TVp+ww4dHNdUoj73tagJ7jTu0ZMz\n" +
+ "5Zdp0uwd4RD/syvTeVcbPc3m4awtgEvRgzpDMcSeKPZWInlo7fbnowKSAUAfO8de\n" +
+ "0cDkxEBkzPIzGNu256cdLZOqOK9wLJ9mQ0zKgi/2NsldNc2pl/6jkGpA6uL5lJsm\n" +
+ "fo9sDusWNHV1YggqjDQ19hrf40VuuC9GFl/qAW3marMuEzY/NiKVUxty1q1s48SO\n" +
+ "g5LoEPDDkbygOt7ICL3HYG1VufhC1Q2YY9c=\n" +
+ "-----END CERTIFICATE-----"),
+ // Subject: CN=Root CA Cert, O=SomeCompany
+ // Issuer: CN=Root CA Cert, O=SomeCompany
+ // Validity: Fri Jul 08 14:37:18 PDT 2016 to Fri Jun 28 14:37:18 PDT 2019
+ ROOT_CA("1",
+ "CN=Root CA Cert, O=SomeCompany",
+ "CN=Root CA Cert, O=SomeCompany",
+ -1299818863,
+ "-----BEGIN CERTIFICATE-----\n" +
+ "MIIDODCCAiCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAtMRQwEgYDVQQKEwtTb21l\n" +
+ "Q29tcGFueTEVMBMGA1UEAxMMUm9vdCBDQSBDZXJ0MB4XDTE2MDcwODIxMzcxOFoX\n" +
+ "DTE5MDYyODIxMzcxOFowLTEUMBIGA1UEChMLU29tZUNvbXBhbnkxFTATBgNVBAMT\n" +
+ "DFJvb3QgQ0EgQ2VydDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIlN\n" +
+ "M3WYEqkU2elXEZrV9QSDbDKwyaLEHafLFciH8Edoag3q/7jEzFJxI7JZ831tdbWQ\n" +
+ "Bm6Hgo+8pvetOFW1BckL8eIjyOONP2CKfFaeMaozsWi1cgxa+rjpU/Rekc+zBqvv\n" +
+ "y4Sr97TwT6nQiLlgjC1nCfR1SVpO51qoDChS7n785rsKEZxw/p+kkVWSZffU7zN9\n" +
+ "c645cPg//L/kjiyeKMkaquGQOYS68gQgy8YZXQv1E3l/8e8Ci1s1DYA5wpCbaBqg\n" +
+ "Tw84Rr4zlUEQBgXzQlRt+mPzeaDpdG1EeGkXrcdkZ+0EMELoOVXOEn6VNsz6vT3I\n" +
+ "KrnvQBSnN06xq/iWwC0CAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME\n" +
+ "GDAWgBSTTLHoxMiVAfbYlsnFXM76YjFUGTAdBgNVHQ4EFgQUk0yx6MTIlQH22JbJ\n" +
+ "xVzO+mIxVBkwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IBAQAAi+Nl\n" +
+ "sxP9t2IhiZIHRJGSBZuQlXIjwYIwbq3ZWc/ApZ+0oxtl7DYQi5uRNt8/opcGNCHc\n" +
+ "IY0fG93SbkDubXbxPYBW6D/RUjbz59ZryaP5ym55p1MjHTOqy+AM8g41xNTJikc3\n" +
+ "UUFXXnckeFbawijCsb7vf71owzKuxgBXi9n1rmXXtncKoA/LrUVXoUlKefdgDnsU\n" +
+ "sl3Q29eibE3HSqziMMoAOLm0jjekFGWIgLeTtyRYR1d0dNaUwsHTrQpPjxxUTn1x\n" +
+ "sAPpXKfzPnsYAZeeiaaE75GwbWlHzrNinvxdZQd0zctpfBJfVqD/+lWANlw+rOaK\n" +
+ "J2GyCaJINsyaI/I2\n" +
+ "-----END CERTIFICATE-----");
+
+ public String serialNumber;
+ public String algorithm;
+ public String subject;
+ public String issuer;
+ public String keyType;
+ public long certId;
+ public int keyLength;
+ public String encoded;
+
+ TestCertificate(String serialNumber, String subject, String issuer,
+ long certId, String encoded) {
+ this.serialNumber = serialNumber;
+ this.subject = subject;
+ this.issuer = issuer;
+ this.algorithm = "SHA256withRSA";
+ this.encoded = encoded;
+ this.certId = certId;
+ this.keyType = "RSA";
+ this.keyLength = 2048;
+ }
+
+ public X509Certificate generate(CertificateFactory cf) throws CertificateException {
+ ByteArrayInputStream is = new ByteArrayInputStream(encoded.getBytes());
+ return (X509Certificate) cf.generateCertificate(is);
+ }
+
+ public static void generateChain(boolean selfSignedTest) throws Exception {
+ // Do path validation as if it is always Tue, 06 Sep 2016 22:12:21 GMT
+ // This value is within the lifetimes of all certificates.
+ Date testDate = new Date(1473199941000L);
+
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+ X509Certificate c1 = TestCertificate.ONE.generate(cf);
+ X509Certificate c2 = TestCertificate.TWO.generate(cf);
+ X509Certificate ca = TestCertificate.ROOT_CA.generate(cf);
+
+ TrustAnchor ta = new TrustAnchor(ca, null);
+ CertPathValidator validator = CertPathValidator.getInstance("PKIX");
+
+ PKIXParameters params = new PKIXParameters(Collections.singleton(ta));
+ params.setRevocationEnabled(false);
+ params.setDate(testDate);
+ if (!selfSignedTest) {
+ CertPath path = cf.generateCertPath(List.of(c1, c2));
+ validator.validate(path, params);
+ } else {
+ CertPath path = cf.generateCertPath(List.of(ca));
+ validator.validate(path, params);
+ }
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/lib/jdk/test/lib/security/TestTLSHandshake.java Wed Nov 21 13:53:17 2018 -0500
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2018, 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 jdk.test.lib.security;
+
+import java.io.*;
+
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocket;
+
+
+public final class TestTLSHandshake extends SSLSocketTest {
+
+ public static final String CIPHER_SUITE =
+ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384";
+ public static final long HASHCODE = -1057291798L;
+ public static final long ANCHOR_HASHCODE = 1688661792L;
+ public static final String CERT_SERIAL = "edbec8f705af2514";
+ public static final String ANCHOR_CERT_SERIAL = "8e191778b2f331be";
+
+ public String protocolVersion;
+ public String peerHost;
+ public int peerPort;
+
+ @Override
+ protected void runServerApplication(SSLSocket socket) throws Exception {
+ InputStream sslIS = socket.getInputStream();
+ OutputStream sslOS = socket.getOutputStream();
+
+ sslIS.read();
+ sslOS.write(85);
+ sslOS.flush();
+ }
+
+ @Override
+ protected void runClientApplication(SSLSocket socket) throws Exception {
+ socket.setEnabledCipherSuites(new String[] { CIPHER_SUITE });
+ InputStream sslIS = socket.getInputStream();
+ OutputStream sslOS = socket.getOutputStream();
+
+ sslOS.write(280);
+ sslOS.flush();
+ sslIS.read();
+
+ SSLSession sslSession = socket.getSession();
+ protocolVersion = sslSession.getProtocol();
+ peerHost = sslSession.getPeerHost();
+ peerPort = sslSession.getPeerPort();
+ }
+}